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.
- {requirements_as_code-0.6.3/requirements_as_code.egg-info → requirements_as_code-0.7.0}/PKG-INFO +71 -4
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/README.md +70 -3
- requirements_as_code-0.7.0/planning/designs/explorer-command-surface.md +270 -0
- requirements_as_code-0.7.0/planning/designs/explorer-first-run-experience.md +251 -0
- requirements_as_code-0.7.0/planning/designs/explorer-health-model.md +145 -0
- requirements_as_code-0.7.0/planning/designs/explorer-import-workflow.md +109 -0
- requirements_as_code-0.7.0/planning/designs/explorer-knowledge-graph.md +127 -0
- requirements_as_code-0.7.0/planning/designs/explorer-visual-system.md +67 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.7.3-repo-intelligence.md +304 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.7.4-repo-indexing.md +184 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.8.0-service-api.md +197 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.8.1-repository-model.md +160 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.8.2-interactive-runtime-readiness.md +111 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.8.3-integration-freeze.md +104 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.9.0-explorer-foundation.md +243 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.9.1-explorer-experience.md +98 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.9.2-knowledge-operations.md +26 -0
- requirements_as_code-0.7.0/planning/roadmap/v0.9.3-intelligence-views.md +168 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/artifacts.py +107 -7
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/inspect.py +18 -3
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/outputs.py +26 -0
- requirements_as_code-0.7.0/rac/relationships.py +86 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/stats.py +19 -1
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0/requirements_as_code.egg-info}/PKG-INFO +71 -4
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/SOURCES.txt +23 -3
- requirements_as_code-0.7.0/tests/fixtures/relationships/decision_with_links.md +38 -0
- requirements_as_code-0.7.0/tests/fixtures/relationships/design_with_links.md +33 -0
- requirements_as_code-0.7.0/tests/fixtures/relationships/prompt_with_links.md +33 -0
- requirements_as_code-0.7.0/tests/fixtures/relationships/requirement_with_links.md +26 -0
- requirements_as_code-0.7.0/tests/fixtures/relationships/roadmap_with_links.md +26 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_prompt.py +2 -0
- requirements_as_code-0.7.0/tests/test_relationships.py +256 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_roadmap.py +12 -2
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_schema.py +15 -3
- requirements_as_code-0.6.3/planning/roadmap/v0.8.0-explorer-foundation.md +0 -360
- requirements_as_code-0.6.3/planning/roadmap/v0.8.1-explorer-experience.md +0 -293
- requirements_as_code-0.6.3/planning/roadmap/v0.8.2-knowledge-operations.md +0 -290
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/.github/workflows/python-publish.yml +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/.gitignore +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/LICENSE +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/examples/example_dashboard_v1.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/examples/example_dashboard_v2.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-001-markdown-first.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-002-ai-optional.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-003-structured-outputs-first.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-004-artifact-model.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-005-cli-first.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-007-json-contract-stability.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-009-ai-assisted-development.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-011-file-first-pipeline.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-012-open-core-strategy.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-016-relationships-as-structural-references.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/adr/adr-017-rac-managed-knowledge-not-work.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.0-workspace-analysis.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.1-review-engine.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.2-mcp-server.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.4-claude-skills.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/future/v1.4-python-sdk.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.5-decisions.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/archive/v0.7-prompts.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.2-stats.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.3-ingest.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.3.1-formats.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4-inspect.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-expansion.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.0-artifact-improvement.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.1-guided-improvement.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.5.2-schema.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.0-roadmap-artifacts.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.1-roadmap-improvement.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.2-prompt-artifact.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.6.3-design-artifacts.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.0-relationship-metadata.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.1-relationship-inspection.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/planning/roadmap/v0.7.2-relationship-validation.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/pyproject.toml +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/__init__.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/classification.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/cli.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/diff.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/fs.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/improve.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/ingest.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/models.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/parser.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/schema.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/rac/validate.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/dependency_links.txt +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/entry_points.txt +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/requires.txt +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/requirements_as_code.egg-info/top_level.txt +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/setup.cfg +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/conftest.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_category.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/bad_status.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/minimal.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/decision/with_metadata.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/minimal.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/missing_constraints.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/design/valid.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/diff/new.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/diff/old.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/ingest/sample.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/ambiguous.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/decision.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/inspect/requirement.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/duplicate_ids.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/empty_req_text.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/malformed_id.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_id.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_problem.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_requirements.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/missing_title.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/invalid/multiple_titles.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/broken.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_a.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/feature_b.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/minimal.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/missing_output.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/prompt/valid.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/minimal.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/missing_initiatives.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/roadmap/valid.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/bullet_requirements.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/feature.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/minimal.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/fixtures/valid/warnings.md +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_cli.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_decision_metadata.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_design.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_diff.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_improve.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_ingest.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_inspect.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_parser.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_stats.py +0 -0
- {requirements_as_code-0.6.3 → requirements_as_code-0.7.0}/tests/test_validate.py +0 -0
{requirements_as_code-0.6.3/requirements_as_code.egg-info → requirements_as_code-0.7.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: requirements-as-code
|
|
3
|
-
Version: 0.
|
|
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 `
|
|
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 `
|
|
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
|