requirements-as-code 0.5.0__tar.gz → 0.5.2__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 (117) hide show
  1. {requirements_as_code-0.5.0/requirements_as_code.egg-info → requirements_as_code-0.5.2}/PKG-INFO +104 -10
  2. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/README.md +104 -10
  3. requirements_as_code-0.5.2/planning/adr/adr-016-relationships-as-structural-references.md +508 -0
  4. {requirements_as_code-0.5.0/planning/roadmap → requirements_as_code-0.5.2/planning/roadmap/archive}/v0.7-prompts.md +2 -0
  5. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.5.1-guided-improvement.md +29 -9
  6. requirements_as_code-0.5.2/planning/roadmap/v0.5.2-schema.md +546 -0
  7. requirements_as_code-0.5.2/planning/roadmap/v0.6.0-roadmap-artifacts.md +422 -0
  8. requirements_as_code-0.5.2/planning/roadmap/v0.6.1-roadmap-improvement.md +380 -0
  9. requirements_as_code-0.5.2/planning/roadmap/v0.6.2-prompt-artifact.md +380 -0
  10. requirements_as_code-0.5.2/planning/roadmap/v0.7.0-relationship-metadata.md +523 -0
  11. requirements_as_code-0.5.2/planning/roadmap/v0.7.1-relationship-inspection.md +415 -0
  12. requirements_as_code-0.5.2/planning/roadmap/v0.7.2-relationship-validation.md +398 -0
  13. requirements_as_code-0.5.2/planning/roadmap/v0.8.0-explorer-foundation.md +360 -0
  14. requirements_as_code-0.5.2/planning/roadmap/v0.8.1-explorer-experience.md +293 -0
  15. requirements_as_code-0.5.2/planning/roadmap/v0.8.2-knowledge-operations.md +290 -0
  16. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/artifacts.py +50 -0
  17. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/cli.py +73 -3
  18. requirements_as_code-0.5.2/rac/improve.py +101 -0
  19. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/outputs.py +77 -8
  20. requirements_as_code-0.5.2/rac/schema.py +152 -0
  21. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2/requirements_as_code.egg-info}/PKG-INFO +104 -10
  22. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/SOURCES.txt +15 -4
  23. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_cli.py +1 -0
  24. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_improve.py +124 -12
  25. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_inspect.py +9 -3
  26. requirements_as_code-0.5.2/tests/test_schema.py +199 -0
  27. requirements_as_code-0.5.0/planning/roadmap/v0.6-roadmaps.md +0 -33
  28. requirements_as_code-0.5.0/planning/roadmap/v0.8-explorer.md +0 -392
  29. requirements_as_code-0.5.0/rac/improve.py +0 -84
  30. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/.github/workflows/python-publish.yml +0 -0
  31. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/.gitignore +0 -0
  32. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/LICENSE +0 -0
  33. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/examples/example_dashboard_v1.md +0 -0
  34. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/examples/example_dashboard_v2.md +0 -0
  35. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-001-markdown-first.md +0 -0
  36. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-002-ai-optional.md +0 -0
  37. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-003-structured-outputs-first.md +0 -0
  38. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-004-artifact-model.md +0 -0
  39. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-005-cli-first.md +0 -0
  40. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
  41. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-007-json-contract-stability.md +0 -0
  42. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
  43. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-009-ai-assisted-development.md +0 -0
  44. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
  45. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-011-file-first-pipeline.md +0 -0
  46. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-012-open-core-strategy.md +0 -0
  47. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
  48. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
  49. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
  50. /requirements_as_code-0.5.0/planning/adr/adr-016-rac-managed-knowledge-not-work.md → /requirements_as_code-0.5.2/planning/adr/adr-017-rac-managed-knowledge-not-work.md +0 -0
  51. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.0-workspace-analysis.md +0 -0
  52. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.1-review-engine.md +0 -0
  53. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.2-mcp-server.md +0 -0
  54. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.4-claude-skills.md +0 -0
  55. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.4-python-sdk.md +0 -0
  56. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/archive/v0.5-decisions.md +0 -0
  57. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.2-stats.md +0 -0
  58. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.3-ingest.md +0 -0
  59. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.3.1-formats.md +0 -0
  60. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4-inspect.md +0 -0
  61. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-expansion.md +0 -0
  62. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
  63. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
  64. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.5.0-artifact-improvement.md +0 -0
  65. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/pyproject.toml +0 -0
  66. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/__init__.py +0 -0
  67. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/classification.py +0 -0
  68. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/diff.py +0 -0
  69. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/fs.py +0 -0
  70. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/ingest.py +0 -0
  71. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/inspect.py +0 -0
  72. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/models.py +0 -0
  73. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/parser.py +0 -0
  74. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/stats.py +0 -0
  75. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/validate.py +0 -0
  76. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/dependency_links.txt +0 -0
  77. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/entry_points.txt +0 -0
  78. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/requires.txt +0 -0
  79. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/top_level.txt +0 -0
  80. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/setup.cfg +0 -0
  81. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/conftest.py +0 -0
  82. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_category.md +0 -0
  83. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_status.md +0 -0
  84. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/minimal.md +0 -0
  85. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
  86. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
  87. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
  88. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/with_metadata.md +0 -0
  89. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/diff/new.md +0 -0
  90. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/diff/old.md +0 -0
  91. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/ingest/sample.md +0 -0
  92. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/ambiguous.md +0 -0
  93. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/decision.md +0 -0
  94. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
  95. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/requirement.md +0 -0
  96. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/duplicate_ids.md +0 -0
  97. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/empty_req_text.md +0 -0
  98. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/malformed_id.md +0 -0
  99. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_id.md +0 -0
  100. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_problem.md +0 -0
  101. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_requirements.md +0 -0
  102. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_title.md +0 -0
  103. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/multiple_titles.md +0 -0
  104. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/broken.md +0 -0
  105. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_a.md +0 -0
  106. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_b.md +0 -0
  107. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
  108. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/bullet_requirements.md +0 -0
  109. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/feature.md +0 -0
  110. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/minimal.md +0 -0
  111. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/warnings.md +0 -0
  112. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_decision_metadata.py +0 -0
  113. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_diff.py +0 -0
  114. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_ingest.py +0 -0
  115. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_parser.py +0 -0
  116. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_stats.py +0 -0
  117. {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/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.5.0
3
+ Version: 0.5.2
4
4
  Summary: RAC — lint and diff product requirements written in Markdown.
5
5
  Author: tcballard
6
6
  License-Expression: MIT
@@ -619,10 +619,11 @@ usage errors (file not found, or a non-Markdown file — convert it with
619
619
  ## Improve
620
620
 
621
621
  Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
622
- next*. It reports the required and recommended sections an artifact is missing
623
- **deterministically, from the schema, with no AI** (ADR-002) and can emit
624
- Markdown templates for them. `improve` is **advisory and read-only**: it never
625
- modifies your files and never generates content beyond `_TODO_` placeholders.
622
+ next* and how to think about completing it. It reports the required and
623
+ recommended sections an artifact is missing, plus schema-defined guidance for
624
+ those sections **deterministically, from the schema, with no AI** (ADR-002).
625
+ `improve` is **advisory and read-only**: it never modifies your files and never
626
+ generates content beyond `_TODO_` placeholders and guidance comments.
626
627
 
627
628
  ```bash
628
629
  rac improve requirement.md
@@ -642,18 +643,23 @@ Missing Required:
642
643
 
643
644
  Missing Recommended:
644
645
  - Risks
646
+ • What could prevent successful delivery?
647
+ • What dependencies or unknowns exist?
645
648
  - Assumptions
649
+ • What are you assuming to be true?
650
+ • What would change the approach if it turned out false?
646
651
  ```
647
652
 
648
653
  `--template` turns the gaps into a ready-to-paste skeleton (required sections
649
- first, then recommended), with a short guidance hint per section:
654
+ first, then recommended), with deterministic guidance comments per section:
650
655
 
651
656
  ```markdown
652
657
  ## Risks
653
658
 
654
659
  _TODO_
655
660
 
656
- <!-- Potential implementation, delivery, or adoption risks -->
661
+ <!-- What could prevent successful delivery? -->
662
+ <!-- What dependencies or unknowns exist? -->
657
663
  ```
658
664
 
659
665
  So you can go straight from `rac inspect requirement.md` to
@@ -665,18 +671,106 @@ So you can go straight from `rac inspect requirement.md` to
665
671
  {
666
672
  "type": "requirement",
667
673
  "missing_required": [],
668
- "missing_recommended": ["risks", "assumptions"]
674
+ "missing_recommended": ["risks", "assumptions"],
675
+ "guidance": {
676
+ "risks": [
677
+ "What could prevent successful delivery?",
678
+ "What dependencies or unknowns exist?"
679
+ ],
680
+ "assumptions": [
681
+ "What are you assuming to be true?",
682
+ "What would change the approach if it turned out false?"
683
+ ]
684
+ }
669
685
  }
670
686
  ```
671
687
 
672
- v0.5.0 generates suggestions for **Requirement** artifacts. Other known types
673
- (e.g. Decision) and Unknown documents return a short explanatory message instead.
688
+ `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.
693
+
694
+ Guidance is informational metadata only: it does not influence classification,
695
+ validation, confidence scoring, statistics, or repository analysis.
696
+
674
697
  `improve` is advisory: it exits `0` for any completed analysis (with or without
675
698
  suggestions) and `2` for usage errors. The presence of suggestions never changes
676
699
  the exit code.
677
700
 
678
701
  ---
679
702
 
703
+ ## Schema
704
+
705
+ Inspect RAC's registered artifact schemas without creating a file.
706
+
707
+ ```bash
708
+ rac schema --list
709
+ rac schema --list --json
710
+ rac schema requirement
711
+ rac schema decision --json
712
+ rac schema requirement --template
713
+ ```
714
+
715
+ `rac schema <type>` shows the full schema reference: required, recommended, and
716
+ optional sections; descriptions; guidance; and metadata values where applicable.
717
+
718
+ ```text
719
+ Artifact Type: Decision
720
+
721
+ Required Sections:
722
+ - Context
723
+ - Decision
724
+ - Consequences
725
+
726
+ Recommended Sections:
727
+ - Status
728
+ - Category
729
+ - Alternatives Considered
730
+
731
+ Optional Sections:
732
+ - Supersedes
733
+
734
+ Metadata Fields:
735
+ - Status: Proposed | Accepted | Superseded | Deprecated
736
+ - Category: Architecture | Product | Process | Technical | Other
737
+ ```
738
+
739
+ `--json` returns the same schema data as grouped arrays and maps:
740
+
741
+ ```json
742
+ {
743
+ "type": "requirement",
744
+ "required": ["problem", "requirements"],
745
+ "recommended": ["success_metrics", "risks", "assumptions"],
746
+ "optional": [],
747
+ "descriptions": {},
748
+ "guidance": {},
749
+ "metadata": {}
750
+ }
751
+ ```
752
+
753
+ `--template` emits a structurally valid Markdown starter. Templates are useful
754
+ starting points, not finished artifacts: users still replace TODO text with
755
+ meaningful product knowledge.
756
+
757
+ ```bash
758
+ rac schema requirement --template > requirement.md
759
+ rac schema decision --template > decision.md
760
+ ```
761
+
762
+ Generated templates are validation-safe:
763
+
764
+ ```bash
765
+ rac schema requirement --template | rac validate -
766
+ rac schema decision --template | rac validate -
767
+ ```
768
+
769
+ Unknown schemas fail with exit code `2` and list available schemas. Only
770
+ registered schemas are supported; custom schemas are out of scope.
771
+
772
+ ---
773
+
680
774
  ## Review (Planned)
681
775
 
682
776
  AI-assisted product review.
@@ -579,10 +579,11 @@ usage errors (file not found, or a non-Markdown file — convert it with
579
579
  ## Improve
580
580
 
581
581
  Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
582
- next*. It reports the required and recommended sections an artifact is missing
583
- **deterministically, from the schema, with no AI** (ADR-002) and can emit
584
- Markdown templates for them. `improve` is **advisory and read-only**: it never
585
- modifies your files and never generates content beyond `_TODO_` placeholders.
582
+ next* and how to think about completing it. It reports the required and
583
+ recommended sections an artifact is missing, plus schema-defined guidance for
584
+ those sections **deterministically, from the schema, with no AI** (ADR-002).
585
+ `improve` is **advisory and read-only**: it never modifies your files and never
586
+ generates content beyond `_TODO_` placeholders and guidance comments.
586
587
 
587
588
  ```bash
588
589
  rac improve requirement.md
@@ -602,18 +603,23 @@ Missing Required:
602
603
 
603
604
  Missing Recommended:
604
605
  - Risks
606
+ • What could prevent successful delivery?
607
+ • What dependencies or unknowns exist?
605
608
  - Assumptions
609
+ • What are you assuming to be true?
610
+ • What would change the approach if it turned out false?
606
611
  ```
607
612
 
608
613
  `--template` turns the gaps into a ready-to-paste skeleton (required sections
609
- first, then recommended), with a short guidance hint per section:
614
+ first, then recommended), with deterministic guidance comments per section:
610
615
 
611
616
  ```markdown
612
617
  ## Risks
613
618
 
614
619
  _TODO_
615
620
 
616
- <!-- Potential implementation, delivery, or adoption risks -->
621
+ <!-- What could prevent successful delivery? -->
622
+ <!-- What dependencies or unknowns exist? -->
617
623
  ```
618
624
 
619
625
  So you can go straight from `rac inspect requirement.md` to
@@ -625,18 +631,106 @@ So you can go straight from `rac inspect requirement.md` to
625
631
  {
626
632
  "type": "requirement",
627
633
  "missing_required": [],
628
- "missing_recommended": ["risks", "assumptions"]
634
+ "missing_recommended": ["risks", "assumptions"],
635
+ "guidance": {
636
+ "risks": [
637
+ "What could prevent successful delivery?",
638
+ "What dependencies or unknowns exist?"
639
+ ],
640
+ "assumptions": [
641
+ "What are you assuming to be true?",
642
+ "What would change the approach if it turned out false?"
643
+ ]
644
+ }
629
645
  }
630
646
  ```
631
647
 
632
- v0.5.0 generates suggestions for **Requirement** artifacts. Other known types
633
- (e.g. Decision) and Unknown documents return a short explanatory message instead.
648
+ `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.
653
+
654
+ Guidance is informational metadata only: it does not influence classification,
655
+ validation, confidence scoring, statistics, or repository analysis.
656
+
634
657
  `improve` is advisory: it exits `0` for any completed analysis (with or without
635
658
  suggestions) and `2` for usage errors. The presence of suggestions never changes
636
659
  the exit code.
637
660
 
638
661
  ---
639
662
 
663
+ ## Schema
664
+
665
+ Inspect RAC's registered artifact schemas without creating a file.
666
+
667
+ ```bash
668
+ rac schema --list
669
+ rac schema --list --json
670
+ rac schema requirement
671
+ rac schema decision --json
672
+ rac schema requirement --template
673
+ ```
674
+
675
+ `rac schema <type>` shows the full schema reference: required, recommended, and
676
+ optional sections; descriptions; guidance; and metadata values where applicable.
677
+
678
+ ```text
679
+ Artifact Type: Decision
680
+
681
+ Required Sections:
682
+ - Context
683
+ - Decision
684
+ - Consequences
685
+
686
+ Recommended Sections:
687
+ - Status
688
+ - Category
689
+ - Alternatives Considered
690
+
691
+ Optional Sections:
692
+ - Supersedes
693
+
694
+ Metadata Fields:
695
+ - Status: Proposed | Accepted | Superseded | Deprecated
696
+ - Category: Architecture | Product | Process | Technical | Other
697
+ ```
698
+
699
+ `--json` returns the same schema data as grouped arrays and maps:
700
+
701
+ ```json
702
+ {
703
+ "type": "requirement",
704
+ "required": ["problem", "requirements"],
705
+ "recommended": ["success_metrics", "risks", "assumptions"],
706
+ "optional": [],
707
+ "descriptions": {},
708
+ "guidance": {},
709
+ "metadata": {}
710
+ }
711
+ ```
712
+
713
+ `--template` emits a structurally valid Markdown starter. Templates are useful
714
+ starting points, not finished artifacts: users still replace TODO text with
715
+ meaningful product knowledge.
716
+
717
+ ```bash
718
+ rac schema requirement --template > requirement.md
719
+ rac schema decision --template > decision.md
720
+ ```
721
+
722
+ Generated templates are validation-safe:
723
+
724
+ ```bash
725
+ rac schema requirement --template | rac validate -
726
+ rac schema decision --template | rac validate -
727
+ ```
728
+
729
+ Unknown schemas fail with exit code `2` and list available schemas. Only
730
+ registered schemas are supported; custom schemas are out of scope.
731
+
732
+ ---
733
+
640
734
  ## Review (Planned)
641
735
 
642
736
  AI-assisted product review.
@@ -699,4 +793,4 @@ The project is intentionally focused on one goal:
699
793
 
700
794
  # License
701
795
 
702
- MIT
796
+ MIT