requirements-as-code 0.6.2__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. {requirements_as_code-0.6.2/requirements_as_code.egg-info → requirements_as_code-0.7.0}/PKG-INFO +110 -18
  2. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/README.md +109 -17
  3. requirements_as_code-0.7.0/planning/designs/explorer-command-surface.md +270 -0
  4. requirements_as_code-0.7.0/planning/designs/explorer-first-run-experience.md +251 -0
  5. requirements_as_code-0.7.0/planning/designs/explorer-health-model.md +145 -0
  6. requirements_as_code-0.7.0/planning/designs/explorer-import-workflow.md +109 -0
  7. requirements_as_code-0.7.0/planning/designs/explorer-knowledge-graph.md +127 -0
  8. requirements_as_code-0.7.0/planning/designs/explorer-visual-system.md +67 -0
  9. requirements_as_code-0.7.0/planning/roadmap/v0.7.3-repo-intelligence.md +304 -0
  10. requirements_as_code-0.7.0/planning/roadmap/v0.7.4-repo-indexing.md +184 -0
  11. requirements_as_code-0.7.0/planning/roadmap/v0.8.0-service-api.md +197 -0
  12. requirements_as_code-0.7.0/planning/roadmap/v0.8.1-repository-model.md +160 -0
  13. requirements_as_code-0.7.0/planning/roadmap/v0.8.2-interactive-runtime-readiness.md +111 -0
  14. requirements_as_code-0.7.0/planning/roadmap/v0.8.3-integration-freeze.md +104 -0
  15. requirements_as_code-0.7.0/planning/roadmap/v0.9.0-explorer-foundation.md +243 -0
  16. requirements_as_code-0.7.0/planning/roadmap/v0.9.1-explorer-experience.md +98 -0
  17. requirements_as_code-0.7.0/planning/roadmap/v0.9.2-knowledge-operations.md +26 -0
  18. requirements_as_code-0.7.0/planning/roadmap/v0.9.3-intelligence-views.md +168 -0
  19. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/artifacts.py +181 -10
  20. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/cli.py +7 -6
  21. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/inspect.py +18 -3
  22. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/outputs.py +54 -0
  23. requirements_as_code-0.7.0/rac/relationships.py +86 -0
  24. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/schema.py +27 -0
  25. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/stats.py +62 -4
  26. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/validate.py +39 -0
  27. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0/requirements_as_code.egg-info}/PKG-INFO +110 -18
  28. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/SOURCES.txt +28 -4
  29. requirements_as_code-0.7.0/tests/fixtures/design/minimal.md +17 -0
  30. requirements_as_code-0.7.0/tests/fixtures/design/missing_constraints.md +17 -0
  31. requirements_as_code-0.7.0/tests/fixtures/design/valid.md +37 -0
  32. requirements_as_code-0.7.0/tests/fixtures/relationships/decision_with_links.md +38 -0
  33. requirements_as_code-0.7.0/tests/fixtures/relationships/design_with_links.md +33 -0
  34. requirements_as_code-0.7.0/tests/fixtures/relationships/prompt_with_links.md +33 -0
  35. requirements_as_code-0.7.0/tests/fixtures/relationships/requirement_with_links.md +26 -0
  36. requirements_as_code-0.7.0/tests/fixtures/relationships/roadmap_with_links.md +26 -0
  37. requirements_as_code-0.7.0/tests/test_design.py +413 -0
  38. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_inspect.py +1 -1
  39. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_prompt.py +2 -0
  40. requirements_as_code-0.7.0/tests/test_relationships.py +256 -0
  41. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_roadmap.py +12 -2
  42. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_schema.py +27 -5
  43. requirements_as_code-0.6.2/planning/roadmap/v0.8.0-explorer-foundation.md +0 -360
  44. requirements_as_code-0.6.2/planning/roadmap/v0.8.1-explorer-experience.md +0 -293
  45. requirements_as_code-0.6.2/planning/roadmap/v0.8.2-knowledge-operations.md +0 -290
  46. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/.github/workflows/python-publish.yml +0 -0
  47. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/.gitignore +0 -0
  48. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/LICENSE +0 -0
  49. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/examples/example_dashboard_v1.md +0 -0
  50. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/examples/example_dashboard_v2.md +0 -0
  51. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-001-markdown-first.md +0 -0
  52. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-002-ai-optional.md +0 -0
  53. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-003-structured-outputs-first.md +0 -0
  54. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-004-artifact-model.md +0 -0
  55. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-005-cli-first.md +0 -0
  56. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
  57. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-007-json-contract-stability.md +0 -0
  58. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
  59. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-009-ai-assisted-development.md +0 -0
  60. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
  61. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-011-file-first-pipeline.md +0 -0
  62. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-012-open-core-strategy.md +0 -0
  63. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
  64. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
  65. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
  66. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-016-relationships-as-structural-references.md +0 -0
  67. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/adr/adr-017-rac-managed-knowledge-not-work.md +0 -0
  68. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/future/v1.0-workspace-analysis.md +0 -0
  69. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/future/v1.1-review-engine.md +0 -0
  70. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/future/v1.2-mcp-server.md +0 -0
  71. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/future/v1.4-claude-skills.md +0 -0
  72. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/future/v1.4-python-sdk.md +0 -0
  73. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.5-decisions.md +0 -0
  74. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.7-prompts.md +0 -0
  75. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.2-stats.md +0 -0
  76. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.3-ingest.md +0 -0
  77. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.3.1-formats.md +0 -0
  78. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.4-inspect.md +0 -0
  79. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-expansion.md +0 -0
  80. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
  81. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
  82. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.0-artifact-improvement.md +0 -0
  83. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.1-guided-improvement.md +0 -0
  84. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.2-schema.md +0 -0
  85. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.0-roadmap-artifacts.md +0 -0
  86. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.1-roadmap-improvement.md +0 -0
  87. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.2-prompt-artifact.md +0 -0
  88. /requirements_as_code-0.6.2/planning/roadmap/v0.6.3-deign-artifacts.md → /requirements_as_code-0.7.0/planning/roadmap/v0.6.3-design-artifacts.md +0 -0
  89. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.0-relationship-metadata.md +0 -0
  90. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.1-relationship-inspection.md +0 -0
  91. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.2-relationship-validation.md +0 -0
  92. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/pyproject.toml +0 -0
  93. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/__init__.py +0 -0
  94. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/classification.py +0 -0
  95. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/diff.py +0 -0
  96. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/fs.py +0 -0
  97. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/improve.py +0 -0
  98. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/ingest.py +0 -0
  99. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/models.py +0 -0
  100. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/rac/parser.py +0 -0
  101. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/dependency_links.txt +0 -0
  102. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/entry_points.txt +0 -0
  103. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/requires.txt +0 -0
  104. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/top_level.txt +0 -0
  105. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/setup.cfg +0 -0
  106. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/conftest.py +0 -0
  107. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_category.md +0 -0
  108. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_status.md +0 -0
  109. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/minimal.md +0 -0
  110. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
  111. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
  112. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
  113. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/decision/with_metadata.md +0 -0
  114. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/diff/new.md +0 -0
  115. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/diff/old.md +0 -0
  116. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/ingest/sample.md +0 -0
  117. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/inspect/ambiguous.md +0 -0
  118. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/inspect/decision.md +0 -0
  119. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
  120. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/inspect/requirement.md +0 -0
  121. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/duplicate_ids.md +0 -0
  122. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/empty_req_text.md +0 -0
  123. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/malformed_id.md +0 -0
  124. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_id.md +0 -0
  125. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_problem.md +0 -0
  126. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_requirements.md +0 -0
  127. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_title.md +0 -0
  128. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/invalid/multiple_titles.md +0 -0
  129. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/broken.md +0 -0
  130. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_a.md +0 -0
  131. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_b.md +0 -0
  132. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
  133. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/prompt/minimal.md +0 -0
  134. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/prompt/missing_output.md +0 -0
  135. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/prompt/valid.md +0 -0
  136. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/minimal.md +0 -0
  137. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/missing_initiatives.md +0 -0
  138. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/valid.md +0 -0
  139. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/valid/bullet_requirements.md +0 -0
  140. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/valid/feature.md +0 -0
  141. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/valid/minimal.md +0 -0
  142. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/fixtures/valid/warnings.md +0 -0
  143. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_cli.py +0 -0
  144. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_decision_metadata.py +0 -0
  145. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_diff.py +0 -0
  146. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_improve.py +0 -0
  147. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_ingest.py +0 -0
  148. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_parser.py +0 -0
  149. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_stats.py +0 -0
  150. {requirements_as_code-0.6.2 → requirements_as_code-0.7.0}/tests/test_validate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: requirements-as-code
