Skip to content

Architecture Change Management (TOGAF Phase H)

Auto-generated from USM decisions, risks, and future items.

Architecture Decisions (80)

IDDecisionStatusSource
outputs-from-configAll generators read output paths from usmconfig.json outputs sectionacceptedusm/cli-config-outputs
generate-only-flagReplace generate:xxx commands with generate --only <target> flagacceptedusm/cli-config-outputs
scaffold-project-to-subcommandRename scaffold-project to 'scaffold project' (subcommand)acceptedusm/cli-config-outputs
no-dependencyImplement port probing with Node.js built-in net module — no third-party dependency like detect-port or chokidar.acceptedusm/docs-serve-port-check
auto-port-opt-inAuto-port selection is opt-in via --auto-port flag, not the default.acceptedusm/docs-serve-port-check
lsof-best-effortProcess detection via lsof is best-effort only — graceful degradation if lsof is unavailable.acceptedusm/docs-serve-port-check
pid-file-approachUse a PID file (.usm-workspace/.vitepress.pid) for already-serving detection, not port-sniffing alone.acceptedusm/docs-serve-port-check
watch-in-processWatch-mode regeneration runs usm generate --only docs in-process (calling the generator functions directly), not as a subprocess.acceptedusm/docs-serve-port-check
debounce-500msWatch-mode debounce is 500ms — a pragmatic balance between responsiveness and avoiding thrash on bulk writes.acceptedusm/docs-serve-port-check
vitepress-over-customUse VitePress as the rendering layer instead of building a custom serveracceptedusm/cli-docs
unified-docs-directoryAll generated docs write to a single docs/ directory instead of scattered .agents-workspace/ pathsacceptedusm/cli-docs
sidebar-from-system-indexAuto-generate VitePress sidebar config from system.usm index + feature directory structureacceptedusm/cli-docs
vitepress-optional-dependencyVitePress is an optional peer dependency, not bundled with USMacceptedusm/cli-docs
dont-commit-generated-docsGenerated docs are not committed to the repo — served locally and deployed via CIacceptedusm/cli-docs
internal-over-externalInternal (host-language) DSL, not a custom grammarusm/internal-dsl-builder
runtime-schema-validationEnforce constraints by validating at build() rather than type-level brandingusm/internal-dsl-builder
manifest-based-detectionDetect services by language manifest filesacceptedusm/cli-multi-lang-scan
framework-specific-route-detectionDetect routes per-framework, not per-languageacceptedusm/cli-multi-lang-scan
configurable-in-usmconfigLanguage/framework detection rules are configurable in usmconfig.jsonacceptedusm/cli-multi-lang-scan
all-languages-from-startSupport all major languages from the initial implementationacceptedusm/cli-multi-lang-scan
tiny-grammar-not-sqlA ~200-line recursive-descent grammar, not SQL/jq subsetusm/query-layer
missing-field-is-falseUnknown/absent fields make predicates false instead of erroringusm/query-layer
capability-registry-patternCapabilities self-describe (detect + setup + introducedIn); upgrade orchestrates without hardcoding.acceptedusm/upgrade
usm-version-field-for-alignmentUse system.usm.usm_version for USM-tool alignment, NOT the project's own version field.acceptedusm/upgrade
schema-version-independenceSchema $version moves independently of the package version: additive schema changes do NOT bump $version (still v1); breaking changes bump $version + CURRENT_SCHEMA_VERSION together and ship a migration in usm upgrade.acceptedusm/upgrade
setup-owned-by-capabilityEach registry entry owns its own setup function (interactive + default); upgrade just calls it.acceptedusm/upgrade
interactive-with-flag-fallbackTTY prompts per capability; --apply uses defaults for CI/scripts; --check is report-only.acceptedusm/upgrade
non-destructiveUpgrade only adds missing blocks and bumps usm_version; existing config is never overwritten.acceptedusm/upgrade
homepage-simplify-not-removeSimplify the homepage by removing marketing content, not by removing the homepage entirely. Keep the spec-first diagram, quick stats, and quick start as the core reference content.acceptedusm/vitepress-home-feedback-schema
feedback-as-generated-pageThe feedback page is a generated markdown page (docs/feedback.md), not a custom Vue component. The nav bar link is added via VitePress themeConfig.nav.acceptedusm/vitepress-home-feedback-schema
agent-feedback-via-existing-mcpThe agent feedback path reuses the existing usm_report_feedback MCP tool (from usm/agent-feedback feature). The feedback page documents how agents should use it with page context.acceptedusm/vitepress-home-feedback-schema
cross-links-in-generatorCross-links and next-steps sections are added in the markdown generator, not hand-edited into output.acceptedusm/vitepress-home-feedback-schema
schema-as-single-sourceThe schema reference is generated entirely from schema/v1.json; terse field descriptions are enriched in-place in the schema so the reference is self-generating and never drifts.acceptedusm/vitepress-schema-polish
homepage-from-system-usmHomepage hero, tagline, principle cards, and CTAs are derived from system.usm (identity, summary, principles, repository) so every USM project gets a reflective homepage.acceptedusm/vitepress-schema-polish
mermaid-dark-mode-awareInject a small theme-bridge script so Mermaid follows VitePress isDark instead of the hardcoded 'default' theme.acceptedusm/vitepress-schema-polish
declarative-sidebar-groupsSidebar group order/names are driven by a declarative group-to-paths mapping while still only emitting links to pages that exist.acceptedusm/vitepress-schema-polish
native-vitepress-containersUse VitePress native containers and Mermaid code fences for visuals — no custom Vue components or heavy deps.acceptedusm/vitepress-schema-polish
priority-orderingDeliver schema-reference and homepage/getting-started first; visuals/polish last.acceptedusm/vitepress-schema-polish
emit-only-when-populatedEmit a templated page only when its source section is populated; never write a placeholderusm/docs-experience
togaf-as-architecture-sectionSurface togaf output as the Architecture section of the docs site, not a separate targetusm/docs-experience
css-not-config-for-widthWiden via generated theme CSS custom properties, not VitePress config knobsusm/docs-experience
feature-cards-as-navUse the VitePress features grid as homepage navigation rather than forcing a sidebar onto layout homeusm/docs-experience
voice-is-render-modeAudience is a render mode (voice), not just a filterusm/docs-experience
post-process-filteringGenerate full docs first, then filter for help audienceacceptedusm/gen-docs-split
visibility-field-optionalAdd optional visibility field (public/internal) to features and servicesacceptedusm/gen-docs-split
help-docs-simplified-featuresHelp docs show summary + intent + flows only, not contracts/tests/implementationacceptedusm/gen-docs-split
review-mode-separate-from-referenceAdd a review-oriented template alongside the existing overview templateacceptedusm/gen-feature-review
flows-as-numbered-stepsRender flows as numbered human-readable steps, not tablesacceptedusm/gen-feature-review
contracts-as-checklistRender contracts as a markdown checklist the human can mentally tickacceptedusm/gen-feature-review
tests-as-given-when-thenRender tests in given/when/then formatacceptedusm/gen-feature-review
default-upstream-hardcodedDefault upstream tracker is the canonical USM repo, overridable via feedback.upstream_trackerusm/feedback-upstream-routing
classification-instructions-not-detectionTeach scope classification via instructions rather than automatic detection in the MCP toolusm/feedback-upstream-routing
usage-in-feature-specAdd usage/options/prerequisites to FeatureUsm schema (optional fields)acceptedusm/gen-help-reference
config-reference-from-schemaGenerate usmconfig reference from usmconfig-v1.json schema descriptionsacceptedusm/gen-help-reference
schema-reference-from-v1-jsonGenerate schema reference from v1.json schema descriptionsacceptedusm/gen-help-reference
logo-carouselUse a clickable logo carousel, not tabsacceptedusm/mkt-language-tabs
simple-iconsUse Simple Icons (simpleicons.org) for language and framework logosacceptedusm/mkt-language-tabs
full-grid-in-docsFull language/framework reference grid goes in help docs, not marketing siteacceptedusm/mkt-language-tabs
instructions-plus-skill-not-pluginUse opencode instructions array + skill, not a plugin with experimental.chat.system.transformusm/opencode-integration
short-dedicated-file-not-agents-mdGenerate a dedicated short instructions file rather than reusing AGENTS.mdusm/opencode-integration
skill-file-usm-ownedThe skill and instructions files are fully USM-owned (wholesale regeneration); opencode.json is merge-touched only in instructionsusm/opencode-integration
roadmap-links-to-featuresRoadmap items can optionally reference a feature $id via a feature fieldacceptedusm/gen-roadmap
shipped-in-optionalAdd optional shipped_in field to roadmap items for version trackingacceptedusm/gen-roadmap
sidebar-checks-file-existenceSidebar generation should only include links to files that existacceptedusm/gen-roadmap
mermaid-via-vitepress-pluginUse VitePress mermaid plugin instead of relying on native mermaid renderingacceptedusm/gen-roadmap
one-generator-multiple-outputsSingle generator produces all tool-specific files in one passacceptedusm/gen-rules-files
workflow-instructions-not-just-contextRules files contain behavioural instructions, not just system descriptionacceptedusm/gen-rules-files
smart-merge-for-rules-filesReuse the smart-merge strategy from AGENTS.md generatoracceptedusm/gen-rules-files
cursor-uses-mdc-formatGenerate .cursor/rules/usm.mdc in Cursor's rule formatacceptedusm/gen-rules-files
json-import-firstImport the Structurizr workspace JSON format, not the DSL grammarusm/structurizr-bridge
features-as-componentsExport features as components inside their service containerusm/structurizr-bridge
default-human-gatehuman-gate is the default policyusm/agent-feedback
feedback-as-first-class-usm-typeFeedback entries are $type: feedback .usm files in .usm/feedback, not a free-form markdown logusm/agent-feedback
one-shared-protocol-blockA single Feedback Protocol block is rendered into all four rules files from one code pathusm/agent-feedback
setup-asks-two-questionsusm init asks exactly two questions: gh auth presence and policy choiceusm/agent-feedback
mcp-tool-respects-policyusm_report_feedback consults system.feedback.policy before writingusm/agent-feedback
write-tools-as-mcp-not-cliImplement authoring as MCP tools rather than CLI commands onlyacceptedusm/mcp-write
draft-returns-previewdraft_feature returns both YAML and generated markdownacceptedusm/mcp-write
validate-before-writeAll write operations validate against the v1 schema before persistingacceptedusm/mcp-write
json-over-yamlUse JSON for usmconfig (not YAML) because it is machine-generated and machine-readusm/usm-config

Change Governance Principles

  • Structured Source of Truth: Every system artifact is captured in YAML validated by a JSON Schema — no scattered, stale docs.
  • Agent First: USM files are designed for AI agent consumption via MCP tools before human readability.
  • Idempotent Generation: Scan and generate are safe to run repeatedly; smart-merge preserves human edits.
  • One Source, Many Outputs: A single .usm/ directory generates markdown, Mermaid, OpenAPI, ArchiMate, TOGAF, AGENTS.md, and Vitest specs.