@deftai/directive-content 0.55.0
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.
- package/.agents/skills/deft/SKILL.md +6 -0
- package/.agents/skills/deft-directive-article-review/SKILL.md +11 -0
- package/.agents/skills/deft-directive-build/SKILL.md +10 -0
- package/.agents/skills/deft-directive-cost/SKILL.md +12 -0
- package/.agents/skills/deft-directive-debug/SKILL.md +13 -0
- package/.agents/skills/deft-directive-gh-arch/SKILL.md +11 -0
- package/.agents/skills/deft-directive-gh-slice/SKILL.md +10 -0
- package/.agents/skills/deft-directive-glossary/SKILL.md +10 -0
- package/.agents/skills/deft-directive-interview/SKILL.md +9 -0
- package/.agents/skills/deft-directive-pre-pr/SKILL.md +9 -0
- package/.agents/skills/deft-directive-refinement/SKILL.md +10 -0
- package/.agents/skills/deft-directive-release/SKILL.md +12 -0
- package/.agents/skills/deft-directive-review-cycle/SKILL.md +10 -0
- package/.agents/skills/deft-directive-setup/SKILL.md +10 -0
- package/.agents/skills/deft-directive-swarm/SKILL.md +10 -0
- package/.agents/skills/deft-directive-sync/SKILL.md +9 -0
- package/.agents/skills/deft-directive-triage/SKILL.md +9 -0
- package/.agents/skills/deft-directive-write-skill/SKILL.md +9 -0
- package/LICENSE.md +22 -0
- package/QUICK-START.md +167 -0
- package/UPGRADING.md +517 -0
- package/coding/build-output.md +28 -0
- package/coding/coding.md +235 -0
- package/coding/debugging.md +110 -0
- package/coding/holzmann.md +96 -0
- package/coding/hygiene.md +127 -0
- package/coding/security.md +158 -0
- package/coding/testing.md +162 -0
- package/coding/toolchain.md +44 -0
- package/commands.md +300 -0
- package/context/context.md +57 -0
- package/context/deterministic-split.md +67 -0
- package/context/examples.md +26 -0
- package/context/fractal-summaries.md +69 -0
- package/context/long-horizon.md +46 -0
- package/context/spec-deltas.md +177 -0
- package/context/tool-design.md +34 -0
- package/context/working-memory.md +62 -0
- package/contracts/boundary-maps.md +65 -0
- package/contracts/deterministic-questions.md +59 -0
- package/contracts/hierarchy.md +77 -0
- package/conventions/content-manifest.json +399 -0
- package/conventions/machine-generated-banner.md +130 -0
- package/conventions/references.md +120 -0
- package/conventions/rule-ownership.json +382 -0
- package/conventions/task-caching.md +43 -0
- package/conventions/vbrief-filenames.md +70 -0
- package/deployments/README.md +37 -0
- package/deployments/agentuity/README.md +138 -0
- package/deployments/agentuity/via-cli.md +380 -0
- package/deployments/agentuity/via-cloud.md +425 -0
- package/deployments/agentuity/via-github-actions.md +664 -0
- package/deployments/agentuity/via-gravity-network.md +606 -0
- package/deployments/agentuity/via-vpc.md +607 -0
- package/deployments/aws/README.md +38 -0
- package/deployments/aws/via-app-runner.md +612 -0
- package/deployments/aws/via-ecs-fargate.md +561 -0
- package/deployments/aws/via-elastic-beanstalk.md +628 -0
- package/deployments/aws/via-lambda.md +649 -0
- package/deployments/azure/README.md +37 -0
- package/deployments/azure/via-aks.md +390 -0
- package/deployments/azure/via-app-service.md +564 -0
- package/deployments/azure/via-container-apps.md +599 -0
- package/deployments/azure/via-functions.md +552 -0
- package/deployments/cloud-gov/README.md +63 -0
- package/deployments/cloud-gov/agents/compliance-docs.md +154 -0
- package/deployments/cloud-gov/agents.md +39 -0
- package/deployments/cloud-gov/cicd.md +64 -0
- package/deployments/cloud-gov/deployment.md +150 -0
- package/deployments/cloud-gov/logging.md +43 -0
- package/deployments/cloud-gov/manifest.md +121 -0
- package/deployments/cloud-gov/overview.md +58 -0
- package/deployments/cloud-gov/security.md +46 -0
- package/deployments/cloud-gov/services.md +72 -0
- package/deployments/cloud-gov/upstream/README.md +18 -0
- package/deployments/cloudflare/README.md +33 -0
- package/deployments/cloudflare/via-dashboard.md +83 -0
- package/deployments/cloudflare/via-git.md +90 -0
- package/deployments/cloudflare/via-github-actions.md +185 -0
- package/deployments/cloudflare/via-terraform.md +157 -0
- package/deployments/cloudflare/via-wrangler.md +165 -0
- package/deployments/fly-io/README.md +37 -0
- package/deployments/fly-io/via-dockerfile.md +648 -0
- package/deployments/fly-io/via-flyctl.md +653 -0
- package/deployments/fly-io/via-github-actions.md +695 -0
- package/deployments/fly-io/via-multi-region.md +598 -0
- package/deployments/google/README.md +34 -0
- package/deployments/google/via-app-engine.md +42 -0
- package/deployments/google/via-cloud-functions.md +23 -0
- package/deployments/google/via-cloud-run.md +330 -0
- package/deployments/google/via-gke.md +23 -0
- package/deployments/netlify/README.md +99 -0
- package/deployments/netlify/via-cli.md +17 -0
- package/deployments/netlify/via-functions.md +19 -0
- package/deployments/netlify/via-git.md +25 -0
- package/deployments/vercel/README.md +90 -0
- package/deployments/vercel/via-api.md +16 -0
- package/deployments/vercel/via-cli.md +17 -0
- package/deployments/vercel/via-git.md +24 -0
- package/docs/BROWNFIELD.md +179 -0
- package/docs/getting-started.md +137 -0
- package/docs/good-agents-md.md +137 -0
- package/events/README.md +89 -0
- package/events/event-record.schema.json +26 -0
- package/events/registry.json +166 -0
- package/events/registry.schema.json +71 -0
- package/glossary.md +145 -0
- package/incidents/README.md +81 -0
- package/incidents/_template.md +38 -0
- package/interfaces/cli.md +104 -0
- package/interfaces/rest.md +212 -0
- package/interfaces/tui.md +242 -0
- package/interfaces/web.md +123 -0
- package/languages/6502-DASM.md +132 -0
- package/languages/c.md +235 -0
- package/languages/commands.md +23 -0
- package/languages/cpp.md +132 -0
- package/languages/csharp.md +259 -0
- package/languages/dart.md +183 -0
- package/languages/delphi.md +218 -0
- package/languages/elixir.md +208 -0
- package/languages/go.md +78 -0
- package/languages/java.md +278 -0
- package/languages/javascript.md +163 -0
- package/languages/julia.md +175 -0
- package/languages/kotlin.md +193 -0
- package/languages/markdown.md +168 -0
- package/languages/mermaid.md +146 -0
- package/languages/officejs.md +392 -0
- package/languages/python.md +209 -0
- package/languages/r.md +163 -0
- package/languages/rust.md +216 -0
- package/languages/sql.md +216 -0
- package/languages/swift.md +153 -0
- package/languages/typescript.md +132 -0
- package/languages/vba.md +279 -0
- package/languages/vhdl.md +180 -0
- package/languages/visual-basic.md +151 -0
- package/languages/zig.md +196 -0
- package/meta/SOUL.md +27 -0
- package/meta/code-field.md +44 -0
- package/meta/morals.md +40 -0
- package/meta/philosophy.md +39 -0
- package/meta/project.md +49 -0
- package/meta/ralph.md +223 -0
- package/meta/security.md +80 -0
- package/meta/versioning.md +326 -0
- package/package.json +22 -0
- package/packs/lessons/lessons-pack-0.1.json +553 -0
- package/packs/patterns/patterns-pack-0.1.json +57 -0
- package/packs/rules/rules-pack-0.1.json +4767 -0
- package/packs/skills/skills-pack-0.1.json +262 -0
- package/packs/strategies/strategies-pack-0.1.json +167 -0
- package/packs/swarm-spec/swarm-spec-pack-0.1.json +17 -0
- package/patterns/executor-layer-credentials.md +227 -0
- package/patterns/llm-app.md +156 -0
- package/patterns/multi-agent.md +278 -0
- package/patterns/prompt-assembly-layer-ordering.md +154 -0
- package/patterns/role-as-overlay.md +179 -0
- package/platforms/2600.md +137 -0
- package/platforms/unity.md +329 -0
- package/references/composer-skill-porting.md +152 -0
- package/references/cost-models.md +163 -0
- package/references/ip-risk.md +246 -0
- package/references/plain-english-ux.md +275 -0
- package/resilience/context-pruning.md +67 -0
- package/resilience/continue-here.md +62 -0
- package/scm/changelog.md +276 -0
- package/scm/git.md +139 -0
- package/scm/github.md +265 -0
- package/secrets/.gitkeep +0 -0
- package/skills/deft-build/SKILL.md +20 -0
- package/skills/deft-directive-article-review/SKILL.md +156 -0
- package/skills/deft-directive-build/SKILL.md +302 -0
- package/skills/deft-directive-cost/SKILL.md +201 -0
- package/skills/deft-directive-debug/SKILL.md +140 -0
- package/skills/deft-directive-decompose/SKILL.md +96 -0
- package/skills/deft-directive-gh-arch/SKILL.md +160 -0
- package/skills/deft-directive-gh-slice/SKILL.md +199 -0
- package/skills/deft-directive-glossary/SKILL.md +118 -0
- package/skills/deft-directive-interview/SKILL.md +528 -0
- package/skills/deft-directive-pre-pr/SKILL.md +131 -0
- package/skills/deft-directive-probe/SKILL.md +127 -0
- package/skills/deft-directive-refinement/SKILL.md +403 -0
- package/skills/deft-directive-release/SKILL.md +266 -0
- package/skills/deft-directive-review-cycle/SKILL.md +401 -0
- package/skills/deft-directive-setup/SKILL.md +717 -0
- package/skills/deft-directive-swarm/SKILL.md +989 -0
- package/skills/deft-directive-sync/SKILL.md +288 -0
- package/skills/deft-directive-triage/SKILL.md +137 -0
- package/skills/deft-directive-write-skill/SKILL.md +169 -0
- package/skills/deft-interview/SKILL.md +16 -0
- package/skills/deft-pre-pr/SKILL.md +16 -0
- package/skills/deft-review-cycle/SKILL.md +16 -0
- package/skills/deft-roadmap-refresh/SKILL.md +16 -0
- package/skills/deft-setup/SKILL.md +20 -0
- package/skills/deft-swarm/SKILL.md +16 -0
- package/skills/deft-sync/SKILL.md +16 -0
- package/strategies/README.md +83 -0
- package/strategies/artifact-guards.md +85 -0
- package/strategies/bdd.md +115 -0
- package/strategies/brownfield.md +7 -0
- package/strategies/discuss.md +129 -0
- package/strategies/emit-hints.md +69 -0
- package/strategies/enterprise.md +193 -0
- package/strategies/interview.md +551 -0
- package/strategies/map.md +179 -0
- package/strategies/probe.md +151 -0
- package/strategies/rapid.md +155 -0
- package/strategies/research.md +155 -0
- package/strategies/roadmap.md +9 -0
- package/strategies/speckit.md +437 -0
- package/strategies/v0-20-contract.md +134 -0
- package/strategies/yolo.md +169 -0
- package/swarm/swarm.md +300 -0
- package/templates/COST-ESTIMATE.md +114 -0
- package/templates/PULL_REQUEST_TEMPLATE.md +35 -0
- package/templates/agent-prompt-preamble.md +409 -0
- package/templates/agents-entry.md +211 -0
- package/templates/agents-entry.placeholders.md +75 -0
- package/templates/embed.go +20 -0
- package/templates/embed_test.go +36 -0
- package/templates/make-spec-example.md +9 -0
- package/templates/make-spec.md +246 -0
- package/templates/project.md.template +52 -0
- package/templates/specification.md +1 -0
- package/templates/swarm-greptile-poller-prompt.md +556 -0
- package/templates/user.md.template +31 -0
- package/tools/RWLDL.md +80 -0
- package/tools/greptile.md +141 -0
- package/tools/installer.md +23 -0
- package/tools/taskfile-migration.md +32 -0
- package/tools/taskfile.md +185 -0
- package/tools/telemetry.md +285 -0
- package/vbrief/schemas/cache-meta.schema.json +137 -0
- package/vbrief/schemas/candidates.schema.json +130 -0
- package/vbrief/schemas/codebase-map.schema.json +213 -0
- package/vbrief/schemas/lessons-pack.schema.json +134 -0
- package/vbrief/schemas/patterns-pack.schema.json +84 -0
- package/vbrief/schemas/rules-pack.schema.json +105 -0
- package/vbrief/schemas/skills-pack.schema.json +94 -0
- package/vbrief/schemas/slices.schema.json +87 -0
- package/vbrief/schemas/strategies-pack.schema.json +89 -0
- package/vbrief/schemas/swarm-spec-pack.schema.json +84 -0
- package/vbrief/schemas/vbrief-core.schema.json +1022 -0
- package/vbrief/vbrief.md +684 -0
- package/verification/integration.md +76 -0
- package/verification/plan-checking.md +85 -0
- package/verification/uat.md +60 -0
- package/verification/verification.md +117 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 2,
|
|
3
|
+
"description": "Content Manifest (#1821 / #1875): structural source of truth classifying repository entries into one of four buckets and enforcing the post-move LOCATION INVARIANT. Since #1875 every shippable `content` entry physically lives under the `content/` root (which the C1 flatten deposits to `.deft/core/<x>`), with the three named harness-entry files (AGENTS.md / main.md / SKILL.md) the only content-classified exceptions that remain at the repo root (`harnessEntry: true`). The deterministic gate `task verify:content-manifest` (packages/core/src/verify-source/content-manifest.ts, exposed via `deft-ts verify-content-manifest`) fails CI when a `content` entry is not under `content/`, when a non-`content` entry lives under `content/`, when a git-tracked `content/` child has no manifest entry (or a manifest content child is stale), when a bucket value is invalid, or when a path is listed twice. Refs #1821 (manifest v1 + gate), #1669 (epic / Wave-1 LockedDecisions D2/C1/C2/C3/C4), #1875 (content/ move).",
|
|
4
|
+
"buckets": [
|
|
5
|
+
{
|
|
6
|
+
"id": "content",
|
|
7
|
+
"label": "Content",
|
|
8
|
+
"description": "Framework knowledge/guidance/assets that a consumer consumes. Since #1875 these live under the `content/` root and deposit (C1 flatten) into the consumer's `.deft/core/`: standards docs, skills, templates, packs, conventions prose, core/framework docs, and deposited scaffolds. The three named harness-entry files (AGENTS.md / main.md / SKILL.md) are content-classified but root-resident (`harnessEntry: true`)."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "engine",
|
|
12
|
+
"label": "Engine",
|
|
13
|
+
"description": "Executable framework runtime -- the code that enforces and runs deft. In the #1669 model this ships as the CLI package (npm/pip), not as editable deposited content: the TS packages, the Go installer, the Python scripts, the Taskfile + task fragments, the `run` CLI launchers, and the deposited git hooks."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "harness",
|
|
17
|
+
"label": "Harness",
|
|
18
|
+
"description": "Build / test / language toolchain configuration required to build and test the engine inside THIS repo. Not shipped as-is; needed to produce the engine + content artifacts: package/lockfiles, compiler/linter/test config, and the framework's own test suite."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"id": "repo-dev",
|
|
22
|
+
"label": "Repo-dev",
|
|
23
|
+
"description": "Maintainer-only / repository artifacts that are neither shippable content nor engine runtime: CI config, git plumbing, planning docs, history/incident records, the maintainer's own vBRIEF lifecycle, framework spec fixtures, and the deft project's own product/release docs."
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"straddlePolicy": "C3 straddle policy (#1669 Wave-1 LockedDecisions): straddles are now PHYSICALLY RESOLVED by the #1875 content/ move -- the directories that previously straddled (vbrief/, meta/, incidents/, docs/, core/) were split so the shippable half lives under content/ and the maintainer-only half stays at the repo root. The remaining `straddle: true` markers (LICENSE.md, content/conventions) flag entries whose directory still carries a minority of differently-purposed files that travel together by necessity (e.g. content/conventions co-locates engine-consumed gate JSON with conventions prose). The gate enforces the location invariant over content/ children; it does not descend further into directories.",
|
|
27
|
+
"entries": [
|
|
28
|
+
{
|
|
29
|
+
"path": "content/.agents",
|
|
30
|
+
"bucket": "content",
|
|
31
|
+
"note": "Dogfood deposit of the deft skills (.agents/skills/) the deft repo's own agents load; consumer .agents/ is generated by the installer from embedded pointers, not copied from here."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "content/LICENSE.md",
|
|
35
|
+
"bucket": "content",
|
|
36
|
+
"note": "Travels with the deposited payload; the engine CLI package also bundles its own copy at publish time.",
|
|
37
|
+
"straddle": true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "content/QUICK-START.md",
|
|
41
|
+
"bucket": "content",
|
|
42
|
+
"note": "Consumer-facing onboarding doc; the AGENTS.md managed-section points consumers at .deft/core/QUICK-START.md for idempotent refresh."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "content/UPGRADING.md",
|
|
46
|
+
"bucket": "content",
|
|
47
|
+
"note": "Consumer-facing upgrade guide cited by the doctor and install surfaces."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "content/coding",
|
|
51
|
+
"bucket": "content",
|
|
52
|
+
"note": "Coding standards docs (coding.md, hygiene.md, testing.md, build-output.md, toolchain.md)."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "content/commands.md",
|
|
56
|
+
"bucket": "content",
|
|
57
|
+
"note": "Framework commands reference doc."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"path": "content/context",
|
|
61
|
+
"bucket": "content",
|
|
62
|
+
"note": "Context-engineering standards docs."
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "content/contracts",
|
|
66
|
+
"bucket": "content",
|
|
67
|
+
"note": "Framework contract docs (boundary-maps, deterministic-questions, hierarchy)."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "content/conventions",
|
|
71
|
+
"bucket": "content",
|
|
72
|
+
"note": "Conventions prose docs ship as content; co-located structured data files (rule-ownership.json, content-manifest.json) are engine-consumed gate inputs that travel with the same directory.",
|
|
73
|
+
"straddle": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"path": "content/deployments",
|
|
77
|
+
"bucket": "content",
|
|
78
|
+
"note": "Per-platform deployment guidance docs (aws, azure, gcp, fly-io, cloudflare, ...)."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"path": "content/docs",
|
|
82
|
+
"bucket": "content",
|
|
83
|
+
"note": "Consumer-facing concept/guide docs promoted from the maintainer docs/ tree (BROWNFIELD.md, getting-started.md, good-agents-md.md) per #1669 Wave-1 C3."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"path": "content/events",
|
|
87
|
+
"bucket": "content",
|
|
88
|
+
"note": "Event-driven framework docs and JSON schemas (event-record.schema.json, registry.schema.json)."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"path": "content/glossary.md",
|
|
92
|
+
"bucket": "content",
|
|
93
|
+
"note": "Canonical framework glossary -- the former core/glossary.md merged with the unique vBRIEF-lifecycle terms from the former top-level glossary.md (#1875 dedup)."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"path": "content/incidents",
|
|
97
|
+
"bucket": "content",
|
|
98
|
+
"note": "Incident postmortem convention scaffold (_template.md + README.md); specific incident records stay at the maintainer-only root incidents/."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "content/interfaces",
|
|
102
|
+
"bucket": "content",
|
|
103
|
+
"note": "Interface-design standards docs (cli, rest, tui, web)."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"path": "content/languages",
|
|
107
|
+
"bucket": "content",
|
|
108
|
+
"note": "Per-language standards docs (python, go, typescript, rust, ...)."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"path": "content/meta",
|
|
112
|
+
"bucket": "content",
|
|
113
|
+
"note": "Meta docs that ship: SOUL.md / code-field.md / morals.md / philosophy.md / security.md plus the former core/ docs (project.md, ralph.md, versioning.md). Repo-dev meta (ideas/suggestions/lessons/policy-changes.log) stays at root meta/."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "content/packs",
|
|
117
|
+
"bucket": "content",
|
|
118
|
+
"note": "Versioned content packs (lessons, etc.) loaded via the packs:slice surface."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"path": "content/patterns",
|
|
122
|
+
"bucket": "content",
|
|
123
|
+
"note": "Pattern docs (goal-gate-determinism, build-model-ahead, generator-verifier-loop, ...)."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"path": "content/platforms",
|
|
127
|
+
"bucket": "content",
|
|
128
|
+
"note": "Platform-specific guidance docs (unity, 2600, ...)."
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"path": "content/references",
|
|
132
|
+
"bucket": "content",
|
|
133
|
+
"note": "Reference docs (cost-models, ip-risk, plain-english-ux, ...)."
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"path": "content/resilience",
|
|
137
|
+
"bucket": "content",
|
|
138
|
+
"note": "Resilience/session-continuity standards docs (continue-here.md, ...)."
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"path": "content/scm",
|
|
142
|
+
"bucket": "content",
|
|
143
|
+
"note": "Source-control standards docs (git.md, github.md)."
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"path": "content/secrets",
|
|
147
|
+
"bucket": "content",
|
|
148
|
+
"note": "Deposited secrets-handling scaffold directory (.gitkeep placeholder)."
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"path": "content/skills",
|
|
152
|
+
"bucket": "content",
|
|
153
|
+
"note": "The deft skill library (deft-directive-*); the primary shipped guidance surface."
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"path": "content/strategies",
|
|
157
|
+
"bucket": "content",
|
|
158
|
+
"note": "Strategy docs (delegate, interview, ...)."
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"path": "content/swarm",
|
|
162
|
+
"bucket": "content",
|
|
163
|
+
"note": "Swarm orchestration standards docs (the swarm runtime lives in packages/ + tasks/swarm.yml)."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"path": "content/templates",
|
|
167
|
+
"bucket": "content",
|
|
168
|
+
"note": "Framework templates (agents-entry.md, agent-prompt-preamble.md, ...)."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"path": "content/tools",
|
|
172
|
+
"bucket": "content",
|
|
173
|
+
"note": "Tooling standards docs (taskfile.md, ...)."
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"path": "content/vbrief",
|
|
177
|
+
"bucket": "content",
|
|
178
|
+
"note": "Shipped vBRIEF surface: schemas/, vbrief.md. The lifecycle folders + PROJECT-DEFINITION live at the maintainer-only root vbrief/. The framework's own migration RESULT artifacts (LEGACY-REPORT.md / RECONCILIATION.md / safety-manifest.json) are repo-dev and live at root vbrief/migration/ -- they are this repo's migration output, not a consumer convention, so they are not shipped (refines C3: migration/ held only framework-result records, not migration conventions)."
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"path": "content/verification",
|
|
182
|
+
"bucket": "content",
|
|
183
|
+
"note": "Verification standards docs (stub detection, legacy-code detection)."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"path": "AGENTS.md",
|
|
187
|
+
"bucket": "content",
|
|
188
|
+
"harnessEntry": true,
|
|
189
|
+
"note": "Installer-managed framework guidance entry; the managed-section is rendered from content/templates/agents-entry.md and deposited to consumers. Harness-entry: stays at the repo root, not under content/ (#1669 D2)."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"path": "main.md",
|
|
193
|
+
"bucket": "content",
|
|
194
|
+
"harnessEntry": true,
|
|
195
|
+
"note": "The full framework guidelines -- the canonical entry doc consumers read. Harness-entry: stays at the repo root, not under content/ (#1669 D2)."
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"path": "SKILL.md",
|
|
199
|
+
"bucket": "content",
|
|
200
|
+
"harnessEntry": true,
|
|
201
|
+
"note": "Top-level deft skill entry (the `deft` skill); part of the shipped skills surface. Harness-entry: stays at the repo root, not under content/ (#1669 D2)."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"path": ".githooks",
|
|
205
|
+
"bucket": "engine",
|
|
206
|
+
"note": "Deposited pre-commit/pre-push hooks (#1463) that invoke the gate scripts -- executable enforcement installed by `task setup` / the installer."
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"path": "cmd",
|
|
210
|
+
"bucket": "engine",
|
|
211
|
+
"note": "Go installer (cmd/deft-install) -- the canonical bootstrap/upgrade binary."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"path": "packages",
|
|
215
|
+
"bucket": "engine",
|
|
216
|
+
"note": "TypeScript engine monorepo (@deftai/cli, @deftai/core, @deftai/types) -- the gate + lifecycle runtime."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"path": "run",
|
|
220
|
+
"bucket": "engine",
|
|
221
|
+
"note": "POSIX `run` CLI launcher shim."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"path": "run.bat",
|
|
225
|
+
"bucket": "engine",
|
|
226
|
+
"note": "Windows `run` CLI launcher shim."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"path": "run.py",
|
|
230
|
+
"bucket": "engine",
|
|
231
|
+
"note": "Python `run` CLI entrypoint dispatched by the run shims."
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"path": "scripts",
|
|
235
|
+
"bucket": "engine",
|
|
236
|
+
"note": "Python engine scripts (gate oracles, lifecycle, triage, release) invoked by the Taskfile and TS dispatcher."
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"path": "tasks",
|
|
240
|
+
"bucket": "engine",
|
|
241
|
+
"note": "Taskfile fragments (verify, scope, triage, pr, ...) that orchestrate the engine verbs."
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"path": "Taskfile.yml",
|
|
245
|
+
"bucket": "engine",
|
|
246
|
+
"note": "Root task runner manifest that orchestrates the engine gates and lifecycle verbs."
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"path": ".nvmrc",
|
|
250
|
+
"bucket": "harness",
|
|
251
|
+
"note": "Node version pin used to build the TS engine."
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"path": "biome.json",
|
|
255
|
+
"bucket": "harness",
|
|
256
|
+
"note": "Biome formatter/linter config for the TS engine."
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"path": "go.mod",
|
|
260
|
+
"bucket": "harness",
|
|
261
|
+
"note": "Go module definition for the installer build."
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"path": "package.json",
|
|
265
|
+
"bucket": "harness",
|
|
266
|
+
"note": "Root pnpm workspace manifest for the TS engine build/test."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"path": "pnpm-lock.yaml",
|
|
270
|
+
"bucket": "harness",
|
|
271
|
+
"note": "pnpm dependency lockfile for the TS engine."
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"path": "pnpm-workspace.yaml",
|
|
275
|
+
"bucket": "harness",
|
|
276
|
+
"note": "pnpm workspace package globs for the TS engine."
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"path": "pyproject.toml",
|
|
280
|
+
"bucket": "harness",
|
|
281
|
+
"note": "Python project + pytest/ruff/mypy config for the Python engine scripts and their tests."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"path": "tests",
|
|
285
|
+
"bucket": "harness",
|
|
286
|
+
"note": "The framework's own test suite (Python); pruned from the consumer deposit (#1474)."
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"path": "tsconfig.base.json",
|
|
290
|
+
"bucket": "harness",
|
|
291
|
+
"note": "Shared TypeScript compiler base config."
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"path": "tsconfig.json",
|
|
295
|
+
"bucket": "harness",
|
|
296
|
+
"note": "Root TypeScript project references config."
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"path": "uv.lock",
|
|
300
|
+
"bucket": "harness",
|
|
301
|
+
"note": "uv dependency lockfile for the Python engine scripts."
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"path": "vitest.config.ts",
|
|
305
|
+
"bucket": "harness",
|
|
306
|
+
"note": "Vitest config for the TS engine test suite."
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"path": ".gitattributes",
|
|
310
|
+
"bucket": "repo-dev",
|
|
311
|
+
"note": "Git attributes (linguist/vendored markers, EOL); repository plumbing."
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"path": ".github",
|
|
315
|
+
"bucket": "repo-dev",
|
|
316
|
+
"note": "GitHub Actions workflows, issue/PR templates, CODEOWNERS; maintainer CI only."
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"path": ".gitignore",
|
|
320
|
+
"bucket": "repo-dev",
|
|
321
|
+
"note": "Git ignore rules; repository plumbing."
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"path": ".planning",
|
|
325
|
+
"bucket": "repo-dev",
|
|
326
|
+
"note": "Maintainer planning artifacts (e.g. generated codebase MAP projection); never ships."
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"path": "CHANGELOG.md",
|
|
330
|
+
"bucket": "repo-dev",
|
|
331
|
+
"note": "Maintainer changelog; promoted into GitHub release bodies at release time."
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"path": "CONTRIBUTING.md",
|
|
335
|
+
"bucket": "repo-dev",
|
|
336
|
+
"note": "Maintainer contributor guide for the deft repo itself."
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"path": "PRD.md",
|
|
340
|
+
"bucket": "repo-dev",
|
|
341
|
+
"note": "The deft project's own product requirements doc; not consumer framework content."
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"path": "PROJECT.md",
|
|
345
|
+
"bucket": "repo-dev",
|
|
346
|
+
"note": "The deft project's own project doc (deprecation redirect / generated export); not consumer content."
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"path": "README.md",
|
|
350
|
+
"bucket": "repo-dev",
|
|
351
|
+
"note": "GitHub-facing repository readme for the deft project."
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"path": "REFERENCES.md",
|
|
355
|
+
"bucket": "repo-dev",
|
|
356
|
+
"note": "Repo-level references index for maintainers (harness-entry-adjacent; stays at root)."
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"path": "ROADMAP.md",
|
|
360
|
+
"bucket": "repo-dev",
|
|
361
|
+
"note": "The deft project's own roadmap; updated at release time."
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"path": "SPECIFICATION.md",
|
|
365
|
+
"bucket": "repo-dev",
|
|
366
|
+
"note": "The deft project's own generated specification export / deprecation redirect; not consumer content."
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"path": "docs",
|
|
370
|
+
"bucket": "repo-dev",
|
|
371
|
+
"note": "Predominantly maintainer/repo docs (FILES.md, RELEASING.md, analysis/, audits, incident smoke records); the consumer-facing concept guides were promoted to content/docs/ (#1875 C3)."
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"path": "history",
|
|
375
|
+
"bucket": "repo-dev",
|
|
376
|
+
"note": "Archived task/vBRIEF state preserved byte-for-byte as a forensic record; never ships."
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"path": "incidents",
|
|
380
|
+
"bucket": "repo-dev",
|
|
381
|
+
"note": "The deft project's own incident postmortem records; the _template.md + README convention were promoted to content/incidents/ (#1875 C3)."
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"path": "meta",
|
|
385
|
+
"bucket": "repo-dev",
|
|
386
|
+
"note": "Repo-dev meta: ideas.md, suggestions.md, lessons.md (pack projection target), policy-changes.log. The shippable meta docs were promoted to content/meta/ (#1875 C3)."
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"path": "specs",
|
|
390
|
+
"bucket": "repo-dev",
|
|
391
|
+
"note": "The deft project's own framework spec fixtures/examples (strategy-chaining, testbed); repo-dev per #1669 Wave-1 C3 (not shipped)."
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"path": "vbrief",
|
|
395
|
+
"bucket": "repo-dev",
|
|
396
|
+
"note": "The maintainer's own vBRIEF scope lifecycle (proposed/pending/active/completed/cancelled + PROJECT-DEFINITION) plus the framework's own migration RESULT artifacts at vbrief/migration/ (LEGACY-REPORT.md / RECONCILIATION.md / safety-manifest.json). The shippable vBRIEF surface (schemas/, vbrief.md) was promoted to content/vbrief/ (#1875 C3); the migration result records stay repo-dev (this repo's own migration output, not a consumer convention)."
|
|
397
|
+
}
|
|
398
|
+
]
|
|
399
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Machine-Generated File Banner (Canonical Contract)
|
|
2
|
+
|
|
3
|
+
Canonical banner template emitted by every deft writer that produces a
|
|
4
|
+
machine-managed markdown file. Defined to eliminate the four-convention
|
|
5
|
+
drift surfaced in #572 (spec:render emitted none; migrator heuristic
|
|
6
|
+
searched for strings no writer actually produced).
|
|
7
|
+
|
|
8
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
9
|
+
|
|
10
|
+
## Why
|
|
11
|
+
|
|
12
|
+
Before this contract, deft had four machine-managed file writers
|
|
13
|
+
(`task migrate:vbrief` deprecation redirects, `task spec:render`,
|
|
14
|
+
`task prd:render`, `task roadmap:render`) and each used a different
|
|
15
|
+
(or no) banner convention. Downstream heuristics that distinguish
|
|
16
|
+
"is this file user-customized" from "is this machine-managed" were
|
|
17
|
+
decoupled from what the writers actually emitted -- a correctness
|
|
18
|
+
risk, not a polish one.
|
|
19
|
+
|
|
20
|
+
## The canonical 4-line banner
|
|
21
|
+
|
|
22
|
+
! Every machine-managed markdown file MUST begin with exactly these
|
|
23
|
+
four HTML-comment lines, in this order, as the very first four lines
|
|
24
|
+
of the file:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
<!-- AUTO-GENERATED by {generator} -- DO NOT EDIT MANUALLY -->
|
|
28
|
+
<!-- Purpose: {purpose} -->
|
|
29
|
+
<!-- Source of truth: {source} -->
|
|
30
|
+
<!-- Regenerate with: {command} -->
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- `{generator}` — the human-readable writer name (e.g. `task spec:render`).
|
|
34
|
+
- `{purpose}` — one of the enumerated per-writer purposes below; fixed
|
|
35
|
+
string values so downstream detectors can match on a stable token.
|
|
36
|
+
- `{source}` — the source-of-truth path the writer consumed
|
|
37
|
+
(typically `vbrief/specification.vbrief.json`), or `n/a` when the
|
|
38
|
+
writer has no single source-of-truth file (e.g. the migrator
|
|
39
|
+
deprecation redirect, which is driven by the migration flow).
|
|
40
|
+
- `{command}` — the canonical `task *` invocation that regenerates
|
|
41
|
+
the file; operators copy-paste from this line.
|
|
42
|
+
|
|
43
|
+
! All four lines MUST be populated (no empty `{...}` placeholders).
|
|
44
|
+
! The banner MUST be the first four lines of the file -- nothing
|
|
45
|
+
(not even blank lines) precedes it.
|
|
46
|
+
|
|
47
|
+
## Per-writer purpose registry
|
|
48
|
+
|
|
49
|
+
The `Purpose:` value is a small fixed enum so detectors can match on a
|
|
50
|
+
stable token. Writers MUST use exactly one of these values:
|
|
51
|
+
|
|
52
|
+
- `rendered specification` -- `scripts/spec_render.py` -> `SPECIFICATION.md`
|
|
53
|
+
- `rendered PRD` -- `scripts/prd_render.py` -> `PRD.md`
|
|
54
|
+
- `rendered roadmap` -- `scripts/roadmap_render.py` -> `ROADMAP.md`
|
|
55
|
+
- `deprecation redirect` -- `scripts/migrate_vbrief.py::_deprecation_redirect()`
|
|
56
|
+
-> replaced `SPECIFICATION.md` / `PROJECT.md`
|
|
57
|
+
|
|
58
|
+
? Future render tasks added under `tasks/` MUST extend this list before
|
|
59
|
+
shipping; a new writer without a registered `Purpose:` value is a
|
|
60
|
+
contract violation.
|
|
61
|
+
|
|
62
|
+
## Detection heuristic (for user-customization guards)
|
|
63
|
+
|
|
64
|
+
! `scripts/migrate_vbrief.py::_is_user_customized()` consults the
|
|
65
|
+
`_SPEC_AUTO_MARKERS` and `_PROJECT_AUTO_MARKERS` tuples. Both MUST
|
|
66
|
+
include `"AUTO-GENERATED by"` and the FULL HTML-comment prefix
|
|
67
|
+
`"<!-- Purpose:"` so any file carrying this banner is recognised as
|
|
68
|
+
machine-managed. The marker is deliberately the full `<!-- Purpose:`
|
|
69
|
+
prefix and NOT the bare `Purpose:` string, so a hand-authored
|
|
70
|
+
specification containing ordinary prose such as
|
|
71
|
+
`"Purpose: deliver a self-service flow."` is not misclassified as
|
|
72
|
+
machine-managed and silently overwritten.
|
|
73
|
+
|
|
74
|
+
! Pre-cutover guards (e.g.
|
|
75
|
+
`skills/deft-directive-setup/SKILL.md`) MUST accept BOTH the legacy
|
|
76
|
+
`<!-- deft:deprecated-redirect -->` sentinel AND the current
|
|
77
|
+
`Purpose: deprecation redirect` marker for at least one release
|
|
78
|
+
cycle so consumers that migrated under rc.1 / rc.2 are not
|
|
79
|
+
incorrectly re-flagged as pre-cutover on rc.3.
|
|
80
|
+
|
|
81
|
+
## Example (spec:render)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
<!-- AUTO-GENERATED by task spec:render -- DO NOT EDIT MANUALLY -->
|
|
85
|
+
<!-- Purpose: rendered specification -->
|
|
86
|
+
<!-- Source of truth: vbrief/specification.vbrief.json -->
|
|
87
|
+
<!-- Regenerate with: task spec:render -->
|
|
88
|
+
# My Project
|
|
89
|
+
...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Example (migrator deprecation redirect)
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
<!-- AUTO-GENERATED by task migrate:vbrief -- DO NOT EDIT MANUALLY -->
|
|
96
|
+
<!-- Purpose: deprecation redirect -->
|
|
97
|
+
<!-- Source of truth: n/a -->
|
|
98
|
+
<!-- Regenerate with: task migrate:vbrief -->
|
|
99
|
+
<!-- deft:deprecated-redirect -->
|
|
100
|
+
# SPECIFICATION.md -- DEPRECATED
|
|
101
|
+
...
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The legacy `<!-- deft:deprecated-redirect -->` sentinel remains on the
|
|
105
|
+
fifth line of the deprecation redirect for one release cycle so
|
|
106
|
+
existing detectors (consumer agents, pre-cutover guards, the
|
|
107
|
+
migrator's own re-run protection in `_vbrief_safety.py`) continue to
|
|
108
|
+
work while tooling upgrades to the canonical `Purpose:` token.
|
|
109
|
+
|
|
110
|
+
## Regression test
|
|
111
|
+
|
|
112
|
+
`tests/content/test_machine_generated_banner.py` parametrises over
|
|
113
|
+
all four writers, invokes each on a fixture, and asserts:
|
|
114
|
+
|
|
115
|
+
1. the output begins with the four canonical banner lines;
|
|
116
|
+
2. all `{generator}`, `{purpose}`, `{source}`, `{command}`
|
|
117
|
+
placeholders are populated with the expected values;
|
|
118
|
+
3. the `Purpose:` token is one of the four registered purposes.
|
|
119
|
+
|
|
120
|
+
Guards the convention against future drift.
|
|
121
|
+
|
|
122
|
+
## Cross-references
|
|
123
|
+
|
|
124
|
+
- #572 — originating issue
|
|
125
|
+
- `scripts/migrate_vbrief.py` — `_deprecation_redirect()`,
|
|
126
|
+
`_SPEC_AUTO_MARKERS`, `_PROJECT_AUTO_MARKERS`
|
|
127
|
+
- `scripts/spec_render.py::_BANNER`
|
|
128
|
+
- `scripts/prd_render.py::BANNER`
|
|
129
|
+
- `scripts/roadmap_render.py::BANNER`
|
|
130
|
+
- `skills/deft-directive-setup/SKILL.md` § Pre-Cutover Detection Guard
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# vBRIEF References — `x-vbrief/*` Type Registry
|
|
2
|
+
|
|
3
|
+
Canonical reference for the shape and type registry of `plan.references` entries in vBRIEF files.
|
|
4
|
+
|
|
5
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
6
|
+
|
|
7
|
+
**See also**: [../vbrief/vbrief.md](../vbrief/vbrief.md) | [../vbrief/schemas/vbrief-core.schema.json](../vbrief/schemas/vbrief-core.schema.json) | [../main.md](../../main.md)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Schema-Conformant Reference Shape
|
|
12
|
+
|
|
13
|
+
Every entry in `plan.references` is a `VBriefReference`, which extends the
|
|
14
|
+
schema's `URI` object and adds a `type` field that MUST match the pattern
|
|
15
|
+
`^x-vbrief/` (per the canonical v0.6 schema and directive's vendored copy).
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
"references": [
|
|
19
|
+
{
|
|
20
|
+
"uri": "https://github.com/{owner}/{repo}/issues/{N}",
|
|
21
|
+
"type": "x-vbrief/github-issue",
|
|
22
|
+
"title": "Issue #{N}: {issue title}"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Required fields:
|
|
28
|
+
|
|
29
|
+
- ! `uri` — the canonical URL or relative path (required by the `URI` base type; not `url`)
|
|
30
|
+
- ! `type` — MUST begin with `x-vbrief/` (see registry below)
|
|
31
|
+
|
|
32
|
+
Optional (schema-defined) fields:
|
|
33
|
+
|
|
34
|
+
- ? `title` — a short human label (use `#{N}: {issue title}` for GitHub issues)
|
|
35
|
+
- ? `description` — longer free-form context
|
|
36
|
+
- ? `tags` — array of strings for categorization
|
|
37
|
+
|
|
38
|
+
- ⊗ Use `url` as the field name — the schema requires `uri`
|
|
39
|
+
- ⊗ Use `type` values outside `x-vbrief/*` (e.g. `"github-issue"` with no prefix) — strict validators will reject them
|
|
40
|
+
- ⊗ Rely on `id` to convey issue numbers — that field is not schema-defined; put the issue number in `title` instead
|
|
41
|
+
|
|
42
|
+
## `x-vbrief/*` Type Registry
|
|
43
|
+
|
|
44
|
+
The following `type` values are recognized by deft's tooling and skills. Any
|
|
45
|
+
`x-vbrief/*` value is schema-valid, but the types below carry documented
|
|
46
|
+
semantics.
|
|
47
|
+
|
|
48
|
+
- `x-vbrief/plan` — reference to another vBRIEF plan (epic→story or story→epic links, also the canonical v0.5 enum value)
|
|
49
|
+
- `x-vbrief/github-issue` — a GitHub issue (the origin of an ingested scope vBRIEF, or a related issue)
|
|
50
|
+
- `x-vbrief/github-pr` — a GitHub pull request (implementing PR, related PR, or superseded PR)
|
|
51
|
+
- `x-vbrief/jira-ticket` — a Jira ticket (origin provenance for Jira-backed projects)
|
|
52
|
+
- `x-vbrief/user-request` — a direct user request captured verbatim (no external tracker ID)
|
|
53
|
+
- `x-vbrief/spec-section` — a pointer into `specification.vbrief.json` by item id or narrative key (traceability link for FR/NFR requirements)
|
|
54
|
+
|
|
55
|
+
Consumer projects ? MAY extend the registry with additional `x-vbrief/*` values. When you do, document them in a project-local conventions file and cite them from `PROJECT-DEFINITION.vbrief.json`.
|
|
56
|
+
|
|
57
|
+
### Additive sibling fields
|
|
58
|
+
|
|
59
|
+
`References` entries MAY carry additional sibling fields alongside the schema-defined `uri` / `type` / `title` / `description` / `tags`. The following extension is recognised by deft tooling:
|
|
60
|
+
|
|
61
|
+
- `TrustLevel` (`verified` | `internal` | `external`) -- source-trust classification, sourced from the AI Agent Traps paper's Cognitive State / Latent Memory Poisoning trap class. Canonical field shape, value enum, and rule body live in [`../vbrief/vbrief.md`](../vbrief/vbrief.md) `### TrustLevel (#480)`. The safe default for a missing field is `external` (#480).
|
|
62
|
+
|
|
63
|
+
## Origin Provenance (D11)
|
|
64
|
+
|
|
65
|
+
Scope vBRIEFs in `vbrief/pending/` and `vbrief/active/` SHOULD carry at least
|
|
66
|
+
one reference whose `type` matches `^x-vbrief/`. `scripts/vbrief_validate.py`
|
|
67
|
+
treats any `x-vbrief/*`-typed reference as an origin for the D11 check by
|
|
68
|
+
default (schema-trusting behavior).
|
|
69
|
+
|
|
70
|
+
Run the validator with `--strict-origin-types` to instead require an exact
|
|
71
|
+
match against the registry above (allow-list behavior). Teams that want to
|
|
72
|
+
enforce the allow-list in CI can opt in via the same flag.
|
|
73
|
+
|
|
74
|
+
- ! Every ingested scope vBRIEF MUST carry at least one `references` entry linking to its origin
|
|
75
|
+
- ~ Prefer registry types over ad-hoc `x-vbrief/*` values when a registry type fits
|
|
76
|
+
|
|
77
|
+
### `Origin` narrative -- canonical provenance signal (#1096)
|
|
78
|
+
|
|
79
|
+
For scope vBRIEFs ingested from a GitHub issue, the canonical provenance
|
|
80
|
+
signal is the `plan.narratives.Origin` text emitted by
|
|
81
|
+
`scripts/issue_ingest.py::_build_issue_vbrief`:
|
|
82
|
+
|
|
83
|
+
- ! `Origin` MUST take one of these two forms:
|
|
84
|
+
- `Ingested from https://github.com/{owner}/{repo}/issues/{N}` (browser URL resolves)
|
|
85
|
+
- `Ingested from issue #{N}` (no-URL fallback)
|
|
86
|
+
- `vBRIEFInfo.description` SHOULD mirror this as `Scope vBRIEF ingested from GitHub issue #{N}` (the secondary signal used by the dedup pass when `Origin` is absent).
|
|
87
|
+
|
|
88
|
+
The dedup pass in `task issue:ingest -- <N>` differentiates *provenance*
|
|
89
|
+
from *informational* references using this narrative:
|
|
90
|
+
|
|
91
|
+
- A pre-existing vBRIEF blocks ingest of `#N` only when BOTH conditions hold:
|
|
92
|
+
1. The vBRIEF carries an `x-vbrief/github-issue` reference whose `uri`
|
|
93
|
+
points at `#N`.
|
|
94
|
+
2. The vBRIEF's `plan.narratives.Origin` (or `vBRIEFInfo.description`)
|
|
95
|
+
identifies the SAME `#N` as its provenance.
|
|
96
|
+
- A vBRIEF with `Origin` pointing at `#X` and a companion `x-vbrief/github-issue` reference to `#Y` (`X != Y`) is the *provenance owner of #X only*. The reference to `#Y` is informational and MUST NOT block `task issue:ingest -- Y`.
|
|
97
|
+
- Legacy v0.5-shape vBRIEFs that predate the `Origin` convention fall back
|
|
98
|
+
to a position-aware heuristic: the FIRST `x-vbrief/github-issue` reference
|
|
99
|
+
in `plan.references` is the implied provenance. This preserves dedup for
|
|
100
|
+
unmigrated trees and is bounded -- the canonical Origin signal is
|
|
101
|
+
authoritative whenever it is present.
|
|
102
|
+
|
|
103
|
+
- ⊗ Treat every `x-vbrief/github-issue` reference as dedup-blocking provenance regardless of `Origin` -- that was the #1096 false-positive surface
|
|
104
|
+
- ⊗ Mutate a `completed/` vBRIEF to remove a companion / sibling reference solely because `task issue:ingest` false-positives on it (rewriting completed history is an anti-pattern per `skills/deft-directive-refinement/SKILL.md`)
|
|
105
|
+
- ~ When adding a companion / sibling / related-plan reference to an ingested vBRIEF, keep `Origin` pointing at the original ingest source so the dedup pass continues to recognise the vBRIEF as the canonical owner of that issue
|
|
106
|
+
|
|
107
|
+
## Schema Version: v0.6 (Canonical, Strict)
|
|
108
|
+
|
|
109
|
+
- ! All vBRIEFs MUST emit `"vBRIEFInfo": { "version": "0.6" }`
|
|
110
|
+
- ! `scripts/vbrief_validate.py` accepts ONLY `"0.6"`; any other version (including legacy `"0.5"`) is a hard validation error
|
|
111
|
+
- ! The vendored schema at `../vbrief/schemas/vbrief-core.schema.json` is the canonical v0.6 copy from [`deftai/vBRIEF`](https://github.com/deftai/vBRIEF/blob/master/schemas/vbrief-core-0.6.schema.json) and pins `vBRIEFInfo.version` to `const: "0.6"`
|
|
112
|
+
- ! `scripts/migrate_vbrief.py` emits `"0.6"`; pre-existing v0.5 vBRIEFs are swept to `"0.6"` as part of the migrator flip PR
|
|
113
|
+
|
|
114
|
+
## Anti-Patterns
|
|
115
|
+
|
|
116
|
+
- ⊗ Write references with a bare `"type": "github-issue"` — the schema requires `^x-vbrief/`
|
|
117
|
+
- ⊗ Write references with `"url"` instead of `"uri"`
|
|
118
|
+
- ⊗ Rely on a custom `"id"` field for issue numbers — encode it in `title` (or `description`) instead
|
|
119
|
+
- ⊗ Invent new non-prefixed type vocabularies — use `x-vbrief/*` everywhere
|
|
120
|
+
- ⊗ Leave scope vBRIEFs in `pending/` / `active/` without any `x-vbrief/*` origin reference
|