requirements-as-code 0.6.3__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.3/requirements_as_code.egg-info → requirements_as_code-0.7.0}/PKG-INFO +71 -4
  2. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/README.md +70 -3
  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.3 → requirements_as_code-0.7.0}/rac/artifacts.py +107 -7
  20. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/inspect.py +18 -3
  21. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/outputs.py +26 -0
  22. requirements_as_code-0.7.0/rac/relationships.py +86 -0
  23. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/stats.py +19 -1
  24. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0/requirements_as_code.egg-info}/PKG-INFO +71 -4
  25. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/SOURCES.txt +23 -3
  26. requirements_as_code-0.7.0/tests/fixtures/relationships/decision_with_links.md +38 -0
  27. requirements_as_code-0.7.0/tests/fixtures/relationships/design_with_links.md +33 -0
  28. requirements_as_code-0.7.0/tests/fixtures/relationships/prompt_with_links.md +33 -0
  29. requirements_as_code-0.7.0/tests/fixtures/relationships/requirement_with_links.md +26 -0
  30. requirements_as_code-0.7.0/tests/fixtures/relationships/roadmap_with_links.md +26 -0
  31. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_prompt.py +2 -0
  32. requirements_as_code-0.7.0/tests/test_relationships.py +256 -0
  33. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_roadmap.py +12 -2
  34. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_schema.py +15 -3
  35. requirements_as_code-0.6.3/planning/roadmap/v0.8.0-explorer-foundation.md +0 -360
  36. requirements_as_code-0.6.3/planning/roadmap/v0.8.1-explorer-experience.md +0 -293
  37. requirements_as_code-0.6.3/planning/roadmap/v0.8.2-knowledge-operations.md +0 -290
  38. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/.github/workflows/python-publish.yml +0 -0
  39. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/.gitignore +0 -0
  40. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/LICENSE +0 -0
  41. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/examples/example_dashboard_v1.md +0 -0
  42. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/examples/example_dashboard_v2.md +0 -0
  43. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-001-markdown-first.md +0 -0
  44. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-002-ai-optional.md +0 -0
  45. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-003-structured-outputs-first.md +0 -0
  46. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-004-artifact-model.md +0 -0
  47. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-005-cli-first.md +0 -0
  48. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
  49. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-007-json-contract-stability.md +0 -0
  50. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
  51. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-009-ai-assisted-development.md +0 -0
  52. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
  53. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-011-file-first-pipeline.md +0 -0
  54. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-012-open-core-strategy.md +0 -0
  55. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
  56. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
  57. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
  58. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-016-relationships-as-structural-references.md +0 -0
  59. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-017-rac-managed-knowledge-not-work.md +0 -0
  60. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.0-workspace-analysis.md +0 -0
  61. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.1-review-engine.md +0 -0
  62. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.2-mcp-server.md +0 -0
  63. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.4-claude-skills.md +0 -0
  64. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.4-python-sdk.md +0 -0
  65. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.5-decisions.md +0 -0
  66. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.7-prompts.md +0 -0
  67. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.2-stats.md +0 -0
  68. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.3-ingest.md +0 -0
  69. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.3.1-formats.md +0 -0
  70. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4-inspect.md +0 -0
  71. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-expansion.md +0 -0
  72. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
  73. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
  74. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.0-artifact-improvement.md +0 -0
  75. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.1-guided-improvement.md +0 -0
  76. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.2-schema.md +0 -0
  77. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.0-roadmap-artifacts.md +0 -0
  78. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.1-roadmap-improvement.md +0 -0
  79. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.2-prompt-artifact.md +0 -0
  80. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.3-design-artifacts.md +0 -0
  81. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.0-relationship-metadata.md +0 -0
  82. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.1-relationship-inspection.md +0 -0
  83. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.2-relationship-validation.md +0 -0
  84. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/pyproject.toml +0 -0
  85. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/__init__.py +0 -0
  86. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/classification.py +0 -0
  87. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/cli.py +0 -0
  88. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/diff.py +0 -0
  89. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/fs.py +0 -0
  90. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/improve.py +0 -0
  91. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/ingest.py +0 -0
  92. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/models.py +0 -0
  93. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/parser.py +0 -0
  94. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/schema.py +0 -0
  95. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/validate.py +0 -0
  96. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/dependency_links.txt +0 -0
  97. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/entry_points.txt +0 -0
  98. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/requires.txt +0 -0
  99. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/top_level.txt +0 -0
  100. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/setup.cfg +0 -0
  101. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/conftest.py +0 -0
  102. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_category.md +0 -0
  103. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_status.md +0 -0
  104. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/minimal.md +0 -0
  105. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
  106. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
  107. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
  108. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/with_metadata.md +0 -0
  109. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/minimal.md +0 -0
  110. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/missing_constraints.md +0 -0
  111. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/valid.md +0 -0
  112. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/diff/new.md +0 -0
  113. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/diff/old.md +0 -0
  114. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/ingest/sample.md +0 -0
  115. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/ambiguous.md +0 -0
  116. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/decision.md +0 -0
  117. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
  118. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/requirement.md +0 -0
  119. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/duplicate_ids.md +0 -0
  120. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/empty_req_text.md +0 -0
  121. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/malformed_id.md +0 -0
  122. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_id.md +0 -0
  123. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_problem.md +0 -0
  124. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_requirements.md +0 -0
  125. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_title.md +0 -0
  126. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/multiple_titles.md +0 -0
  127. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/broken.md +0 -0
  128. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_a.md +0 -0
  129. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_b.md +0 -0
  130. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
  131. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/minimal.md +0 -0
  132. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/missing_output.md +0 -0
  133. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/valid.md +0 -0
  134. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/minimal.md +0 -0
  135. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/missing_initiatives.md +0 -0
  136. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/valid.md +0 -0
  137. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/bullet_requirements.md +0 -0
  138. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/feature.md +0 -0
  139. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/minimal.md +0 -0
  140. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/warnings.md +0 -0
  141. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_cli.py +0 -0
  142. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_decision_metadata.py +0 -0
  143. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_design.py +0 -0
  144. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_diff.py +0 -0
  145. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_improve.py +0 -0
  146. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_ingest.py +0 -0
  147. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_inspect.py +0 -0
  148. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_parser.py +0 -0
  149. {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_stats.py +0 -0
  150. {requirements_as_code-0.6.3 → 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.3
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
@@ -460,9 +460,23 @@ Invalid Designs (1)
460
460
  ./planning/design/draft.md — missing-constraints
461
461
  ```
462
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
+
463
477
  Add `--json` for machine-readable output. Artifact-specific blocks such as
464
- `decisions`, `roadmaps`, `prompts`, and `designs` are included only when those
465
- artifacts are present. `stats` exits `0` when the directory has at least one
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
466
480
  valid known artifact, `1` if none, and `2` if the path is not a directory. (A
467
481
  `--strict` flag for failing on *any* invalid file — handy in CI — is planned.)
468
482
 
@@ -544,7 +558,9 @@ RAC classifies the document against known artifact schemas (no AI) and reports a
544
558
  confidence score. RAC recognizes **Requirement**, **Decision**, **Roadmap**,
545
559
  **Prompt**, and **Design** artifacts; anything that doesn't fit well is reported
546
560
  as **Unknown** (a valid, successful result — not an error). `--json` emits
547
- `{ type, confidence, present_sections, missing_sections }`.
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)).
548
564
 
549
565
  ### Inspect a directory
550
566
 
@@ -623,6 +639,57 @@ ADR-012
623
639
  or Category value fails validation (`invalid-decision-status` /
624
640
  `invalid-decision-category`); values are matched case-insensitively.
625
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
+
626
693
  ### Synonyms
627
694
 
628
695
  Common heading variants are recognized automatically (case-insensitive,
@@ -420,9 +420,23 @@ Invalid Designs (1)
420
420
  ./planning/design/draft.md — missing-constraints
421
421
  ```
422
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
+
423
437
  Add `--json` for machine-readable output. Artifact-specific blocks such as
424
- `decisions`, `roadmaps`, `prompts`, and `designs` are included only when those
425
- artifacts are present. `stats` exits `0` when the directory has at least one
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
426
440
  valid known artifact, `1` if none, and `2` if the path is not a directory. (A
427
441
  `--strict` flag for failing on *any* invalid file — handy in CI — is planned.)
428
442
 
@@ -504,7 +518,9 @@ RAC classifies the document against known artifact schemas (no AI) and reports a
504
518
  confidence score. RAC recognizes **Requirement**, **Decision**, **Roadmap**,
505
519
  **Prompt**, and **Design** artifacts; anything that doesn't fit well is reported
506
520
  as **Unknown** (a valid, successful result — not an error). `--json` emits
507
- `{ type, confidence, present_sections, missing_sections }`.
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)).
508
524
 
