Skip to content

Architecture Change Management (TOGAF Phase H) ​

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

Architecture Decisions (123) ​

IDDecisionStatusSource
use-deps-not-inlineUse battle-tested CLI libraries, not hand-rolled inline helpersacceptedusm/cli-color-output
respect-no-colorHonor NO_COLOR env var and non-TTY stdout/stderr by emitting plain textacceptedusm/cli-color-output
palettegreen=✓, red=✗, yellow=⚠, cyan=→/info, dim=secondary valuesacceptedusm/cli-color-output
cjs-pin-versionsPin dependency versions to CJS-compatible majorsacceptedusm/cli-color-output
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) plus a port file (.vitepress.port) 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
auto-port-defaultAuto-port is the DEFAULT when --port is omitted; an explicit --port N is strict and fails loudly if N is taken.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 grammar—usm/internal-dsl-builder
runtime-schema-validationEnforce constraints by validating at build() rather than type-level branding—usm/internal-dsl-builder
all-35-in-docsGenerate per-editor setup pages for all 35 editorsacceptedusm/mcp-setup-guides
top-10-logosMarketing site ToolLogos shows top 10 editors onlyacceptedusm/mcp-setup-guides
index-plus-per-editorIndex page plus per-editor pages (shadcn pattern)acceptedusm/mcp-setup-guides
rules-files-per-editorDocument rules/skills file installation on each editor page where supportedacceptedusm/mcp-setup-guides
stdio-config-patternUse the standard USM stdio pattern (usm mcp serve) for all editorsacceptedusm/mcp-setup-guides
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
detectors-directoryAdd .usm/detectors/*.yaml as a second auto-discovered extension surface alongside usmconfig.json detectionacceptedusm/cli-multi-lang-scan
script-escape-hatchAllow routes.script in a detector to point at a .ts/.js file exporting extractRoutes(sourceDir, framework) for convention-based frameworksacceptedusm/cli-multi-lang-scan
generalized-orchestratorGeneralize structural.ts service detection so any detector manifest drives it, removing the package.json hardcodeacceptedusm/cli-multi-lang-scan
infrastructure-as-detectorTreat infrastructure (Terraform today) as a detector kind rather than a hardcoded separate subcommandacceptedusm/cli-multi-lang-scan
precedence-orderDetector precedence is built-in defaults < .usm/detectors/ files < usmconfig.json detection (last wins)acceptedusm/cli-multi-lang-scan
tiny-grammar-not-sqlA ~200-line recursive-descent grammar, not SQL/jq subset—usm/query-layer
missing-field-is-falseUnknown/absent fields make predicates false instead of erroring—usm/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
content-block-systemDefine a content-block schema (heading, paragraph, code, mermaid, tabs, callout, table, steps, cards, badge, divider) that any .usm spec can use to express VitePress-rich content declaratively.acceptedusm/gen-content-blocks
reference-pages-on-systemsystem.usm gains reference_pages[] for product-level reference pages (language support, getting started, agent setup) with inline content or runtime sources (detectors, schema, config).acceptedusm/gen-content-blocks
reference-blocks-on-featuresFeature specs gain an optional reference[] field for user-facing reference content that survives the help filter.acceptedusm/gen-content-blocks
block-level-audience-filterThe help-doc filter operates at content-block granularity (keep audience: public, drop audience: internal) instead of section-level granularity (strip ## Contracts by heading name).acceptedusm/gen-content-blocks
preserve-schema-reading-generatorsgenerateConfigReference and generateSchemaReference are preserved — they read JSON schema files which ARE the source of truth for config/schema fields.acceptedusm/gen-content-blocks
delete-after-migrationHardcoded functions are deleted only after their content is migrated to specs and the replacement is proven by tests.acceptedusm/gen-content-blocks
emit-only-when-populatedEmit a templated page only when its source section is populated; never write a placeholder—usm/docs-experience
togaf-as-architecture-sectionSurface togaf output as the Architecture section of the docs site, not a separate target—usm/docs-experience
css-not-config-for-widthWiden via generated theme CSS custom properties, not VitePress config knobs—usm/docs-experience
feature-cards-as-navUse the VitePress features grid as homepage navigation rather than forcing a sidebar onto layout home—usm/docs-experience
voice-is-render-modeAudience is a render mode (voice), not just a filter—usm/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
docs-audience-modelHelp docs = user journey only (USM adopters + downstream end users); developer docs = contributors and James (everything). Help excludes internal tooling pages (code-navigator, orphan-files, spec-coverage) and the entire design/ section; keeps getting-started, agent setup, CLI/MCP/schema/config references, roadmap, language-support, feedback, and composed guides. Dev docs unchanged (full detail).acceptedusm/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_tracker—usm/feedback-upstream-routing
classification-instructions-not-detectionTeach scope classification via instructions rather than automatic detection in the MCP tool—usm/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
reuse-real-doc-structureModel browser mock content on real generated feature docsacceptedusm/mkt-mock-interfaces-v2
file-explorer-syncIDE file explorer reveals .usm files in sync with agent file-write actionsacceptedusm/mkt-mock-interfaces-v2
reuse-cli-animation-patternReuse the line-by-line reveal pattern from CliAnimation for both mocksacceptedusm/mkt-mock-interfaces
two-command-cycleCycle two command/spec pairs: draft_feature then generateacceptedusm/mkt-mock-interfaces
responsive-stackSide-by-side on md+ screens, stacked on mobileacceptedusm/mkt-mock-interfaces
instructions-plus-skill-not-pluginUse opencode instructions array + skill, not a plugin with experimental.chat.system.transform—usm/opencode-integration
short-dedicated-file-not-agents-mdGenerate a dedicated short instructions file rather than reusing AGENTS.md—usm/opencode-integration
skill-file-usm-ownedThe skill and instructions files are fully USM-owned (wholesale regeneration); opencode.json is merge-touched only in instructions—usm/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
source-mapping-nameName the feature source mapping rather than code navigator or file tree, because the capability is building a bidirectional source-to-spec mapping and rendering multiple views from it.acceptedusm/gen-source-mapping
reference-pages-sourcesSource mapping views are reference_pages sources on system.usm, rendered through the generic content-block renderer.acceptedusm/gen-source-mapping
no-new-schema-fieldsUse existing spec fields only — service modules[] and feature implementation — no new schema fields.acceptedusm/gen-source-mapping
filesystem-walk-for-completenessThe generator walks the filesystem within service paths[] to enumerate actual files, not just the files mentioned in specs.acceptedusm/gen-source-mapping
json-import-firstImport the Structurizr workspace JSON format, not the DSL grammar—usm/structurizr-bridge
features-as-componentsExport features as components inside their service container—usm/structurizr-bridge
generator-not-authorThe technical design document is a generator (structured renderer), not an authored doc. All content comes from .usm specs, schema, or declared content blocks.—usm/gen-technical-design
design-pages-parallel-to-reference-pagessystem.usm gains a design_pages[] field parallel to reference_pages[]. Each entry can declare inline content blocks for a section, enriching the structured data.—usm/gen-technical-design
suppress-empty-sectionsSections with no data are suppressed entirely — no empty stub pages, no sidebar links to pages that don't exist.—usm/gen-technical-design
five-group-sidebarThe sidebar is restructured into five groups: Getting Started, Design, Project Management, Developers, Exports. This replaces the current fragmented groups (Core Concepts, Workflows, Architecture, Deployment, Contributing).—usm/gen-technical-design
nav-template-definitionThe nav template structure is the standard for all generated technical docs. It defines five
top-level groups and the pages within each. The template is fixed in structure but adaptive in
rendering — groups and pages only appear when data exists.
Getting Started
  Home
  Getting Started

Design
  Project Overview
    Project Name
    Project Description
    Stakeholders
    Assumptions
    Use-cases
  Requirements
    Functional Requirements
    Non-Functional Requirements
      Performance
      Scalability
      Security
      Reliability
      Maintainability
  System Architecture
    High-Level Diagram
    Technology Stack
      Frontend
      Backend
      Database
      Infrastructure
    System Components
  Module Design
    Module Name
    Purpose
    Inputs
    Outputs
    Dependencies
    Flow
  Database Design
    ER Diagram
    Schema Design
    Indexes
    Transactions
  API Design
    Endpoints
      HTTP Method (GET/POST/PUT/DELETE)
      URL Schemas / naming conventions
    Request/Response structure
    Authentication
    Authorization (roles, resources, permissions)
    Rate Limiting
    Error Handling
  Security Design
    Authentication / Authorization
    Data Encryption
    Security Auditing
    Vulnerabilities
    Security Stack
  Deployment Architecture
    Deployment Diagram
    Environment Setup
      Development
      Staging
      Production
    Scaling Strategy
    Monitoring Stack
  Testing Strategy
    Unit Testing
    Integration Testing
    Acceptance Testing
    Performance Testing
    Security Testing
    Automated Testing
  Maintenance & Monitoring
    Logging
    Alerting
    System Health Monitoring
    Error Tracking
  Backup & Recovery
    Backup Strategy
    Disaster Recovery
  Risks & Mitigation
    Technical Risks
    Mitigation Strategies
  Future Enhancements
    Roadmap
    Scalability Considerations

Project Management
  Roadmap
  Features (grouped by service/area)
  Decision Register

Developers
  Source Map
  Test Coverage
  Spec Coverage
  API Reference
  CLI Reference
  Configuration

Exports (collapsed)
  TOGAF Phases
  ArchiMate Model

Level 1 = sidebar group. Level 2 = sidebar page link. Level 3+ = page content sections (rendered as the page outline/TOC, not sidebar links). The sidebar is 2 levels deep (group > page). Groups and pages only appear when their data source exists — the template adapts to the project type. | — | usm/gen-technical-design | | decision-register-consolidated | A Decision Register page consolidates all decisions from features, services, and system principles into one page under Project Management. | — | usm/gen-technical-design | | features-as-project-management | Features are grouped under Project Management, not Design. Features with flows/contracts/tests/status are work records, not design prose. | — | usm/gen-technical-design | | single-vision-not-staged | Implement the full composition model in one feature — no phased rollout | accepted | usm/gen-user-docs | | minimal-personas | Personas stay minimal: id, name, description — no goals/frustrations/expertise yet | accepted | usm/gen-user-docs | | actor-default-system | Step actor defaults to system; flows without a persona actor remain pipeline flows in developer docs | accepted | usm/gen-user-docs | | e2e-link-via-tests | E2E linkage via optional tests[].flow reference — not steps referencing tests | accepted | usm/gen-user-docs | | filter-deprecated-not-deleted | Deprecate (do not delete) the --audience help subtraction filter for feature pages | accepted | usm/gen-user-docs | | default-human-gate | human-gate is the default policy | — | usm/agent-feedback | | feedback-as-first-class-usm-type | Feedback entries are $type: feedback .usm files in .usm/feedback, not a free-form markdown log | — | usm/agent-feedback | | one-shared-protocol-block | A single Feedback Protocol block is rendered into all four rules files from one code path | — | usm/agent-feedback | | setup-asks-two-questions | usm init asks exactly two questions: gh auth presence and policy choice | — | usm/agent-feedback | | mcp-tool-respects-policy | usm_report_feedback consults system.feedback.policy before writing | — | usm/agent-feedback | | write-tools-as-mcp-not-cli | Implement authoring as MCP tools rather than CLI commands only | accepted | usm/mcp-write | | draft-returns-preview | draft_feature returns both YAML and generated markdown | accepted | usm/mcp-write | | validate-before-write | All write operations validate against the v1 schema before persisting | accepted | usm/mcp-write | | json-over-yaml | Use JSON for usmconfig (not YAML) because it is machine-generated and machine-read | — | usm/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.