3
- Version: 0.6.2
3
+ Version: 0.7.0
4
4
  Summary: RAC — lint and diff product requirements written in Markdown.
5
5
  Author: tcballard
6
6
  License-Expression: MIT
@@ -423,9 +423,12 @@ Counts span all parsed requirement files; a feature with only *warnings* (e.g. n
423
423
  metrics) still counts as valid. Invalid files are listed at the end so they are
424
424
  never silently skipped.
425
425
 
426
- Decision artifacts are aggregated **separately** so they never distort the
427
- requirement totals or averages. When a directory contains decisions, a
428
- `Decisions` section reports the count plus a status and category breakdown:
426
+ Non-requirement artifacts are aggregated **separately** so they never distort the
427
+ requirement totals or averages. Decisions report metadata breakdowns; Roadmaps,
428
+ Prompts, and Designs use lightweight count/valid/invalid summaries.
429
+
430
+ When a directory contains decisions, a `Decisions` section reports the count plus
431
+ a status and category breakdown:
429
432
 
430
433
  ```text
431
434
  Decisions
@@ -444,11 +447,38 @@ Category
444
447
  - Process: 4
445
448
  ```
446
449
 
447
- Add `--json` for machine-readable output (a `decisions` block is included only
448
- when decisions are present). `stats` exits `0` when the directory has at least
449
- one valid feature or decision, `1` if none, and `2` if the path is not a
450
- directory. (A `--strict` flag for failing on *any* invalid file — handy in CI —
451
- is planned.)
450
+ When a directory contains Design artifacts, a lightweight section is shown:
451
+
452
+ ```text
453
+ Designs
454
+ =======
455
+
456
+ Total: 4
457
+ Valid: 3
458
+
459
+ Invalid Designs (1)
460
+ ./planning/design/draft.md — missing-constraints
461
+ ```
462
+
463
+ When artifacts declare [relationship metadata](#relationship-metadata), a
464
+ `Relationships` section reports **declared-presence counts** — how many artifacts
465
+ contain each relationship section with at least one reference. These are presence
466
+ counts, not resolved links or edge totals:
467
+
468
+ ```text
469
+ Relationships
470
+ =============
471
+
472
+ Artifacts with Related Decisions: 6
473
+ Artifacts with Related Requirements: 4
474
+ Artifacts with Supersedes: 2
475
+ ```
476
+
477
+ Add `--json` for machine-readable output. Artifact-specific blocks such as
478
+ `decisions`, `roadmaps`, `prompts`, `designs`, and `relationships` are included
479
+ only when those artifacts (or relationship sections) are present. `stats` exits `0` when the directory has at least one
480
+ valid known artifact, `1` if none, and `2` if the path is not a directory. (A
481
+ `--strict` flag for failing on *any* invalid file — handy in CI — is planned.)
452
482
 
453
483
  ---
454
484
 
@@ -525,10 +555,12 @@ Missing Sections:
525
555
  ```
526
556
 
527
557
  RAC classifies the document against known artifact schemas (no AI) and reports a
528
- confidence score. v0.4 recognizes **Requirement** and **Decision** artifacts;
529
- anything that doesn't fit well is reported as **Unknown** (a valid, successful
530
- result — not an error). `--json` emits `{ type, confidence, present_sections,
531
- missing_sections }`.
558
+ confidence score. RAC recognizes **Requirement**, **Decision**, **Roadmap**,
559
+ **Prompt**, and **Design** artifacts; anything that doesn't fit well is reported
560
+ as **Unknown** (a valid, successful result — not an error). `--json` emits
561
+ `{ type, confidence, present_sections, missing_sections }`, plus an additive
562
+ `relationships` object when the artifact declares relationship sections (see
563
+ [Relationship metadata](#relationship-metadata)).
532
564
 
533
565
  ### Inspect a directory
534
566
 
@@ -546,7 +578,10 @@ Files Inspected: 23
546
578
 
547
579
  Requirements: 7
548
580
  Decisions: 3
549
- Unknown: 13
581
+ Roadmaps: 2
582
+ Prompts: 4
583
+ Designs: 1
584
+ Unknown: 6
550
585
  ```
551
586
 
552
587
  ### Explain a classification (`--verbose`)
@@ -604,6 +639,57 @@ ADR-012
604
639
  or Category value fails validation (`invalid-decision-status` /
605
640
  `invalid-decision-category`); values are matched case-insensitively.
606
641
 
642
+ ### Relationship metadata
643
+
644
+ Artifacts can reference each other with explicit Markdown sections (v0.7.0). RAC
645
+ extracts these as **metadata only** — it records the references but does **not**
646
+ resolve, validate, or graph them (those come in a later v0.7.x release).
647
+
648
+ ```markdown
649
+ ## Related Decisions
650
+
651
+ - ADR-004
652
+ - ADR-012
653
+
654
+ ## Related Roadmaps
655
+
656
+ - ROADMAP-Q3-PLATFORM
657
+ ```
658
+
659
+ Each artifact type recognizes the relationship sections that make sense for it:
660
+
661
+ | Artifact | Relationship sections |
662
+ |-------------|--------------------------------------------------------------------------|
663
+ | Requirement | Related Decisions, Related Roadmaps, Related Prompts, Related Designs |
664
+ | Decision | Supersedes, Related Requirements, Related Roadmaps, Related Designs |
665
+ | Roadmap | Related Decisions, Related Requirements, Related Prompts, Related Designs |
666
+ | Prompt | Related Requirements, Related Decisions, Related Roadmaps, Related Designs |
667
+ | Design | Related Requirements, Related Decisions, Related Roadmaps, Related Prompts |
668
+
669
+ Relationship sections are **optional**: they are never scored, never reported as
670
+ missing, and never appear in starter templates — an artifact without them stays
671
+ valid. `inspect` surfaces them under a **Relationships** block, and in `--json`
672
+ as an additive `relationships` object (snake_case keys, string arrays, present
673
+ only when at least one reference is declared):
674
+
675
+ ```json
676
+ {
677
+ "type": "requirement",
678
+ "present_sections": ["problem", "requirements"],
679
+ "relationships": {
680
+ "related_decisions": ["ADR-004", "ADR-012"],
681
+ "related_roadmaps": ["ROADMAP-Q3-PLATFORM"]
682
+ }
683
+ }
684
+ ```
685
+
686
+ References are kept verbatim (an `ADR-004`, a `REQ-001`, or a relative path are
687
+ all valid) — RAC does not parse out IDs or check that the targets exist.
688
+
689
+ **`supersedes` is a backwards-compatible exception:** it remains a top-level
690
+ scalar (`"supersedes": "ADR-012"`) rather than moving into `relationships`, so the
691
+ existing Decision contract is unchanged.
692
+
607
693
  ### Synonyms
608
694
 
609
695
  Common heading variants are recognized automatically (case-insensitive,
@@ -686,10 +772,10 @@ So you can go straight from `rac inspect requirement.md` to
686
772
  ```
687
773
 
688
774
  `improve` generates suggestions for artifact types with complete schema guidance
689
- coverage. Today that means **Requirement** and **Decision** artifacts. Unknown
690
- documents return a short explanatory message instead. Future artifact types do
691
- not become improvable until their schemas define guidance for every required and
692
- recommended section.
775
+ coverage. Today that means **Requirement**, **Decision**, **Roadmap**, **Prompt**,
776
+ and **Design** artifacts. Unknown documents return a short explanatory message
777
+ instead. Future artifact types do not become improvable until their schemas
778
+ define guidance for every required and recommended section.
693
779
 
694
780
  Guidance is informational metadata only: it does not influence classification,
695
781
  validation, confidence scoring, statistics, or repository analysis.
@@ -709,11 +795,15 @@ rac schema --list
709
795
  rac schema --list --json
710
796
  rac schema requirement
711
797
  rac schema decision --json
798
+ rac schema design
712
799
  rac schema requirement --template
800
+ rac schema design --template
713
801
  ```
714
802
 
715
803
  `rac schema <type>` shows the full schema reference: required, recommended, and
716
804
  optional sections; descriptions; guidance; and metadata values where applicable.
805
+ Supported schemas are `requirement`, `decision`, `roadmap`, `prompt`, and
806
+ `design`.
717
807
 
718
808
  ```text
719
809
  Artifact Type: Decision
@@ -757,6 +847,7 @@ meaningful product knowledge.
757
847
  ```bash
758
848
  rac schema requirement --template > requirement.md
759
849
  rac schema decision --template > decision.md
850
+ rac schema design --template > design.md
760
851
  ```
761
852
 
762
853
  Generated templates are validation-safe:
@@ -764,6 +855,7 @@ Generated templates are validation-safe:
764
855
  ```bash
765
856
  rac schema requirement --template | rac validate -
766
857
  rac schema decision --template | rac validate -
858
+ rac schema design --template | rac validate -
767
859
  ```
768
860
 
769
861
  Unknown schemas fail with exit code `2` and list available schemas. Only
@@ -383,9 +383,12 @@ Counts span all parsed requirement files; a feature with only *warnings* (e.g. n
383
383
  metrics) still counts as valid. Invalid files are listed at the end so they are
384
384
  never silently skipped.
385
385
 
386
- Decision artifacts are aggregated **separately** so they never distort the
387
- requirement totals or averages. When a directory contains decisions, a
388
- `Decisions` section reports the count plus a status and category breakdown:
386
+ Non-requirement artifacts are aggregated **separately** so they never distort the
387
+ requirement totals or averages. Decisions report metadata breakdowns; Roadmaps,
388
+ Prompts, and Designs use lightweight count/valid/invalid summaries.
389
+
390
+ When a directory contains decisions, a `Decisions` section reports the count plus
391
+ a status and category breakdown:
389
392
 
390
393
  ```text
391
394
  Decisions
@@ -404,11 +407,38 @@ Category
404
407
  - Process: 4
405
408
  ```
406
409
 
407
- Add `--json` for machine-readable output (a `decisions` block is included only
408
- when decisions are present). `stats` exits `0` when the directory has at least
409
- one valid feature or decision, `1` if none, and `2` if the path is not a
410
- directory. (A `--strict` flag for failing on *any* invalid file — handy in CI —
411
- is planned.)
410
+ When a directory contains Design artifacts, a lightweight section is shown:
411
+
412
+ ```text
413
+ Designs
414
+ =======
415
+
416
+ Total: 4
417
+ Valid: 3
418
+
419
+ Invalid Designs (1)
420
+ ./planning/design/draft.md — missing-constraints
421
+ ```
422
+
423
+ When artifacts declare [relationship metadata](#relationship-metadata), a
424
+ `Relationships` section reports **declared-presence counts** — how many artifacts
425
+ contain each relationship section with at least one reference. These are presence
426
+ counts, not resolved links or edge totals:
427
+
428
+ ```text
429
+ Relationships
430
+ =============
431
+
432
+ Artifacts with Related Decisions: 6
433
+ Artifacts with Related Requirements: 4
434
+ Artifacts with Supersedes: 2
435
+ ```
436
+
437
+ Add `--json` for machine-readable output. Artifact-specific blocks such as
438
+ `decisions`, `roadmaps`, `prompts`, `designs`, and `relationships` are included
439
+ only when those artifacts (or relationship sections) are present. `stats` exits `0` when the directory has at least one
440
+ valid known artifact, `1` if none, and `2` if the path is not a directory. (A
441
+ `--strict` flag for failing on *any* invalid file — handy in CI — is planned.)
412
442
 
413
443
  ---
414
444
 
@@ -485,10 +515,12 @@ Missing Sections:
485
515
  ```
486
516
 
487
517
  RAC classifies the document against known artifact schemas (no AI) and reports a
488
- confidence score. v0.4 recognizes **Requirement** and **Decision** artifacts;
489
- anything that doesn't fit well is reported as **Unknown** (a valid, successful
490
- result — not an error). `--json` emits `{ type, confidence, present_sections,
491
- missing_sections }`.
518
+ confidence score. RAC recognizes **Requirement**, **Decision**, **Roadmap**,
519
+ **Prompt**, and **Design** artifacts; anything that doesn't fit well is reported
520
+ as **Unknown** (a valid, successful result — not an error). `--json` emits
521
+ `{ type, confidence, present_sections, missing_sections }`, plus an additive
522
+ `relationships` object when the artifact declares relationship sections (see
523
+ [Relationship metadata](#relationship-metadata)).
492
524
 
493
525
  ### Inspect a directory
494
526
 
@@ -506,7 +538,10 @@ Files Inspected: 23
506
538
 
507
539
  Requirements: 7
508
540
  Decisions: 3
509
- Unknown: 13
541
+ Roadmaps: 2
542
+ Prompts: 4
543
+ Designs: 1
544
+ Unknown: 6
510
545
  ```
511
546
 
512
547
  ### Explain a classification (`--verbose`)
@@ -564,6 +599,57 @@ ADR-012
564
599
  or Category value fails validation (`invalid-decision-status` /
565
600
  `invalid-decision-category`); values are matched case-insensitively.
566
601
 
602
+ ### Relationship metadata
603
+
604
+ Artifacts can reference each other with explicit Markdown sections (v0.7.0). RAC
605
+ extracts these as **metadata only** — it records the references but does **not**
606
+ resolve, validate, or graph them (those come in a later v0.7.x release).
607
+
608
+ ```markdown
609
+ ## Related Decisions
610
+
611
+ - ADR-004
612
+ - ADR-012
613
+
614
+ ## Related Roadmaps
615
+
616
+ - ROADMAP-Q3-PLATFORM
617
+ ```
618
+
619
+ Each artifact type recognizes the relationship sections that make sense for it:
620
+
621
+ | Artifact | Relationship sections |
622
+ |-------------|--------------------------------------------------------------------------|
623
+ | Requirement | Related Decisions, Related Roadmaps, Related Prompts, Related Designs |
624
+ | Decision | Supersedes, Related Requirements, Related Roadmaps, Related Designs |
625
+ | Roadmap | Related Decisions, Related Requirements, Related Prompts, Related Designs |
626
+ | Prompt | Related Requirements, Related Decisions, Related Roadmaps, Related Designs |
627
+ | Design | Related Requirements, Related Decisions, Related Roadmaps, Related Prompts |
628
+
629
+ Relationship sections are **optional**: they are never scored, never reported as
630
+ missing, and never appear in starter templates — an artifact without them stays
631
+ valid. `inspect` surfaces them under a **Relationships** block, and in `--json`
632
+ as an additive `relationships` object (snake_case keys, string arrays, present
633
+ only when at least one reference is declared):
634
+
635
+ ```json
636
+ {
637
+ "type": "requirement",
638
+ "present_sections": ["problem", "requirements"],
639
+ "relationships": {
640
+ "related_decisions": ["ADR-004", "ADR-012"],
641
+ "related_roadmaps": ["ROADMAP-Q3-PLATFORM"]
642
+ }
643
+ }
644
+ ```
645
+
646
+ References are kept verbatim (an `ADR-004`, a `REQ-001`, or a relative path are
647
+ all valid) — RAC does not parse out IDs or check that the targets exist.
648
+
649
+ **`supersedes` is a backwards-compatible exception:** it remains a top-level
650
+ scalar (`"supersedes": "ADR-012"`) rather than moving into `relationships`, so the
651
+ existing Decision contract is unchanged.
652
+
567
653
  ### Synonyms
568
654
 
569
655
  Common heading variants are recognized automatically (case-insensitive,
@@ -646,10 +732,10 @@ So you can go straight from `rac inspect requirement.md` to
646
732
  ```
647
733
 
648
734
  `improve` generates suggestions for artifact types with complete schema guidance
649
- coverage. Today that means **Requirement** and **Decision** artifacts. Unknown
650
- documents return a short explanatory message instead. Future artifact types do
651
- not become improvable until their schemas define guidance for every required and
652
- recommended section.
735
+ coverage. Today that means **Requirement**, **Decision**, **Roadmap**, **Prompt**,
736
+ and **Design** artifacts. Unknown documents return a short explanatory message
737
+ instead. Future artifact types do not become improvable until their schemas
738
+ define guidance for every required and recommended section.
653
739
 
654
740
  Guidance is informational metadata only: it does not influence classification,
655
741
  validation, confidence scoring, statistics, or repository analysis.
@@ -669,11 +755,15 @@ rac schema --list
669
755
  rac schema --list --json
670
756
  rac schema requirement
671
757
  rac schema decision --json
758
+ rac schema design
672
759
  rac schema requirement --template
760
+ rac schema design --template
673
761
  ```
674
762
 
675
763
  `rac schema <type>` shows the full schema reference: required, recommended, and
676
764
  optional sections; descriptions; guidance; and metadata values where applicable.
765
+ Supported schemas are `requirement`, `decision`, `roadmap`, `prompt`, and
766
+ `design`.
677
767
 
678
768
  ```text
679
769
  Artifact Type: Decision
@@ -717,6 +807,7 @@ meaningful product knowledge.
717
807
  ```bash
718
808
  rac schema requirement --template > requirement.md
719
809
  rac schema decision --template > decision.md
810
+ rac schema design --template > design.md
720
811
  ```
721
812
 
722
813
  Generated templates are validation-safe:
@@ -724,6 +815,7 @@ Generated templates are validation-safe:
724
815
  ```bash
725
816
  rac schema requirement --template | rac validate -
726
817
  rac schema decision --template | rac validate -
818
+ rac schema design --template | rac validate -
727
819
  ```
728
820
 
729
821
  Unknown schemas fail with exit code `2` and list available schemas. Only
@@ -0,0 +1,270 @@
1
+ # Explorer Command Surface
2
+
3
+ ## Context
4
+
5
+ RAC Explorer provides a terminal-native workspace for navigating product knowledge repositories.
6
+
7
+ Traditional command-line interfaces require users to remember commands:
8
+
9
+ ```text
10
+ rac inspect
11
+
12
+ rac relationships
13
+
14
+ rac portfolio
15
+ ```
16
+
17
+ Explorer should instead provide a discoverable interaction model where users express intent and navigate from a single entry point.
18
+
19
+ The command surface is inspired by modern developer tools such as:
20
+
21
+ - Claude Code
22
+ - Amp
23
+ - Command palettes
24
+ - Terminal-native workflows
25
+
26
+ ---
27
+
28
+ ## User Need
29
+
30
+ Users need a fast way to:
31
+
32
+ - Find artifacts
33
+ - Navigate repository knowledge
34
+ - Execute RAC workflows
35
+ - Discover available capabilities
36
+
37
+ without memorizing command syntax or navigating deep menus.
38
+
39
+ ---
40
+
41
+ ## Design
42
+
43
+ ### Primary Interaction
44
+
45
+ The primary command entry point is:
46
+
47
+ ```text
48
+ /
49
+ ```
50
+
51
+ Typing `/` opens the command surface.
52
+
53
+ Example:
54
+
55
+ ```text
56
+ /
57
+
58
+ open req-001
59
+
60
+ payments
61
+
62
+ validate repository
63
+
64
+ import document
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Unified Search and Commands
70
+
71
+ Search and actions share one interface.
72
+
73
+ The user should not need to decide:
74
+
75
+ ```text
76
+ Am I searching?
77
+
78
+ or
79
+
80
+ Am I running a command?
81
+ ```
82
+
83
+ Explorer resolves intent.
84
+
85
+ ---
86
+
87
+ ## Command Registry
88
+
89
+ All Explorer actions are registered through a single command registry.
90
+
91
+ Examples:
92
+
93
+ ```text
94
+ open
95
+
96
+ search
97
+
98
+ validate
99
+
100
+ import
101
+
102
+ relationships
103
+
104
+ health
105
+ ```
106
+
107
+ An action not registered in the command surface is considered undiscoverable.
108
+
109
+ ---
110
+
111
+ ## Artifact Navigation
112
+
113
+ Artifact lookup should support:
114
+
115
+ ```text
116
+ REQ-001
117
+
118
+ ADR-004
119
+
120
+ payments
121
+ ```
122
+
123
+ Results may include:
124
+
125
+ ```text
126
+ Requirements
127
+
128
+ REQ-001 Payment Retry Logic
129
+
130
+
131
+ Decisions
132
+
133
+ ADR-004 Payment Provider Choice
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Operational Commands
139
+
140
+ Repository operations should be accessible.
141
+
142
+ Examples:
143
+
144
+ ```text
145
+ /validate
146
+
147
+ /improve req-001
148
+
149
+ /import
150
+
151
+ /health
152
+ ```
153
+
154
+ Explorer invokes RAC Core services.
155
+
156
+ Explorer does not implement operation logic.
157
+
158
+ ---
159
+
160
+ ## Keyboard Model
161
+
162
+ Primary:
163
+
164
+ ```text
165
+ / Command
166
+
167
+ ↑ ↓ Navigate
168
+
169
+ Enter Select
170
+
171
+ Esc Back
172
+
173
+ q Quit
174
+ ```
175
+
176
+ Additional shortcuts may exist only for high-frequency actions.
177
+
178
+ ---
179
+
180
+ ## Empty States
181
+
182
+ The command surface should teach users.
183
+
184
+ Example:
185
+
186
+ ```text
187
+ Start typing...
188
+
189
+ Try:
190
+
191
+ open req-001
192
+
193
+ validate
194
+
195
+ import document
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Constraints
201
+
202
+ ### Single Interaction Model
203
+
204
+ Do not introduce:
205
+
206
+ - Separate search boxes
207
+ - Separate command palettes
208
+ - Feature-specific menus
209
+
210
+ The slash command is the universal entry point.
211
+
212
+ ---
213
+
214
+ ### No Intelligence Ownership
215
+
216
+ Command routing may happen in Explorer.
217
+
218
+ Repository answers come from RAC Core.
219
+
220
+ ---
221
+
222
+ ### Terminal Native
223
+
224
+ Interactions must work:
225
+
226
+ - Without mouse
227
+ - Over SSH
228
+ - In constrained terminals
229
+
230
+ ---
231
+
232
+ ## Accessibility
233
+
234
+ Command results shall not rely on colour alone.
235
+
236
+ Examples:
237
+
238
+ Preferred:
239
+
240
+ ```text
241
+ ✓ Valid
242
+
243
+ ! Warning
244
+
245
+ ✗ Error
246
+ ```
247
+
248
+ Avoid:
249
+
250
+ ```text
251
+ Green item
252
+
253
+ Yellow item
254
+
255
+ Red item
256
+ ```
257
+
258
+ ---
259
+
260
+ ## Related Requirements
261
+
262
+ - v0.9.0 Explorer Foundation
263
+ - v0.9.2 Knowledge Operations
264
+
265
+ ---
266
+
267
+ ## Related Decisions
268
+
269
+ - ADR-015 Explorer as Core Consumer
270
+ - ADR-016 Explorer Adapter Boundary