509
525
  ### Inspect a directory
510
526
 
@@ -583,6 +599,57 @@ ADR-012
583
599
  or Category value fails validation (`invalid-decision-status` /
584
600
  `invalid-decision-category`); values are matched case-insensitively.
585
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
+
586
653
  ### Synonyms
587
654
 
588
655
  Common heading variants are recognized automatically (case-insensitive,
@@ -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
@@ -0,0 +1,251 @@
1
+ # Explorer First Run Experience
2
+
3
+ ## Context
4
+
5
+ RAC Explorer introduces a new way of interacting with product knowledge repositories.
6
+
7
+ The CLI is optimized for automation:
8
+
9
+ ```text
10
+ Run command
11
+
12
+ Receive output
13
+ ```
14
+
15
+ Explorer is optimized for exploration:
16
+
17
+ ```text
18
+ Enter workspace
19
+
20
+ Understand repository
21
+
22
+ Navigate knowledge
23
+ ```
24
+
25
+ The first launch experience determines whether users understand this distinction.
26
+
27
+ ---
28
+
29
+ ## User Need
30
+
31
+ Users need to become productive without knowing:
32
+
33
+ - RAC commands
34
+ - Repository structure
35
+ - Artifact types
36
+ - Relationship concepts
37
+
38
+ Explorer should guide users from zero context to useful exploration.
39
+
40
+ ---
41
+
42
+ ## Design
43
+
44
+ ## First Launch
45
+
46
+ Running:
47
+
48
+ ```bash
49
+ rac explorer
50
+ ```
51
+
52
+ without previous context opens onboarding.
53
+
54
+ Example:
55
+
56
+ ```text
57
+ Welcome to RAC Explorer
58
+
59
+ Your product knowledge workspace.
60
+
61
+
62
+ Choose repository:
63
+
64
+ > Current directory
65
+
66
+ Recent repository
67
+
68
+ Browse
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Repository Discovery
74
+
75
+ Explorer checks the selected location.
76
+
77
+ Possible states:
78
+
79
+ ---
80
+
81
+ ### Existing RAC Repository
82
+
83
+ Example:
84
+
85
+ ```text
86
+ Repository Found
87
+
88
+ Analyzing...
89
+
90
+ ✓ Requirements 42
91
+
92
+ ✓ Decisions 12
93
+
94
+ ✓ Relationships 84
95
+
96
+
97
+ Press / for anything
98
+ ```
99
+
100
+ ---
101
+
102
+ ### Empty Repository
103
+
104
+ Example:
105
+
106
+ ```text
107
+ No RAC artifacts found.
108
+
109
+
110
+ Start by:
111
+
112
+ > Import documents
113
+
114
+ Create artifact
115
+
116
+ Open another repository
117
+ ```
118
+
119
+ ---
120
+
121
+ ### Invalid Repository
122
+
123
+ Example:
124
+
125
+ ```text
126
+ Repository issues found
127
+
128
+
129
+ 3 invalid artifacts
130
+
131
+ 2 broken relationships
132
+
133
+
134
+ Open anyway?
135
+
136
+ > Yes
137
+
138
+ View issues
139
+ ```
140
+
141
+ ---
142
+
143
+ ## Learning The Interface
144
+
145
+ Onboarding teaches only essential controls.
146
+
147
+ Example:
148
+
149
+ ```text
150
+ Navigation
151
+
152
+ / Search and commands
153
+
154
+ ↑ ↓ Move
155
+
156
+ Enter Open
157
+
158
+ q Quit
159
+ ```
160
+
161
+ Do not introduce every feature upfront.
162
+
163
+ ---
164
+
165
+ ## Recent Repositories
166
+
167
+ Explorer remembers previously opened repositories.
168
+
169
+ Example:
170
+
171
+ ```text
172
+ Recent
173
+
174
+ requirements-as-code
175
+
176
+ payments-platform
177
+
178
+ identity-service
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Returning Users
184
+
185
+ Skip onboarding.
186
+
187
+ Restore:
188
+
189
+ - Last repository
190
+ - Last view
191
+ - Last artifact
192
+
193
+ Users return directly to work.
194
+
195
+ ---
196
+
197
+ ## Preferences
198
+
199
+ Optional preferences:
200
+
201
+ - Theme
202
+ - Default start view
203
+ - Artifact grouping
204
+
205
+ Preferences must never block onboarding.
206
+
207
+ ---
208
+
209
+ ## Constraints
210
+
211
+ ### Fast Startup
212
+
213
+ Users should reach repository context within seconds.
214
+
215
+ ---
216
+
217
+ ### No Accounts
218
+
219
+ Explorer requires:
220
+
221
+ - No login
222
+ - No cloud connection
223
+ - No synchronization
224
+
225
+ ---
226
+
227
+ ### No Forced Setup
228
+
229
+ A user can always exit onboarding and manually navigate.
230
+
231
+ ---
232
+
233
+ ## Accessibility
234
+
235
+ The onboarding flow shall:
236
+
237
+ - Be keyboard navigable
238
+ - Avoid colour-only status
239
+ - Provide clear text states
240
+
241
+ ---
242
+
243
+ ## Related Requirements
244
+
245
+ - v0.9.1 Workspace Experience
246
+
247
+ ---
248
+
249
+ ## Related Decisions
250
+
251
+ - ADR-015 Explorer as Core Consumer