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