From b92fafc93d8209418ed5a1719e2a979082233ec7 Mon Sep 17 00:00:00 2001 From: schickling-assistant <261620128+schickling-assistant@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:59:33 +0200 Subject: [PATCH] feat(intent): converge the corpus layout agent-tool: Codex agent-tool-version: 0.145.0 agent-runtime: Codex 0.145.0 agent-session-lookup: unavailable tooling-profile: dotfiles@unknown-dirty --- .github/workflows/ci.yml | 14 ++-- README.md | 14 ++-- context/cli/requirements.md | 4 +- context/cli/spec.md | 10 +-- ...ecision-records-with-pr-local-proposals.md | 0 ...r-child-intent-nodes-by-formal-contract.md | 0 ...use-delta-directory-for-open-divergence.md | 0 .../0004-open-deltas-may-exist-on-main.md | 0 ...05-separate-open-questions-from-roadmap.md | 0 ...add-constraints-section-to-requirements.md | 0 ...007-common-subsystems-not-generic-files.md | 0 ...iew-smells-live-in-root-intent-contract.md | 0 ...se-open-questions-for-drafting-coverage.md | 0 .../0010-validate-load-bearing-assumptions.md | 0 ...-require-evidence-options-and-tradeoffs.md | 0 ...ntent-is-the-intent-interview-procedure.md | 0 ...evaluate-intent-with-isolated-scenarios.md | 0 ...glossary-handling-lives-in-grill-intent.md | 0 ...e-existing-intent-systems-as-references.md | 0 ...use-narrow-intent-enforcement-subsystem.md | 0 .../0018-identifiers-are-commit-scoped.md | 0 ...f-enforcement-with-deterministic-subset.md | 0 ...020-keep-structured-intent-roadmap-only.md | 0 ...omote-link-checks-before-decision-shape.md | 0 ...ope-decision-shape-to-root-intent-first.md | 0 ...n-semantic-review-assets-in-enforcement.md | 0 ...-semantic-review-fixtures-in-evaluation.md | 0 ...start-semantic-review-with-smell-matrix.md | 0 ...review-fixtures-deterministically-first.md | 0 ...sertions-for-real-semantic-review-evals.md | 0 .../0028-real-token-evals-are-manual-only.md | 0 ...29-no-extra-token-spend-flag-for-review.md | 0 ...0030-keep-enforcement-consumer-agnostic.md | 0 ...ams-use-full-mermaid-previewer-advisory.md | 0 ...32-rename-glossary-artifact-to-ontology.md | 0 ...ocal-citation-carries-the-qualification.md | 0 ...l-exit-is-enforced-at-merge-not-relaxed.md | 0 ...-with-a-fresh-init-not-filtered-history.md | 0 .../0036-use-intent-as-the-only-layer-name.md | 0 .../decision-shape-enforcement.md | 0 .../link-structure-and-symbolic-references.md | 0 .../intent}/01-vision/requirements.md | 0 {intent => context/intent}/01-vision/spec.md | 0 .../intent}/02-requirements/requirements.md | 0 .../intent}/02-requirements/spec.md | 0 .../intent}/03-spec/requirements.md | 0 {intent => context/intent}/03-spec/spec.md | 0 .../.experiments/ontology-sota-survey.md | 0 .../intent}/04-ontology/requirements.md | 0 .../intent}/04-ontology/spec.md | 0 .../intent}/05-intuition/requirements.md | 0 .../intent}/05-intuition/spec.md | 0 .../intent}/06-decisions/requirements.md | 0 .../intent}/06-decisions/spec.md | 0 .../intent}/07-experiments/requirements.md | 0 .../intent}/07-experiments/spec.md | 0 .../intent}/08-reference/requirements.md | 0 .../intent}/08-reference/spec.md | 0 ...exit-is-unenforced-and-already-violated.md | 0 .../intent}/09-delta/requirements.md | 0 {intent => context/intent}/09-delta/spec.md | 0 .../intent}/10-open-questions/requirements.md | 0 .../intent}/10-open-questions/spec.md | 0 .../intent}/11-roadmap/requirements.md | 0 {intent => context/intent}/11-roadmap/spec.md | 0 .../12-common-subsystems/requirements.md | 0 .../intent}/12-common-subsystems/spec.md | 0 .../intent}/13-review-smells/requirements.md | 0 .../intent}/13-review-smells/spec.md | 0 .../intent}/14-grill-intent/requirements.md | 2 +- .../intent}/14-grill-intent/spec.md | 4 +- .../intent}/15-evaluation/requirements.md | 0 .../semantic-review/fixture-format.md | 2 +- .../requirements-mechanism/assertions.json | 0 .../expected-review.json | 0 .../requirements-mechanism/fixture.json | 0 .../requirements-mechanism/requirements.md | 0 .../requirements-mechanism/notes.md | 0 .../spec-rationale/assertions.json | 0 .../spec-rationale/expected-review.json | 0 .../spec-rationale/fixture.json | 0 .../input/context/spec-rationale/spec.md | 0 .../semantic-review/spec-rationale/notes.md | 0 .../stale-delta/assertions.json | 0 .../stale-delta/expected-review.json | 0 .../semantic-review/stale-delta/fixture.json | 0 .../DELTA-001-review-command-missing.md | 0 .../semantic-review/stale-delta/notes.md | 0 .../stale-open-question/assertions.json | 0 .../stale-open-question/expected-review.json | 0 .../stale-open-question/fixture.json | 0 .../stale-open-question/open-questions.md | 0 .../stale-open-question/notes.md | 0 .../vision-mechanism/assertions.json | 0 .../vision-mechanism/expected-review.json | 0 .../vision-mechanism/fixture.json | 0 .../input/context/vision-mechanism/vision.md | 0 .../semantic-review/vision-mechanism/notes.md | 0 .../intent}/15-evaluation/spec.md | 2 +- .../2026-06-19-real-provider-review-eval.md | 0 .../intent}/16-enforcement/requirements.md | 0 .../intent}/16-enforcement/review-prompt.md | 2 +- .../16-enforcement/review-result.schema.json | 0 .../intent}/16-enforcement/spec.md | 6 +- {intent => context/intent}/intuition.md | 0 {intent => context/intent}/ontology.md | 0 {intent => context/intent}/requirements.md | 0 {intent => context/intent}/roadmap.md | 0 {intent => context/intent}/spec.md | 2 +- {intent => context/intent}/vision.md | 2 +- crates/intent/Cargo.toml | 2 +- crates/intent/src/lib.rs | 73 +++++++++++++++--- crates/intent/src/main.rs | 4 +- crates/intent/tests/intent_check.rs | 74 +++++++++++++++++++ flake.nix | 4 +- skills/intent.md | 12 +-- 116 files changed, 178 insertions(+), 55 deletions(-) rename {intent => context/intent}/.decisions/0001-use-decision-records-with-pr-local-proposals.md (100%) rename {intent => context/intent}/.decisions/0002-order-child-intent-nodes-by-formal-contract.md (100%) rename {intent => context/intent}/.decisions/0003-use-delta-directory-for-open-divergence.md (100%) rename {intent => context/intent}/.decisions/0004-open-deltas-may-exist-on-main.md (100%) rename {intent => context/intent}/.decisions/0005-separate-open-questions-from-roadmap.md (100%) rename {intent => context/intent}/.decisions/0006-add-constraints-section-to-requirements.md (100%) rename {intent => context/intent}/.decisions/0007-common-subsystems-not-generic-files.md (100%) rename {intent => context/intent}/.decisions/0008-review-smells-live-in-root-intent-contract.md (100%) rename {intent => context/intent}/.decisions/0009-use-open-questions-for-drafting-coverage.md (100%) rename {intent => context/intent}/.decisions/0010-validate-load-bearing-assumptions.md (100%) rename {intent => context/intent}/.decisions/0011-decisions-require-evidence-options-and-tradeoffs.md (100%) rename {intent => context/intent}/.decisions/0013-grill-intent-is-the-intent-interview-procedure.md (100%) rename {intent => context/intent}/.decisions/0014-evaluate-intent-with-isolated-scenarios.md (100%) rename {intent => context/intent}/.decisions/0015-glossary-handling-lives-in-grill-intent.md (100%) rename {intent => context/intent}/.decisions/0016-use-existing-intent-systems-as-references.md (100%) rename {intent => context/intent}/.decisions/0017-use-narrow-intent-enforcement-subsystem.md (100%) rename {intent => context/intent}/.decisions/0018-identifiers-are-commit-scoped.md (100%) rename {intent => context/intent}/.decisions/0019-start-xref-enforcement-with-deterministic-subset.md (100%) rename {intent => context/intent}/.decisions/0020-keep-structured-intent-roadmap-only.md (100%) rename {intent => context/intent}/.decisions/0021-promote-link-checks-before-decision-shape.md (100%) rename {intent => context/intent}/.decisions/0022-scope-decision-shape-to-root-intent-first.md (100%) rename {intent => context/intent}/.decisions/0023-own-semantic-review-assets-in-enforcement.md (100%) rename {intent => context/intent}/.decisions/0024-put-semantic-review-fixtures-in-evaluation.md (100%) rename {intent => context/intent}/.decisions/0025-start-semantic-review-with-smell-matrix.md (100%) rename {intent => context/intent}/.decisions/0026-validate-semantic-review-fixtures-deterministically-first.md (100%) rename {intent => context/intent}/.decisions/0027-use-minimum-assertions-for-real-semantic-review-evals.md (100%) rename {intent => context/intent}/.decisions/0028-real-token-evals-are-manual-only.md (100%) rename {intent => context/intent}/.decisions/0029-no-extra-token-spend-flag-for-review.md (100%) rename {intent => context/intent}/.decisions/0030-keep-enforcement-consumer-agnostic.md (100%) rename {intent => context/intent}/.decisions/0031-diagrams-use-full-mermaid-previewer-advisory.md (100%) rename {intent => context/intent}/.decisions/0032-rename-glossary-artifact-to-ontology.md (100%) rename {intent => context/intent}/.decisions/0033-decision-and-delta-ordinals-stay-subsystem-local-citation-carries-the-qualification.md (100%) rename {intent => context/intent}/.decisions/0034-proposal-exit-is-enforced-at-merge-not-relaxed.md (100%) rename {intent => context/intent}/.decisions/0035-extract-to-a-fresh-repository-with-a-fresh-init-not-filtered-history.md (100%) rename {intent => context/intent}/.decisions/0036-use-intent-as-the-only-layer-name.md (100%) rename {intent => context/intent}/.experiments/decision-shape-enforcement.md (100%) rename {intent => context/intent}/.experiments/link-structure-and-symbolic-references.md (100%) rename {intent => context/intent}/01-vision/requirements.md (100%) rename {intent => context/intent}/01-vision/spec.md (100%) rename {intent => context/intent}/02-requirements/requirements.md (100%) rename {intent => context/intent}/02-requirements/spec.md (100%) rename {intent => context/intent}/03-spec/requirements.md (100%) rename {intent => context/intent}/03-spec/spec.md (100%) rename {intent => context/intent}/04-ontology/.experiments/ontology-sota-survey.md (100%) rename {intent => context/intent}/04-ontology/requirements.md (100%) rename {intent => context/intent}/04-ontology/spec.md (100%) rename {intent => context/intent}/05-intuition/requirements.md (100%) rename {intent => context/intent}/05-intuition/spec.md (100%) rename {intent => context/intent}/06-decisions/requirements.md (100%) rename {intent => context/intent}/06-decisions/spec.md (100%) rename {intent => context/intent}/07-experiments/requirements.md (100%) rename {intent => context/intent}/07-experiments/spec.md (100%) rename {intent => context/intent}/08-reference/requirements.md (100%) rename {intent => context/intent}/08-reference/spec.md (100%) rename {intent => context/intent}/09-delta/DELTA-001-proposal-exit-is-unenforced-and-already-violated.md (100%) rename {intent => context/intent}/09-delta/requirements.md (100%) rename {intent => context/intent}/09-delta/spec.md (100%) rename {intent => context/intent}/10-open-questions/requirements.md (100%) rename {intent => context/intent}/10-open-questions/spec.md (100%) rename {intent => context/intent}/11-roadmap/requirements.md (100%) rename {intent => context/intent}/11-roadmap/spec.md (100%) rename {intent => context/intent}/12-common-subsystems/requirements.md (100%) rename {intent => context/intent}/12-common-subsystems/spec.md (100%) rename {intent => context/intent}/13-review-smells/requirements.md (100%) rename {intent => context/intent}/13-review-smells/spec.md (100%) rename {intent => context/intent}/14-grill-intent/requirements.md (94%) rename {intent => context/intent}/14-grill-intent/spec.md (90%) rename {intent => context/intent}/15-evaluation/requirements.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/fixture-format.md (98%) rename {intent => context/intent}/15-evaluation/semantic-review/requirements-mechanism/assertions.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/requirements-mechanism/expected-review.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/requirements-mechanism/fixture.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/requirements-mechanism/input/context/requirements-mechanism/requirements.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/requirements-mechanism/notes.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/spec-rationale/assertions.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/spec-rationale/expected-review.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/spec-rationale/fixture.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/spec-rationale/input/context/spec-rationale/spec.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/spec-rationale/notes.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-delta/assertions.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-delta/expected-review.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-delta/fixture.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-delta/input/context/stale-delta/.delta/DELTA-001-review-command-missing.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-delta/notes.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-open-question/assertions.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-open-question/expected-review.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-open-question/fixture.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-open-question/input/context/stale-open-question/open-questions.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/stale-open-question/notes.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/vision-mechanism/assertions.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/vision-mechanism/expected-review.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/vision-mechanism/fixture.json (100%) rename {intent => context/intent}/15-evaluation/semantic-review/vision-mechanism/input/context/vision-mechanism/vision.md (100%) rename {intent => context/intent}/15-evaluation/semantic-review/vision-mechanism/notes.md (100%) rename {intent => context/intent}/15-evaluation/spec.md (98%) rename {intent => context/intent}/16-enforcement/.experiments/2026-06-19-real-provider-review-eval.md (100%) rename {intent => context/intent}/16-enforcement/requirements.md (100%) rename {intent => context/intent}/16-enforcement/review-prompt.md (96%) rename {intent => context/intent}/16-enforcement/review-result.schema.json (100%) rename {intent => context/intent}/16-enforcement/spec.md (98%) rename {intent => context/intent}/intuition.md (100%) rename {intent => context/intent}/ontology.md (100%) rename {intent => context/intent}/requirements.md (100%) rename {intent => context/intent}/roadmap.md (100%) rename {intent => context/intent}/spec.md (99%) rename {intent => context/intent}/vision.md (96%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbfefb6..4fa8817 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,12 +60,12 @@ jobs: # corpus from a missing one. Fail on absence explicitly, before checking. run: | set -euo pipefail - test -d intent || { echo "::error::corpus directory 'intent/' does not exist"; exit 1; } + test -d context/intent || { echo "::error::corpus directory 'context/intent/' does not exist"; exit 1; } - name: strict check reports no diagnostics run: | set -euo pipefail - ./target/release/intent check intent --profile strict --json > report.json || { + ./target/release/intent check context/intent --profile strict --json > report.json || { cat report.json >&2; exit 1; } jq -e ' @@ -81,7 +81,7 @@ jobs: # a wrong path, and non-empty only when artifacts were genuinely read. run: | set -euo pipefail - ./target/release/intent graph intent --json > graph.json + ./target/release/intent graph context/intent --json > graph.json nodes="$(jq '.nodes | length' graph.json)" echo "graph nodes: $nodes" jq -e '(.nodes | length) > 0' graph.json > /dev/null \ @@ -97,8 +97,8 @@ jobs: - name: fixtures and the enforcement schema are present run: | set -euo pipefail - fixtures="intent/15-evaluation/semantic-review" - schema="intent/16-enforcement/review-result.schema.json" + fixtures="context/intent/15-evaluation/semantic-review" + schema="context/intent/16-enforcement/review-result.schema.json" test -d "$fixtures" || { echo "::error::missing fixtures root: $fixtures"; exit 1; } test -f "$fixtures/fixture-format.md" || { echo "::error::missing fixture-format.md"; exit 1; } test -f "$schema" || { echo "::error::missing review-result schema: $schema"; exit 1; } @@ -107,8 +107,8 @@ jobs: # Fully offline: every schema is a local file, so none is ever fetched. run: | set -euo pipefail - fixtures="intent/15-evaluation/semantic-review" - schema="intent/16-enforcement/review-result.schema.json" + fixtures="context/intent/15-evaluation/semantic-review" + schema="context/intent/16-enforcement/review-result.schema.json" found=0 for fixture in "$fixtures"/*/; do [ -d "$fixture" ] || continue diff --git a/README.md b/README.md index 84c9486..b5af496 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ people who were there. The problem is not that the knowledge is missing; it is that nothing says which of those places is authoritative, so none of them can be trusted, and none can be checked. -`intent/` is that contract, specified in itself. The corpus in this repository -uses its own conventions to define its own conventions — `intent/vision.md` is a -vision document written to the rules that `intent/01-vision/` specifies. +`context/intent/` is that contract, specified in itself. The corpus in this repository +uses its own conventions to define its own conventions — `context/intent/vision.md` is a +vision document written to the rules that `context/intent/01-vision/` specifies. ## What it is for @@ -37,10 +37,10 @@ the middle of the specification. Read in this order: -1. **`intent/vision.md`** — what this is and what it deliberately is not. -2. **`intent/requirements.md`** — the constraints the contract holds itself to. -3. **`intent/spec.md`** — how the artifacts fit together. -4. **`intent/ontology.md`** — the vocabulary. Worth reading early; the terms are +1. **`context/intent/vision.md`** — what this is and what it deliberately is not. +2. **`context/intent/requirements.md`** — the constraints the contract holds itself to. +3. **`context/intent/spec.md`** — how the artifacts fit together. +4. **`context/intent/ontology.md`** — the vocabulary. Worth reading early; the terms are used precisely and the precision is the point. Then follow whichever numbered section matches the artifact you care about. diff --git a/context/cli/requirements.md b/context/cli/requirements.md index f0df1a4..e435615 100644 --- a/context/cli/requirements.md +++ b/context/cli/requirements.md @@ -4,14 +4,14 @@ This document defines testable constraints for the `intent` CLI: Intent hygiene, graph extraction, and enforcement diagnostics. It builds on the enforcement contract in -[intent/16-enforcement](../../intent/16-enforcement/). +[intent/16-enforcement](../intent/16-enforcement/). The `AXE.INTENT-*` requirement namespace is a stable document identifier carried from the originating CLI contract; it does not name an executable command. ## Assumptions -- **A01 Intent owns semantics:** The root contract in [intent](../../intent/) +- **A01 Intent owns semantics:** The root contract in [intent](../intent/) owns artifact semantics, file contracts, review smells, and enforcement rules. - **A02 CLI owns operator ergonomics:** `intent` gives humans and agents one discoverable command surface for Intent checks without making the CLI the diff --git a/context/cli/spec.md b/context/cli/spec.md index 59de585..82b3b6c 100644 --- a/context/cli/spec.md +++ b/context/cli/spec.md @@ -20,8 +20,8 @@ Defines: Does not define: - Intent artifact semantics, file contracts, review smells, or enforcement rules; - see [intent](../../intent/) and - [intent/16-enforcement](../../intent/16-enforcement/); + see [intent](../intent/) and + [intent/16-enforcement](../intent/16-enforcement/); - semantic LLM review rubric content beyond routing diagnostics; - future typed-source Intent authoring; - Plan storage or workflow semantics. @@ -250,11 +250,11 @@ emits an ambiguous-structure diagnostic rather than inventing a node or edge. bounded review packet from: - the baked Intent semantic-review prompt owned at - [intent/16-enforcement/review-prompt.md](../../intent/16-enforcement/review-prompt.md); + [intent/16-enforcement/review-prompt.md](../intent/16-enforcement/review-prompt.md); - the target Intent files; - `intent check --json` diagnostics; - the semantic review output schema at - [intent/16-enforcement/review-result.schema.json](../../intent/16-enforcement/review-result.schema.json). + [intent/16-enforcement/review-result.schema.json](../intent/16-enforcement/review-result.schema.json). The command invokes `$CODING_AGENT` through the Coding Agent Invocation Contract (specified in `context/coding-agents/22-invocation-contract/spec.md` in the @@ -333,7 +333,7 @@ not imply a nonzero exit code unless a future explicit fail policy is added. ## Fixture Review Grading `intent review-fixtures` is the runner for the semantic-review fixtures owned by -[intent/15-evaluation](../../intent/15-evaluation/spec.md). It exists so the +[intent/15-evaluation](../intent/15-evaluation/spec.md). It exists so the minimum-assertion contract is executable rather than descriptive. For each selected fixture it: diff --git a/intent/.decisions/0001-use-decision-records-with-pr-local-proposals.md b/context/intent/.decisions/0001-use-decision-records-with-pr-local-proposals.md similarity index 100% rename from intent/.decisions/0001-use-decision-records-with-pr-local-proposals.md rename to context/intent/.decisions/0001-use-decision-records-with-pr-local-proposals.md diff --git a/intent/.decisions/0002-order-child-intent-nodes-by-formal-contract.md b/context/intent/.decisions/0002-order-child-intent-nodes-by-formal-contract.md similarity index 100% rename from intent/.decisions/0002-order-child-intent-nodes-by-formal-contract.md rename to context/intent/.decisions/0002-order-child-intent-nodes-by-formal-contract.md diff --git a/intent/.decisions/0003-use-delta-directory-for-open-divergence.md b/context/intent/.decisions/0003-use-delta-directory-for-open-divergence.md similarity index 100% rename from intent/.decisions/0003-use-delta-directory-for-open-divergence.md rename to context/intent/.decisions/0003-use-delta-directory-for-open-divergence.md diff --git a/intent/.decisions/0004-open-deltas-may-exist-on-main.md b/context/intent/.decisions/0004-open-deltas-may-exist-on-main.md similarity index 100% rename from intent/.decisions/0004-open-deltas-may-exist-on-main.md rename to context/intent/.decisions/0004-open-deltas-may-exist-on-main.md diff --git a/intent/.decisions/0005-separate-open-questions-from-roadmap.md b/context/intent/.decisions/0005-separate-open-questions-from-roadmap.md similarity index 100% rename from intent/.decisions/0005-separate-open-questions-from-roadmap.md rename to context/intent/.decisions/0005-separate-open-questions-from-roadmap.md diff --git a/intent/.decisions/0006-add-constraints-section-to-requirements.md b/context/intent/.decisions/0006-add-constraints-section-to-requirements.md similarity index 100% rename from intent/.decisions/0006-add-constraints-section-to-requirements.md rename to context/intent/.decisions/0006-add-constraints-section-to-requirements.md diff --git a/intent/.decisions/0007-common-subsystems-not-generic-files.md b/context/intent/.decisions/0007-common-subsystems-not-generic-files.md similarity index 100% rename from intent/.decisions/0007-common-subsystems-not-generic-files.md rename to context/intent/.decisions/0007-common-subsystems-not-generic-files.md diff --git a/intent/.decisions/0008-review-smells-live-in-root-intent-contract.md b/context/intent/.decisions/0008-review-smells-live-in-root-intent-contract.md similarity index 100% rename from intent/.decisions/0008-review-smells-live-in-root-intent-contract.md rename to context/intent/.decisions/0008-review-smells-live-in-root-intent-contract.md diff --git a/intent/.decisions/0009-use-open-questions-for-drafting-coverage.md b/context/intent/.decisions/0009-use-open-questions-for-drafting-coverage.md similarity index 100% rename from intent/.decisions/0009-use-open-questions-for-drafting-coverage.md rename to context/intent/.decisions/0009-use-open-questions-for-drafting-coverage.md diff --git a/intent/.decisions/0010-validate-load-bearing-assumptions.md b/context/intent/.decisions/0010-validate-load-bearing-assumptions.md similarity index 100% rename from intent/.decisions/0010-validate-load-bearing-assumptions.md rename to context/intent/.decisions/0010-validate-load-bearing-assumptions.md diff --git a/intent/.decisions/0011-decisions-require-evidence-options-and-tradeoffs.md b/context/intent/.decisions/0011-decisions-require-evidence-options-and-tradeoffs.md similarity index 100% rename from intent/.decisions/0011-decisions-require-evidence-options-and-tradeoffs.md rename to context/intent/.decisions/0011-decisions-require-evidence-options-and-tradeoffs.md diff --git a/intent/.decisions/0013-grill-intent-is-the-intent-interview-procedure.md b/context/intent/.decisions/0013-grill-intent-is-the-intent-interview-procedure.md similarity index 100% rename from intent/.decisions/0013-grill-intent-is-the-intent-interview-procedure.md rename to context/intent/.decisions/0013-grill-intent-is-the-intent-interview-procedure.md diff --git a/intent/.decisions/0014-evaluate-intent-with-isolated-scenarios.md b/context/intent/.decisions/0014-evaluate-intent-with-isolated-scenarios.md similarity index 100% rename from intent/.decisions/0014-evaluate-intent-with-isolated-scenarios.md rename to context/intent/.decisions/0014-evaluate-intent-with-isolated-scenarios.md diff --git a/intent/.decisions/0015-glossary-handling-lives-in-grill-intent.md b/context/intent/.decisions/0015-glossary-handling-lives-in-grill-intent.md similarity index 100% rename from intent/.decisions/0015-glossary-handling-lives-in-grill-intent.md rename to context/intent/.decisions/0015-glossary-handling-lives-in-grill-intent.md diff --git a/intent/.decisions/0016-use-existing-intent-systems-as-references.md b/context/intent/.decisions/0016-use-existing-intent-systems-as-references.md similarity index 100% rename from intent/.decisions/0016-use-existing-intent-systems-as-references.md rename to context/intent/.decisions/0016-use-existing-intent-systems-as-references.md diff --git a/intent/.decisions/0017-use-narrow-intent-enforcement-subsystem.md b/context/intent/.decisions/0017-use-narrow-intent-enforcement-subsystem.md similarity index 100% rename from intent/.decisions/0017-use-narrow-intent-enforcement-subsystem.md rename to context/intent/.decisions/0017-use-narrow-intent-enforcement-subsystem.md diff --git a/intent/.decisions/0018-identifiers-are-commit-scoped.md b/context/intent/.decisions/0018-identifiers-are-commit-scoped.md similarity index 100% rename from intent/.decisions/0018-identifiers-are-commit-scoped.md rename to context/intent/.decisions/0018-identifiers-are-commit-scoped.md diff --git a/intent/.decisions/0019-start-xref-enforcement-with-deterministic-subset.md b/context/intent/.decisions/0019-start-xref-enforcement-with-deterministic-subset.md similarity index 100% rename from intent/.decisions/0019-start-xref-enforcement-with-deterministic-subset.md rename to context/intent/.decisions/0019-start-xref-enforcement-with-deterministic-subset.md diff --git a/intent/.decisions/0020-keep-structured-intent-roadmap-only.md b/context/intent/.decisions/0020-keep-structured-intent-roadmap-only.md similarity index 100% rename from intent/.decisions/0020-keep-structured-intent-roadmap-only.md rename to context/intent/.decisions/0020-keep-structured-intent-roadmap-only.md diff --git a/intent/.decisions/0021-promote-link-checks-before-decision-shape.md b/context/intent/.decisions/0021-promote-link-checks-before-decision-shape.md similarity index 100% rename from intent/.decisions/0021-promote-link-checks-before-decision-shape.md rename to context/intent/.decisions/0021-promote-link-checks-before-decision-shape.md diff --git a/intent/.decisions/0022-scope-decision-shape-to-root-intent-first.md b/context/intent/.decisions/0022-scope-decision-shape-to-root-intent-first.md similarity index 100% rename from intent/.decisions/0022-scope-decision-shape-to-root-intent-first.md rename to context/intent/.decisions/0022-scope-decision-shape-to-root-intent-first.md diff --git a/intent/.decisions/0023-own-semantic-review-assets-in-enforcement.md b/context/intent/.decisions/0023-own-semantic-review-assets-in-enforcement.md similarity index 100% rename from intent/.decisions/0023-own-semantic-review-assets-in-enforcement.md rename to context/intent/.decisions/0023-own-semantic-review-assets-in-enforcement.md diff --git a/intent/.decisions/0024-put-semantic-review-fixtures-in-evaluation.md b/context/intent/.decisions/0024-put-semantic-review-fixtures-in-evaluation.md similarity index 100% rename from intent/.decisions/0024-put-semantic-review-fixtures-in-evaluation.md rename to context/intent/.decisions/0024-put-semantic-review-fixtures-in-evaluation.md diff --git a/intent/.decisions/0025-start-semantic-review-with-smell-matrix.md b/context/intent/.decisions/0025-start-semantic-review-with-smell-matrix.md similarity index 100% rename from intent/.decisions/0025-start-semantic-review-with-smell-matrix.md rename to context/intent/.decisions/0025-start-semantic-review-with-smell-matrix.md diff --git a/intent/.decisions/0026-validate-semantic-review-fixtures-deterministically-first.md b/context/intent/.decisions/0026-validate-semantic-review-fixtures-deterministically-first.md similarity index 100% rename from intent/.decisions/0026-validate-semantic-review-fixtures-deterministically-first.md rename to context/intent/.decisions/0026-validate-semantic-review-fixtures-deterministically-first.md diff --git a/intent/.decisions/0027-use-minimum-assertions-for-real-semantic-review-evals.md b/context/intent/.decisions/0027-use-minimum-assertions-for-real-semantic-review-evals.md similarity index 100% rename from intent/.decisions/0027-use-minimum-assertions-for-real-semantic-review-evals.md rename to context/intent/.decisions/0027-use-minimum-assertions-for-real-semantic-review-evals.md diff --git a/intent/.decisions/0028-real-token-evals-are-manual-only.md b/context/intent/.decisions/0028-real-token-evals-are-manual-only.md similarity index 100% rename from intent/.decisions/0028-real-token-evals-are-manual-only.md rename to context/intent/.decisions/0028-real-token-evals-are-manual-only.md diff --git a/intent/.decisions/0029-no-extra-token-spend-flag-for-review.md b/context/intent/.decisions/0029-no-extra-token-spend-flag-for-review.md similarity index 100% rename from intent/.decisions/0029-no-extra-token-spend-flag-for-review.md rename to context/intent/.decisions/0029-no-extra-token-spend-flag-for-review.md diff --git a/intent/.decisions/0030-keep-enforcement-consumer-agnostic.md b/context/intent/.decisions/0030-keep-enforcement-consumer-agnostic.md similarity index 100% rename from intent/.decisions/0030-keep-enforcement-consumer-agnostic.md rename to context/intent/.decisions/0030-keep-enforcement-consumer-agnostic.md diff --git a/intent/.decisions/0031-diagrams-use-full-mermaid-previewer-advisory.md b/context/intent/.decisions/0031-diagrams-use-full-mermaid-previewer-advisory.md similarity index 100% rename from intent/.decisions/0031-diagrams-use-full-mermaid-previewer-advisory.md rename to context/intent/.decisions/0031-diagrams-use-full-mermaid-previewer-advisory.md diff --git a/intent/.decisions/0032-rename-glossary-artifact-to-ontology.md b/context/intent/.decisions/0032-rename-glossary-artifact-to-ontology.md similarity index 100% rename from intent/.decisions/0032-rename-glossary-artifact-to-ontology.md rename to context/intent/.decisions/0032-rename-glossary-artifact-to-ontology.md diff --git a/intent/.decisions/0033-decision-and-delta-ordinals-stay-subsystem-local-citation-carries-the-qualification.md b/context/intent/.decisions/0033-decision-and-delta-ordinals-stay-subsystem-local-citation-carries-the-qualification.md similarity index 100% rename from intent/.decisions/0033-decision-and-delta-ordinals-stay-subsystem-local-citation-carries-the-qualification.md rename to context/intent/.decisions/0033-decision-and-delta-ordinals-stay-subsystem-local-citation-carries-the-qualification.md diff --git a/intent/.decisions/0034-proposal-exit-is-enforced-at-merge-not-relaxed.md b/context/intent/.decisions/0034-proposal-exit-is-enforced-at-merge-not-relaxed.md similarity index 100% rename from intent/.decisions/0034-proposal-exit-is-enforced-at-merge-not-relaxed.md rename to context/intent/.decisions/0034-proposal-exit-is-enforced-at-merge-not-relaxed.md diff --git a/intent/.decisions/0035-extract-to-a-fresh-repository-with-a-fresh-init-not-filtered-history.md b/context/intent/.decisions/0035-extract-to-a-fresh-repository-with-a-fresh-init-not-filtered-history.md similarity index 100% rename from intent/.decisions/0035-extract-to-a-fresh-repository-with-a-fresh-init-not-filtered-history.md rename to context/intent/.decisions/0035-extract-to-a-fresh-repository-with-a-fresh-init-not-filtered-history.md diff --git a/intent/.decisions/0036-use-intent-as-the-only-layer-name.md b/context/intent/.decisions/0036-use-intent-as-the-only-layer-name.md similarity index 100% rename from intent/.decisions/0036-use-intent-as-the-only-layer-name.md rename to context/intent/.decisions/0036-use-intent-as-the-only-layer-name.md diff --git a/intent/.experiments/decision-shape-enforcement.md b/context/intent/.experiments/decision-shape-enforcement.md similarity index 100% rename from intent/.experiments/decision-shape-enforcement.md rename to context/intent/.experiments/decision-shape-enforcement.md diff --git a/intent/.experiments/link-structure-and-symbolic-references.md b/context/intent/.experiments/link-structure-and-symbolic-references.md similarity index 100% rename from intent/.experiments/link-structure-and-symbolic-references.md rename to context/intent/.experiments/link-structure-and-symbolic-references.md diff --git a/intent/01-vision/requirements.md b/context/intent/01-vision/requirements.md similarity index 100% rename from intent/01-vision/requirements.md rename to context/intent/01-vision/requirements.md diff --git a/intent/01-vision/spec.md b/context/intent/01-vision/spec.md similarity index 100% rename from intent/01-vision/spec.md rename to context/intent/01-vision/spec.md diff --git a/intent/02-requirements/requirements.md b/context/intent/02-requirements/requirements.md similarity index 100% rename from intent/02-requirements/requirements.md rename to context/intent/02-requirements/requirements.md diff --git a/intent/02-requirements/spec.md b/context/intent/02-requirements/spec.md similarity index 100% rename from intent/02-requirements/spec.md rename to context/intent/02-requirements/spec.md diff --git a/intent/03-spec/requirements.md b/context/intent/03-spec/requirements.md similarity index 100% rename from intent/03-spec/requirements.md rename to context/intent/03-spec/requirements.md diff --git a/intent/03-spec/spec.md b/context/intent/03-spec/spec.md similarity index 100% rename from intent/03-spec/spec.md rename to context/intent/03-spec/spec.md diff --git a/intent/04-ontology/.experiments/ontology-sota-survey.md b/context/intent/04-ontology/.experiments/ontology-sota-survey.md similarity index 100% rename from intent/04-ontology/.experiments/ontology-sota-survey.md rename to context/intent/04-ontology/.experiments/ontology-sota-survey.md diff --git a/intent/04-ontology/requirements.md b/context/intent/04-ontology/requirements.md similarity index 100% rename from intent/04-ontology/requirements.md rename to context/intent/04-ontology/requirements.md diff --git a/intent/04-ontology/spec.md b/context/intent/04-ontology/spec.md similarity index 100% rename from intent/04-ontology/spec.md rename to context/intent/04-ontology/spec.md diff --git a/intent/05-intuition/requirements.md b/context/intent/05-intuition/requirements.md similarity index 100% rename from intent/05-intuition/requirements.md rename to context/intent/05-intuition/requirements.md diff --git a/intent/05-intuition/spec.md b/context/intent/05-intuition/spec.md similarity index 100% rename from intent/05-intuition/spec.md rename to context/intent/05-intuition/spec.md diff --git a/intent/06-decisions/requirements.md b/context/intent/06-decisions/requirements.md similarity index 100% rename from intent/06-decisions/requirements.md rename to context/intent/06-decisions/requirements.md diff --git a/intent/06-decisions/spec.md b/context/intent/06-decisions/spec.md similarity index 100% rename from intent/06-decisions/spec.md rename to context/intent/06-decisions/spec.md diff --git a/intent/07-experiments/requirements.md b/context/intent/07-experiments/requirements.md similarity index 100% rename from intent/07-experiments/requirements.md rename to context/intent/07-experiments/requirements.md diff --git a/intent/07-experiments/spec.md b/context/intent/07-experiments/spec.md similarity index 100% rename from intent/07-experiments/spec.md rename to context/intent/07-experiments/spec.md diff --git a/intent/08-reference/requirements.md b/context/intent/08-reference/requirements.md similarity index 100% rename from intent/08-reference/requirements.md rename to context/intent/08-reference/requirements.md diff --git a/intent/08-reference/spec.md b/context/intent/08-reference/spec.md similarity index 100% rename from intent/08-reference/spec.md rename to context/intent/08-reference/spec.md diff --git a/intent/09-delta/DELTA-001-proposal-exit-is-unenforced-and-already-violated.md b/context/intent/09-delta/DELTA-001-proposal-exit-is-unenforced-and-already-violated.md similarity index 100% rename from intent/09-delta/DELTA-001-proposal-exit-is-unenforced-and-already-violated.md rename to context/intent/09-delta/DELTA-001-proposal-exit-is-unenforced-and-already-violated.md diff --git a/intent/09-delta/requirements.md b/context/intent/09-delta/requirements.md similarity index 100% rename from intent/09-delta/requirements.md rename to context/intent/09-delta/requirements.md diff --git a/intent/09-delta/spec.md b/context/intent/09-delta/spec.md similarity index 100% rename from intent/09-delta/spec.md rename to context/intent/09-delta/spec.md diff --git a/intent/10-open-questions/requirements.md b/context/intent/10-open-questions/requirements.md similarity index 100% rename from intent/10-open-questions/requirements.md rename to context/intent/10-open-questions/requirements.md diff --git a/intent/10-open-questions/spec.md b/context/intent/10-open-questions/spec.md similarity index 100% rename from intent/10-open-questions/spec.md rename to context/intent/10-open-questions/spec.md diff --git a/intent/11-roadmap/requirements.md b/context/intent/11-roadmap/requirements.md similarity index 100% rename from intent/11-roadmap/requirements.md rename to context/intent/11-roadmap/requirements.md diff --git a/intent/11-roadmap/spec.md b/context/intent/11-roadmap/spec.md similarity index 100% rename from intent/11-roadmap/spec.md rename to context/intent/11-roadmap/spec.md diff --git a/intent/12-common-subsystems/requirements.md b/context/intent/12-common-subsystems/requirements.md similarity index 100% rename from intent/12-common-subsystems/requirements.md rename to context/intent/12-common-subsystems/requirements.md diff --git a/intent/12-common-subsystems/spec.md b/context/intent/12-common-subsystems/spec.md similarity index 100% rename from intent/12-common-subsystems/spec.md rename to context/intent/12-common-subsystems/spec.md diff --git a/intent/13-review-smells/requirements.md b/context/intent/13-review-smells/requirements.md similarity index 100% rename from intent/13-review-smells/requirements.md rename to context/intent/13-review-smells/requirements.md diff --git a/intent/13-review-smells/spec.md b/context/intent/13-review-smells/spec.md similarity index 100% rename from intent/13-review-smells/spec.md rename to context/intent/13-review-smells/spec.md diff --git a/intent/14-grill-intent/requirements.md b/context/intent/14-grill-intent/requirements.md similarity index 94% rename from intent/14-grill-intent/requirements.md rename to context/intent/14-grill-intent/requirements.md index d9a1635..ee6ff76 100644 --- a/intent/14-grill-intent/requirements.md +++ b/context/intent/14-grill-intent/requirements.md @@ -10,7 +10,7 @@ ### Must Apply Intent, Not Redefine It -- **INTENT.GRILL-R01 Intent contract source:** `intent/` is the source of truth +- **INTENT.GRILL-R01 Intent contract source:** `context/intent/` is the source of truth for artifact structure, lifecycle, and review rules. - **INTENT.GRILL-R02 Procedural skill:** `grill-intent` owns the interview procedure: questioning, pressure-testing, validation, and inline Intent updates. diff --git a/intent/14-grill-intent/spec.md b/context/intent/14-grill-intent/spec.md similarity index 90% rename from intent/14-grill-intent/spec.md rename to context/intent/14-grill-intent/spec.md index af0d27d..f2907e5 100644 --- a/intent/14-grill-intent/spec.md +++ b/context/intent/14-grill-intent/spec.md @@ -10,7 +10,7 @@ Draft. ## Relationship ```text -intent/ normative intent-layer contract +context/intent/ normative intent-layer contract grill-intent procedure that interrogates and updates the contract ``` @@ -34,6 +34,6 @@ arrives at those facts with a human or through code/research investigation. ## Skill Reduction When the operational skill is updated, it should keep procedural rules and link -to `intent/` for artifact details. The skill should not carry independent +to `context/intent/` for artifact details. The skill should not carry independent templates for decisions, ontology, requirements, experiments, deltas, or roadmap when the root Intent contract already defines them. diff --git a/intent/15-evaluation/requirements.md b/context/intent/15-evaluation/requirements.md similarity index 100% rename from intent/15-evaluation/requirements.md rename to context/intent/15-evaluation/requirements.md diff --git a/intent/15-evaluation/semantic-review/fixture-format.md b/context/intent/15-evaluation/semantic-review/fixture-format.md similarity index 98% rename from intent/15-evaluation/semantic-review/fixture-format.md rename to context/intent/15-evaluation/semantic-review/fixture-format.md index 7c03a88..351672a 100644 --- a/intent/15-evaluation/semantic-review/fixture-format.md +++ b/context/intent/15-evaluation/semantic-review/fixture-format.md @@ -8,7 +8,7 @@ owned by [16-enforcement](../../16-enforcement/spec.md). Each fixture should live in a stable, descriptive directory: ```text -intent/15-evaluation/semantic-review// +context/intent/15-evaluation/semantic-review// fixture.json input/ context// diff --git a/intent/15-evaluation/semantic-review/requirements-mechanism/assertions.json b/context/intent/15-evaluation/semantic-review/requirements-mechanism/assertions.json similarity index 100% rename from intent/15-evaluation/semantic-review/requirements-mechanism/assertions.json rename to context/intent/15-evaluation/semantic-review/requirements-mechanism/assertions.json diff --git a/intent/15-evaluation/semantic-review/requirements-mechanism/expected-review.json b/context/intent/15-evaluation/semantic-review/requirements-mechanism/expected-review.json similarity index 100% rename from intent/15-evaluation/semantic-review/requirements-mechanism/expected-review.json rename to context/intent/15-evaluation/semantic-review/requirements-mechanism/expected-review.json diff --git a/intent/15-evaluation/semantic-review/requirements-mechanism/fixture.json b/context/intent/15-evaluation/semantic-review/requirements-mechanism/fixture.json similarity index 100% rename from intent/15-evaluation/semantic-review/requirements-mechanism/fixture.json rename to context/intent/15-evaluation/semantic-review/requirements-mechanism/fixture.json diff --git a/intent/15-evaluation/semantic-review/requirements-mechanism/input/context/requirements-mechanism/requirements.md b/context/intent/15-evaluation/semantic-review/requirements-mechanism/input/context/requirements-mechanism/requirements.md similarity index 100% rename from intent/15-evaluation/semantic-review/requirements-mechanism/input/context/requirements-mechanism/requirements.md rename to context/intent/15-evaluation/semantic-review/requirements-mechanism/input/context/requirements-mechanism/requirements.md diff --git a/intent/15-evaluation/semantic-review/requirements-mechanism/notes.md b/context/intent/15-evaluation/semantic-review/requirements-mechanism/notes.md similarity index 100% rename from intent/15-evaluation/semantic-review/requirements-mechanism/notes.md rename to context/intent/15-evaluation/semantic-review/requirements-mechanism/notes.md diff --git a/intent/15-evaluation/semantic-review/spec-rationale/assertions.json b/context/intent/15-evaluation/semantic-review/spec-rationale/assertions.json similarity index 100% rename from intent/15-evaluation/semantic-review/spec-rationale/assertions.json rename to context/intent/15-evaluation/semantic-review/spec-rationale/assertions.json diff --git a/intent/15-evaluation/semantic-review/spec-rationale/expected-review.json b/context/intent/15-evaluation/semantic-review/spec-rationale/expected-review.json similarity index 100% rename from intent/15-evaluation/semantic-review/spec-rationale/expected-review.json rename to context/intent/15-evaluation/semantic-review/spec-rationale/expected-review.json diff --git a/intent/15-evaluation/semantic-review/spec-rationale/fixture.json b/context/intent/15-evaluation/semantic-review/spec-rationale/fixture.json similarity index 100% rename from intent/15-evaluation/semantic-review/spec-rationale/fixture.json rename to context/intent/15-evaluation/semantic-review/spec-rationale/fixture.json diff --git a/intent/15-evaluation/semantic-review/spec-rationale/input/context/spec-rationale/spec.md b/context/intent/15-evaluation/semantic-review/spec-rationale/input/context/spec-rationale/spec.md similarity index 100% rename from intent/15-evaluation/semantic-review/spec-rationale/input/context/spec-rationale/spec.md rename to context/intent/15-evaluation/semantic-review/spec-rationale/input/context/spec-rationale/spec.md diff --git a/intent/15-evaluation/semantic-review/spec-rationale/notes.md b/context/intent/15-evaluation/semantic-review/spec-rationale/notes.md similarity index 100% rename from intent/15-evaluation/semantic-review/spec-rationale/notes.md rename to context/intent/15-evaluation/semantic-review/spec-rationale/notes.md diff --git a/intent/15-evaluation/semantic-review/stale-delta/assertions.json b/context/intent/15-evaluation/semantic-review/stale-delta/assertions.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-delta/assertions.json rename to context/intent/15-evaluation/semantic-review/stale-delta/assertions.json diff --git a/intent/15-evaluation/semantic-review/stale-delta/expected-review.json b/context/intent/15-evaluation/semantic-review/stale-delta/expected-review.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-delta/expected-review.json rename to context/intent/15-evaluation/semantic-review/stale-delta/expected-review.json diff --git a/intent/15-evaluation/semantic-review/stale-delta/fixture.json b/context/intent/15-evaluation/semantic-review/stale-delta/fixture.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-delta/fixture.json rename to context/intent/15-evaluation/semantic-review/stale-delta/fixture.json diff --git a/intent/15-evaluation/semantic-review/stale-delta/input/context/stale-delta/.delta/DELTA-001-review-command-missing.md b/context/intent/15-evaluation/semantic-review/stale-delta/input/context/stale-delta/.delta/DELTA-001-review-command-missing.md similarity index 100% rename from intent/15-evaluation/semantic-review/stale-delta/input/context/stale-delta/.delta/DELTA-001-review-command-missing.md rename to context/intent/15-evaluation/semantic-review/stale-delta/input/context/stale-delta/.delta/DELTA-001-review-command-missing.md diff --git a/intent/15-evaluation/semantic-review/stale-delta/notes.md b/context/intent/15-evaluation/semantic-review/stale-delta/notes.md similarity index 100% rename from intent/15-evaluation/semantic-review/stale-delta/notes.md rename to context/intent/15-evaluation/semantic-review/stale-delta/notes.md diff --git a/intent/15-evaluation/semantic-review/stale-open-question/assertions.json b/context/intent/15-evaluation/semantic-review/stale-open-question/assertions.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-open-question/assertions.json rename to context/intent/15-evaluation/semantic-review/stale-open-question/assertions.json diff --git a/intent/15-evaluation/semantic-review/stale-open-question/expected-review.json b/context/intent/15-evaluation/semantic-review/stale-open-question/expected-review.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-open-question/expected-review.json rename to context/intent/15-evaluation/semantic-review/stale-open-question/expected-review.json diff --git a/intent/15-evaluation/semantic-review/stale-open-question/fixture.json b/context/intent/15-evaluation/semantic-review/stale-open-question/fixture.json similarity index 100% rename from intent/15-evaluation/semantic-review/stale-open-question/fixture.json rename to context/intent/15-evaluation/semantic-review/stale-open-question/fixture.json diff --git a/intent/15-evaluation/semantic-review/stale-open-question/input/context/stale-open-question/open-questions.md b/context/intent/15-evaluation/semantic-review/stale-open-question/input/context/stale-open-question/open-questions.md similarity index 100% rename from intent/15-evaluation/semantic-review/stale-open-question/input/context/stale-open-question/open-questions.md rename to context/intent/15-evaluation/semantic-review/stale-open-question/input/context/stale-open-question/open-questions.md diff --git a/intent/15-evaluation/semantic-review/stale-open-question/notes.md b/context/intent/15-evaluation/semantic-review/stale-open-question/notes.md similarity index 100% rename from intent/15-evaluation/semantic-review/stale-open-question/notes.md rename to context/intent/15-evaluation/semantic-review/stale-open-question/notes.md diff --git a/intent/15-evaluation/semantic-review/vision-mechanism/assertions.json b/context/intent/15-evaluation/semantic-review/vision-mechanism/assertions.json similarity index 100% rename from intent/15-evaluation/semantic-review/vision-mechanism/assertions.json rename to context/intent/15-evaluation/semantic-review/vision-mechanism/assertions.json diff --git a/intent/15-evaluation/semantic-review/vision-mechanism/expected-review.json b/context/intent/15-evaluation/semantic-review/vision-mechanism/expected-review.json similarity index 100% rename from intent/15-evaluation/semantic-review/vision-mechanism/expected-review.json rename to context/intent/15-evaluation/semantic-review/vision-mechanism/expected-review.json diff --git a/intent/15-evaluation/semantic-review/vision-mechanism/fixture.json b/context/intent/15-evaluation/semantic-review/vision-mechanism/fixture.json similarity index 100% rename from intent/15-evaluation/semantic-review/vision-mechanism/fixture.json rename to context/intent/15-evaluation/semantic-review/vision-mechanism/fixture.json diff --git a/intent/15-evaluation/semantic-review/vision-mechanism/input/context/vision-mechanism/vision.md b/context/intent/15-evaluation/semantic-review/vision-mechanism/input/context/vision-mechanism/vision.md similarity index 100% rename from intent/15-evaluation/semantic-review/vision-mechanism/input/context/vision-mechanism/vision.md rename to context/intent/15-evaluation/semantic-review/vision-mechanism/input/context/vision-mechanism/vision.md diff --git a/intent/15-evaluation/semantic-review/vision-mechanism/notes.md b/context/intent/15-evaluation/semantic-review/vision-mechanism/notes.md similarity index 100% rename from intent/15-evaluation/semantic-review/vision-mechanism/notes.md rename to context/intent/15-evaluation/semantic-review/vision-mechanism/notes.md diff --git a/intent/15-evaluation/spec.md b/context/intent/15-evaluation/spec.md similarity index 98% rename from intent/15-evaluation/spec.md rename to context/intent/15-evaluation/spec.md index bc97a0e..1d6c62d 100644 --- a/intent/15-evaluation/spec.md +++ b/context/intent/15-evaluation/spec.md @@ -39,7 +39,7 @@ The scenario should include at least: ## Eval Procedure -1. Read `intent/` and `nixpkgs/ai/skills/grill-intent.md`. +1. Read `context/intent/` and `nixpkgs/ai/skills/grill-intent.md`. 2. Create the scenario in a temporary directory outside tracked repo files. 3. Apply the `grill-intent` procedure as if shaping the scenario with a user. 4. Produce the miniature Intent tree. diff --git a/intent/16-enforcement/.experiments/2026-06-19-real-provider-review-eval.md b/context/intent/16-enforcement/.experiments/2026-06-19-real-provider-review-eval.md similarity index 100% rename from intent/16-enforcement/.experiments/2026-06-19-real-provider-review-eval.md rename to context/intent/16-enforcement/.experiments/2026-06-19-real-provider-review-eval.md diff --git a/intent/16-enforcement/requirements.md b/context/intent/16-enforcement/requirements.md similarity index 100% rename from intent/16-enforcement/requirements.md rename to context/intent/16-enforcement/requirements.md diff --git a/intent/16-enforcement/review-prompt.md b/context/intent/16-enforcement/review-prompt.md similarity index 96% rename from intent/16-enforcement/review-prompt.md rename to context/intent/16-enforcement/review-prompt.md index bdd9603..79a5f39 100644 --- a/intent/16-enforcement/review-prompt.md +++ b/context/intent/16-enforcement/review-prompt.md @@ -33,7 +33,7 @@ Classify semantic Intent issues that deterministic lint cannot prove safely: - Empty companion directories or README-style Intent entry points appear where the root Intent contract does not allow them. -Use the review-smell catalog in `intent/13-review-smells/spec.md` as the +Use the review-smell catalog in `context/intent/13-review-smells/spec.md` as the primary rubric when it is supplied. ## Finding Rules diff --git a/intent/16-enforcement/review-result.schema.json b/context/intent/16-enforcement/review-result.schema.json similarity index 100% rename from intent/16-enforcement/review-result.schema.json rename to context/intent/16-enforcement/review-result.schema.json diff --git a/intent/16-enforcement/spec.md b/context/intent/16-enforcement/spec.md similarity index 98% rename from intent/16-enforcement/spec.md rename to context/intent/16-enforcement/spec.md index 3f3526a..6c18e1d 100644 --- a/intent/16-enforcement/spec.md +++ b/context/intent/16-enforcement/spec.md @@ -103,7 +103,7 @@ the proposed strict shape, but the wider `context/**/.decisions` corpus is not ready for repo-wide blocking without migration or scoped enforcement. Initial strict decision-shape enforcement applies only to -`intent/.decisions/`. Other `context/**/.decisions/` records may be scanned +`context/intent/.decisions/`. Other `context/**/.decisions/` records may be scanned for migration diagnostics later, but they are not part of the first strict decision-shape scope. @@ -138,7 +138,7 @@ mode; prompt and schema changes are Intent changes and should be evaluated throu fixtures before becoming the baked version. Real-provider execution policy is owned by the -[Intent command spec](../../context/cli/spec.md). Enforcement +[Intent command spec](../../cli/spec.md). Enforcement owns the baked prompt, result schema, semantic finding shape, and fixture-backed quality evidence. The command spec owns when providers may run, which CAIC contract pieces are required, and how stdout/report routing behaves. @@ -152,7 +152,7 @@ Structured enforcement output should preserve enough routing context for agents: "kind": "deterministic | semantic", "severity": "error | warning | info", "gate": "blocking | advisory | review", - "artifact": "intent/requirements.md", + "artifact": "context/intent/requirements.md", "owner": "02-requirements", "rule": "INTENT.ENF.", "evidence": "Requirement IDs skip INTENT-R12.", diff --git a/intent/intuition.md b/context/intent/intuition.md similarity index 100% rename from intent/intuition.md rename to context/intent/intuition.md diff --git a/intent/ontology.md b/context/intent/ontology.md similarity index 100% rename from intent/ontology.md rename to context/intent/ontology.md diff --git a/intent/requirements.md b/context/intent/requirements.md similarity index 100% rename from intent/requirements.md rename to context/intent/requirements.md diff --git a/intent/roadmap.md b/context/intent/roadmap.md similarity index 100% rename from intent/roadmap.md rename to context/intent/roadmap.md diff --git a/intent/spec.md b/context/intent/spec.md similarity index 99% rename from intent/spec.md rename to context/intent/spec.md index 7bcddb9..8f92723 100644 --- a/intent/spec.md +++ b/context/intent/spec.md @@ -247,7 +247,7 @@ validate assumptions, compare against code and references, and update the correct Intent artifact as understanding crystallizes. The procedure must not duplicate detailed artifact rules that live in -`intent/`; it should point to the root Intent contract and stay focused on how +`context/intent/`; it should point to the root Intent contract and stay focused on how to conduct the interview. Ontology handling is part of `grill-intent`, not a separate skill by default. diff --git a/intent/vision.md b/context/intent/vision.md similarity index 96% rename from intent/vision.md rename to context/intent/vision.md index 82a76c6..af6c1a0 100644 --- a/intent/vision.md +++ b/context/intent/vision.md @@ -39,4 +39,4 @@ working state. 3. Proposed decisions, experiments, references, and deltas have clear lifecycles and do not pollute the durable contract. 4. Operational skills such as `intent.md` and `grill-intent` can become thin - procedures over the normative `intent/` contract. + procedures over the normative `context/intent/` contract. diff --git a/crates/intent/Cargo.toml b/crates/intent/Cargo.toml index 2c13b10..d977446 100644 --- a/crates/intent/Cargo.toml +++ b/crates/intent/Cargo.toml @@ -13,7 +13,7 @@ name = "intent" path = "src/lib.rs" [dependencies] -clap = { version = "4.5", features = ["derive", "env"] } +clap = { version = "4.5", features = ["derive", "env", "string"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" # Runtime, not just tests: `review` stages the diagnostics packet and the CAIC diff --git a/crates/intent/src/lib.rs b/crates/intent/src/lib.rs index 36f41de..3bb0d9e 100644 --- a/crates/intent/src/lib.rs +++ b/crates/intent/src/lib.rs @@ -1,13 +1,15 @@ -use clap::{Parser, Subcommand, ValueEnum}; +use clap::{CommandFactory, FromArgMatches, Parser, Subcommand, ValueEnum}; use serde::Serialize; use serde_json::Value; use std::collections::{BTreeSet, HashSet}; -use std::ffi::OsStr; +use std::ffi::{OsStr, OsString}; use std::fs; use std::io::{self, Write}; use std::path::{Path, PathBuf}; use std::process::{Command, ExitCode}; +const CORPUS: &str = "context/intent"; + // Positions INSIDE a corpus, so they hold for any repository that adopts the // layout. Resolving the review assets relative to the corpus root rather than the // repository root is what keeps tool and corpus co-located: `review` reads both @@ -214,6 +216,30 @@ impl Defaults { fn fixtures_or_default(&self, arg: Option) -> PathBuf { arg.unwrap_or_else(|| self.corpus_root.join(SEMANTIC_REVIEW_SUBDIR)) } + + pub fn command(&self) -> clap::Command { + let root = self.corpus_root.clone().into_os_string(); + let fixtures = self + .corpus_root + .join(SEMANTIC_REVIEW_SUBDIR) + .into_os_string(); + IntentCli::command() + .mut_subcommand("check", |cmd| default_root(cmd, root.clone())) + .mut_subcommand("graph", |cmd| default_root(cmd, root.clone())) + .mut_subcommand("review", |cmd| default_root(cmd, root)) + .mut_subcommand("review-fixtures", |cmd| default_root(cmd, fixtures)) + } + + pub fn parse(&self) -> IntentCli { + match IntentCli::from_arg_matches_mut(&mut self.command().get_matches()) { + Ok(cli) => cli, + Err(error) => error.exit(), + } + } +} + +fn default_root(cmd: clap::Command, value: OsString) -> clap::Command { + cmd.mut_arg("root", |arg| arg.default_value(value)) } impl Default for Defaults { @@ -1198,12 +1224,12 @@ pub fn graph_root(root: &Path) -> Result }) } -// Corpus-relative only. A removed fallback guessed a repository-specific -// `.decisions` path when handed a repository root. That was silently wrong for -// other layouts and let a misaimed invocation look clean. Pointing this at a -// corpus is the caller's job. fn root_intent_decision_dir(root: &Path) -> PathBuf { - root.join(".decisions") + let direct = root.join(".decisions"); + if direct.is_dir() { + return direct; + } + root.join(CORPUS).join(".decisions") } fn check_markdown_links( @@ -1623,13 +1649,11 @@ fn markdown_files_direct(dir: &Path) -> Result, Box PathBuf { for ancestor in root.ancestors() { - if ancestor.join(".git").exists() { + if ancestor.join(".git").exists() || ancestor.join(CORPUS).is_dir() { return ancestor.to_path_buf(); } } @@ -2263,6 +2287,21 @@ mod tests { ); } + #[test] + fn a_callers_default_reaches_the_help_it_renders() { + let defaults = Defaults::corpus_root("context/intent"); + let check = defaults + .command() + .find_subcommand_mut("check") + .expect("check subcommand") + .render_help() + .to_string(); + assert!( + check.contains("[default: context/intent]"), + "help:\n{check}" + ); + } + // Covers the fallback used when there is no `.git`, such as a Nix build // sandbox or vendored source tree. Interactive runs normally take the // enclosing-repository branch instead. @@ -2275,6 +2314,16 @@ mod tests { assert_eq!(review_workspace(&corpus), corpus); } + #[test] + fn review_workspace_finds_the_repository_by_corpus_layout_when_there_is_no_git() { + let tempdir = tempfile::tempdir().unwrap(); + let repo = fs::canonicalize(tempdir.path()).unwrap(); + let corpus = repo.join("context/intent"); + fs::create_dir_all(&corpus).unwrap(); + + assert_eq!(review_workspace(&corpus), repo); + } + #[test] fn review_workspace_prefers_the_enclosing_repository() { let tempdir = tempfile::tempdir().unwrap(); diff --git a/crates/intent/src/main.rs b/crates/intent/src/main.rs index b553139..fb4fbab 100644 --- a/crates/intent/src/main.rs +++ b/crates/intent/src/main.rs @@ -1,8 +1,8 @@ -use clap::Parser; use std::process::ExitCode; // The binary is a thin shell over the library entry point so standalone and // embedded callers execute the same checker behavior. fn main() -> ExitCode { - intent::run(intent::IntentCli::parse()) + let defaults = intent::Defaults::default(); + intent::run_with(defaults.parse(), &defaults) } diff --git a/crates/intent/tests/intent_check.rs b/crates/intent/tests/intent_check.rs index 889d967..a49542b 100644 --- a/crates/intent/tests/intent_check.rs +++ b/crates/intent/tests/intent_check.rs @@ -124,6 +124,15 @@ Choose A because it fits the current scope. .expect("intent check") } + fn check_at(&self, path: &Path, args: &[&str]) -> Output { + Command::new(&self.intent) + .arg("check") + .arg(path) + .args(args) + .output() + .expect("intent check") + } + fn graph(&self, args: &[&str]) -> Output { Command::new(&self.intent) .arg("graph") @@ -138,6 +147,32 @@ fn stdout_json(output: &Output) -> Value { serde_json::from_slice(&output.stdout).expect("stdout json") } +#[test] +fn help_advertises_the_default_root_the_run_will_use() { + let h = Harness::new(); + for (subcommand, expected) in [ + ("check", "[default: .]"), + ("graph", "[default: .]"), + ("review", "[default: .]"), + ( + "review-fixtures", + "[default: ./15-evaluation/semantic-review]", + ), + ] { + let output = Command::new(&h.intent) + .arg(subcommand) + .arg("--help") + .output() + .expect("intent --help"); + assert!(output.status.success()); + let help = String::from_utf8_lossy(&output.stdout); + assert!( + help.contains(expected), + "`{subcommand} --help` must advertise {expected}; help:\n{help}" + ); + } +} + fn write_executable(path: &Path, body: &str) -> PathBuf { let body = body.replacen( "#!/usr/bin/env bash", @@ -306,6 +341,45 @@ No comparison table. })); } +#[test] +fn decision_shape_is_enforced_when_check_is_aimed_at_the_repository_root() { + let h = Harness::new(); + fs::write( + h.repo.join("context/intent/.decisions/0002-bad.md"), + r#"# Bad Decision + +Status: + +## Context + +Present. + +## Options + +No comparison table. + +## Decision +"#, + ) + .expect("bad decision"); + + let output = h.check_at(&h.repo, &["--json"]); + let report = stdout_json(&output); + let diagnostics = report["diagnostics"].as_array().unwrap(); + assert!( + diagnostics.iter().any(|diagnostic| { + diagnostic["rule"] == "INTENT.ENF.meta-decision-shape" + && diagnostic["artifact"] + .as_str() + .unwrap() + .ends_with("0002-bad.md") + }), + "a malformed decision must be reported when check is aimed at the repository root; diagnostics:\n{}", + serde_json::to_string_pretty(&report["diagnostics"]).unwrap() + ); + assert_eq!(output.status.code(), Some(1)); +} + #[test] fn proposed_decision_records_are_blocking() { let h = Harness::new(); diff --git a/flake.nix b/flake.nix index ab8bab8..f2729f7 100644 --- a/flake.nix +++ b/flake.nix @@ -39,7 +39,7 @@ cargoLock.lockFile = ./crates/intent/Cargo.lock; # Builds and tests run inside the crate, while `src` stays the whole - # repository. That is deliberate: the corpus at `intent/` has to remain + # repository. That is deliberate: the corpus at `context/intent/` has to remain # visible so a check can be aimed at it from the same source tree. buildAndTestSubdir = crateDir; @@ -128,7 +128,7 @@ checks.reads-the-corpus = pkgs.runCommand "intent-reads-the-corpus-${version}" { nativeBuildInputs = [ pkgs.jq ]; } '' - ${intent}/bin/intent graph ${self}/intent --json > graph.json + ${intent}/bin/intent graph ${self}/context/intent --json > graph.json nodes="$(jq '.nodes | length' graph.json)" echo "graph nodes: $nodes" jq -e '(.nodes | length) > 0' graph.json > /dev/null \ diff --git a/skills/intent.md b/skills/intent.md index 749f193..8511f8c 100644 --- a/skills/intent.md +++ b/skills/intent.md @@ -1,17 +1,17 @@ --- -description: Author, review, and check an `intent/` corpus — the durable-intent doc contract — from any project, no fleet tooling assumed. Covers the artifact set, the `intent` CLI, and the failure modes that make a passing check prove nothing. Use when writing or reviewing intent artifacts, adopting the contract elsewhere, or wiring the checker into CI. +description: Author, review, and check a `context/intent/` corpus — the durable-intent doc contract — from any project, no fleet tooling assumed. Covers the artifact set, the `intent` CLI, and the failure modes that make a passing check prove nothing. Use when writing or reviewing intent artifacts, adopting the contract elsewhere, or wiring the checker into CI. agents: [coding] --- # intent — authoring and checking the contract -The contract is specified in `intent/`, and `intent/` is written in the +The contract is specified in `context/intent/`, and `context/intent/` is written in the conventions it specifies. That makes the corpus the authority and this skill a guide to using it — read the corpus for the rules, read this for how to work against them and where the tooling will mislead you. -Start at `intent/vision.md`, `intent/requirements.md`, `intent/spec.md`, -`intent/ontology.md`. Each numbered directory specifies exactly one artifact +Start at `context/intent/vision.md`, `context/intent/requirements.md`, `context/intent/spec.md`, +`context/intent/ontology.md`. Each numbered directory specifies exactly one artifact type and is itself a small intent tree; go to the one matching the artifact you are writing. Do not reconstruct the rules from this file — it deliberately does not restate them, so it cannot drift from them. @@ -46,7 +46,7 @@ claim is wrong far more often than it is checked. ## The checker -The checker is deterministic and consumer-agnostic: `intent/16-enforcement/` +The checker is deterministic and consumer-agnostic: `context/intent/16-enforcement/` specifies the rules so that any tool can implement them, and the shipped binary is one such tool rather than the definition. Diagnostics carry a stable `INTENT.ENF.` code, so a finding maps back to the rule that produced it — @@ -144,7 +144,7 @@ them and the checker is optional at authoring time. Adopt in this order: 1. **Copy the discipline, not the corpus.** Take the artifact set and the - ownership rule. `intent/`'s own content is about the contract itself and is + ownership rule. `context/intent/`'s own content is about the contract itself and is not a template for your domain. 2. **Start with `requirements.md` + `spec.md`.** Add `vision.md` only when the "why" is not obvious from context, `ontology.md` once terms are being used