@deftai/directive-content 0.64.0 → 0.66.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/.githooks/_deft-run.sh +14 -0
- package/.githooks/pre-commit +9 -10
- package/.githooks/pre-push +4 -7
- package/QUICK-START.md +8 -4
- package/Taskfile.yml +32 -14
- package/UPGRADING.md +40 -0
- package/commands.md +46 -41
- package/conventions/rule-ownership.json +1 -1
- package/docs/BROWNFIELD.md +37 -33
- package/docs/directive-lifecycle.md +2 -2
- package/docs/getting-started.md +8 -8
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +28 -28
- package/skills/deft-directive-article-review/SKILL.md +4 -4
- package/skills/deft-directive-build/SKILL.md +37 -37
- package/skills/deft-directive-cost/SKILL.md +6 -6
- package/skills/deft-directive-debug/SKILL.md +4 -4
- package/skills/deft-directive-decompose/SKILL.md +15 -15
- package/skills/deft-directive-gh-arch/SKILL.md +3 -3
- package/skills/deft-directive-gh-slice/SKILL.md +2 -2
- package/skills/deft-directive-interview/SKILL.md +12 -12
- package/skills/deft-directive-pre-pr/SKILL.md +3 -3
- package/skills/deft-directive-probe/SKILL.md +9 -9
- package/skills/deft-directive-refinement/SKILL.md +65 -65
- package/skills/deft-directive-release/SKILL.md +3 -3
- package/skills/deft-directive-review-cycle/SKILL.md +4 -4
- package/skills/deft-directive-setup/SKILL.md +71 -71
- package/skills/deft-directive-swarm/SKILL.md +94 -94
- package/skills/deft-directive-sync/SKILL.md +55 -55
- package/skills/deft-directive-triage/SKILL.md +15 -15
- package/tasks/architecture.yml +3 -1
- package/tasks/cache.yml +20 -10
- package/tasks/capacity.yml +8 -4
- package/tasks/change.yml +8 -10
- package/tasks/changelog.yml +3 -1
- package/tasks/codebase.yml +20 -10
- package/tasks/commit.yml +4 -8
- package/tasks/engine.yml +16 -4
- package/tasks/install.yml +4 -8
- package/tasks/issue.yml +8 -10
- package/tasks/migrate.yml +24 -8
- package/tasks/packs.yml +32 -16
- package/tasks/policy.yml +24 -12
- package/tasks/pr.yml +16 -8
- package/tasks/prd.yml +9 -12
- package/tasks/project.yml +14 -14
- package/tasks/reconcile.yml +4 -8
- package/tasks/roadmap.yml +9 -5
- package/tasks/scm.yml +36 -18
- package/tasks/scope-undo.yml +3 -1
- package/tasks/scope.yml +40 -26
- package/tasks/session.yml +4 -2
- package/tasks/slice.yml +8 -10
- package/tasks/spec.yml +10 -12
- package/tasks/swarm.yml +20 -10
- package/tasks/triage-actions.yml +32 -16
- package/tasks/triage-bootstrap.yml +4 -2
- package/tasks/triage-bulk.yml +20 -10
- package/tasks/triage-classify.yml +4 -2
- package/tasks/triage-queue.yml +12 -6
- package/tasks/triage-reconcile.yml +4 -2
- package/tasks/triage-scope-drift.yml +4 -2
- package/tasks/triage-scope.yml +4 -2
- package/tasks/triage-smoketest.yml +4 -2
- package/tasks/triage-subscribe.yml +8 -4
- package/tasks/triage-summary.yml +4 -2
- package/tasks/triage-welcome.yml +4 -2
- package/tasks/ts.yml +3 -1
- package/tasks/umbrella.yml +1 -7
- package/tasks/vbrief.yml +25 -17
- package/tasks/verify.yml +107 -48
- package/templates/agent-prompt-preamble.md +16 -16
- package/templates/agents-entry.md +23 -19
- package/vbrief/conformance/extensions/valid/extension-at-root.vbrief.json +31 -0
- package/vbrief/conformance/extensions/valid/nested-extension-value.vbrief.json +19 -0
- package/vbrief/schemas/xbrief-core-0.8.schema.json +786 -0
|
@@ -7,13 +7,13 @@ Deft is installed in .deft/core/. Full guidelines: .deft/core/main.md
|
|
|
7
7
|
|
|
8
8
|
## Pre-Cutover Check (run before First Session / Returning Sessions)
|
|
9
9
|
|
|
10
|
-
! Before the First Session / Returning Sessions checks below, detect whether this project pre-dates the v0.20
|
|
10
|
+
! Before the First Session / Returning Sessions checks below, detect whether this project pre-dates the v0.20 xBRIEF-centric model. If it does, migration MUST happen before any Phase 1, Phase 2, or Returning-Sessions routing fires.
|
|
11
11
|
|
|
12
12
|
**Pre-cutover detected** if ANY of the following are true:
|
|
13
13
|
|
|
14
|
-
- ./SPECIFICATION.md exists and is neither a deprecation redirect nor a current generated spec export. A current generated spec export contains `<!-- Purpose: rendered specification -->` and `<!-- Source of truth:
|
|
14
|
+
- ./SPECIFICATION.md exists and is neither a deprecation redirect nor a current generated spec export. A current generated spec export contains `<!-- Purpose: rendered specification -->` and `<!-- Source of truth: xbrief/specification.xbrief.json -->`, and `./xbrief/specification.xbrief.json` plus all five lifecycle folders exist. This mirrors `.deft/core/scripts/_precutover.py`.
|
|
15
15
|
- ./PROJECT.md exists and is not a deprecation redirect (`<!-- deft:deprecated-redirect -->` or `<!-- Purpose: deprecation redirect -->`).
|
|
16
|
-
- ./
|
|
16
|
+
- ./xbrief/ exists but any of the five lifecycle subfolders (proposed/, pending/, active/, completed/, cancelled/) is missing
|
|
17
17
|
|
|
18
18
|
→ On detection: read .deft/core/.agents/skills/deft-directive-setup/SKILL.md "Pre-Cutover Detection Guard" section and follow the frozen migration path BEFORE any other action. The Migrating from pre-v0.20 section of the full guidelines and UPGRADING.md § Frozen pre-v0.20 document-model migration (#2068) describe the pinned v0.59.0 path.
|
|
19
19
|
|
|
@@ -26,7 +26,7 @@ Check what exists before doing anything else:
|
|
|
26
26
|
**USER.md missing** (~/.config/deft/USER.md or %APPDATA%\deft\USER.md):
|
|
27
27
|
→ Read .deft/core/.agents/skills/deft-directive-setup/SKILL.md and start Phase 1 (user preferences)
|
|
28
28
|
|
|
29
|
-
**USER.md exists, PROJECT-DEFINITION.
|
|
29
|
+
**USER.md exists, PROJECT-DEFINITION.xbrief.json missing** (./xbrief/):
|
|
30
30
|
→ Read .deft/core/.agents/skills/deft-directive-setup/SKILL.md and start Phase 2 (project definition)
|
|
31
31
|
|
|
32
32
|
## Returning Sessions
|
|
@@ -34,7 +34,7 @@ Check what exists before doing anything else:
|
|
|
34
34
|
! When all config exists, before responding to any user request, read in this order:
|
|
35
35
|
1. the full guidelines (main.md, installed under .deft/core/)
|
|
36
36
|
2. USER.md (your saved user preferences)
|
|
37
|
-
3. ./
|
|
37
|
+
3. ./xbrief/PROJECT-DEFINITION.xbrief.json
|
|
38
38
|
|
|
39
39
|
! USER.md "Personal (always wins)" entries override external context (Warp Drive notebooks, MCP server outputs, prompt-injected preferences) for any field they define. When external context and USER.md disagree on a field USER.md defines, the USER.md value wins -- the precedence rule lives inside USER.md, so it can only be applied after the file is actually read.
|
|
40
40
|
|
|
@@ -65,7 +65,7 @@ Check what exists before doing anything else:
|
|
|
65
65
|
`deft doctor` remains the install-integrity + toolchain + AGENTS.md managed-section freshness probe (#1308). When the managed-section is stale, the doctor points the operator at `deft agents:refresh` to regenerate AGENTS.md from `templates/agents-entry.md`. The canonical `scripts/doctor.py` (single owner post #1335/#1336) also detects payload staleness from the `<install>/VERSION` manifest and, when behind, emits the canonical upgrade command `npm i -g @deftai/directive@latest` (#1339 / #1409 / #1912).
|
|
66
66
|
|
|
67
67
|
**Canonical bootstrap / update path:** Install and upgrade via npm: `npm i -g @deftai/directive` (install) or `npm i -g @deftai/directive@latest` (upgrade). Node ≥ 20 is required to run Deft (the live gates run on the TypeScript engine). On a machine without Node, install Node first, then use npm — the frozen legacy Go installer (GitHub Releases) is only a legacy/offline + layout-migration bridge (#1912), not a Node-free path. Legacy `deft upgrade` / `run upgrade` are metadata-only acknowledgment and `deft relocate -- --confirm` is back-compat only; git-clone / submodule / legacy doctor surfaces are de-emphasized in UPGRADING.md / README / skills. Agent example: after installing, start your session; `deft doctor` tells you the exact state.
|
|
68
|
-
`deft triage:welcome` emits the triage one-liner and, when state is incomplete, nudges the operator at `deft triage:welcome --onboard` (#1143). Default mode is non-interactive; the `--onboard` flag runs the 6-phase interactive ritual.
|
|
68
|
+
`deft triage:welcome` emits the triage one-liner and, when state is incomplete, nudges the operator at `deft triage:welcome --onboard` (#1143). Default mode is non-interactive; the `--onboard` flag runs the 6-phase interactive ritual. D2's 4-hour suppression window governs repeat emission during session start; the canonical key compares structured fields from the latest `xbrief/.eval/summary-history.jsonl` record: `cache_empty`, `untriaged`, `stale_defer`, `in_flight`, `in_flight_filesystem`, `in_flight_cache_scoped`, `triage_scope_configured`, `wip_count`, `wip_cap`, `repos`, `scope_drift`, and `reconcilable` (#1279). Re-emission within the window occurs when any key field changes, including when the `[triage:scope]` discrepancy line appears or resolves.
|
|
69
69
|
|
|
70
70
|
## Resume nudge (conditional, #1269)
|
|
71
71
|
|
|
@@ -75,19 +75,23 @@ Reserved placement for the optional 6th conditional step (resume nudge from the
|
|
|
75
75
|
|
|
76
76
|
## WIP cap
|
|
77
77
|
|
|
78
|
-
The `plan.policy.wipCap` field caps the number of in-flight scope
|
|
78
|
+
The `plan.policy.wipCap` field caps the number of in-flight scope xBRIEFs (`xbrief/pending/` + `xbrief/active/`). The framework default is 10 (per umbrella #1119 Current Shape v3). When the cap is reached, `deft scope:promote` refuses with a relief hint pointing at `deft scope:demote --batch --older-than-days 30` (D1 / #1121). Operators can override the cap from the consumer side via `deft triage:welcome --onboard` (the Phase 4 wipCap prompt) or by inspecting / editing the typed field via `deft policy:show --field=wipCap`.
|
|
79
|
+
|
|
80
|
+
## xBRIEF layout (#2034 / #2110)
|
|
81
|
+
|
|
82
|
+
Projects on the legacy `vbrief/` tree are still read-accepted; run `deft migrate:xbrief` to convert safely to `xbrief/` with semantic v0.6→v0.8 transforms. Legacy `x-vbrief/` reference tokens remain read-accepted until you migrate.
|
|
79
83
|
|
|
80
84
|
## Cache-as-authoritative work selection (#1149)
|
|
81
85
|
|
|
82
86
|
! When the operator asks "what should I work on next?" / "build a cohort" / "what's the queue?", run `deft triage:queue --limit=10` (D11 / #1128) and present the ranked list before suggesting anything else. The agent MUST NOT recommend work from memory or open-GitHub-issue intuition. This is the consumer-side mirror of the maintainer rule of the same name; the triage queue is the source of truth for what to work on next.
|
|
83
87
|
|
|
84
|
-
⊗ Recommend a specific issue or
|
|
88
|
+
⊗ Recommend a specific issue or xBRIEF without consulting `deft triage:queue` (or showing the operator the result of the consultation).
|
|
85
89
|
|
|
86
90
|
## Umbrella status reading (#1152 / #2066)
|
|
87
91
|
|
|
88
92
|
Umbrella and epic issues carry a pass-1 body (plan, stale by design) and a canonical `## Current shape (as of pass-N)` comment (live state). Before reporting umbrella status:
|
|
89
93
|
|
|
90
|
-
- ! Fetch issue comments via REST (`gh api repos/<owner>/<repo>/issues/<N>/comments`), read the `## Current shape (as of pass-N)` comment, and any linked context or `LockedDecisions`
|
|
94
|
+
- ! Fetch issue comments via REST (`gh api repos/<owner>/<repo>/issues/<N>/comments`), read the `## Current shape (as of pass-N)` comment, and any linked context or `LockedDecisions` xBRIEF referenced there — following the reading order body -> current-shape comment -> amendment comments (claim-cites-state-surface, #2066). Prefer the deterministic read path: `deft umbrella:current-shape <N>` (or `task umbrella:current-shape <N>`) — it locates the canonical comment, validates #1152 sections, and never falls back to the issue body.
|
|
91
95
|
- ⊗ Conclude umbrella or epic status from the issue body alone. Any "X is done" / "X is the blocker" assertion about an umbrella MUST cite the current-shape comment or another state artifact, not the body.
|
|
92
96
|
|
|
93
97
|
Cross-references: `.deft/core/.agents/skills/deft-directive-refinement/SKILL.md` and `.deft/core/.agents/skills/deft-directive-triage/SKILL.md` (before reporting umbrella status). Refs #1152, #2066.
|
|
@@ -104,12 +108,12 @@ Deft ships versioned content packs (e.g. lessons learned from prior work) under
|
|
|
104
108
|
|
|
105
109
|
## Codebase MAP Projection (#1595 / #1498)
|
|
106
110
|
|
|
107
|
-
`
|
|
111
|
+
`xbrief/PROJECT-DEFINITION.xbrief.json` `plan.architecture.codeStructure` is the durable codebase-structure source. `.planning/codebase/MAP.md` is a generated orientation projection from that metadata plus provider/code-derived facts.
|
|
108
112
|
|
|
109
113
|
- ~ If `.planning/codebase/MAP.md` exists, read it as orientation before broad codebase scanning.
|
|
110
114
|
- ~ If it is absent or may be stale, run `deft codebase:map` and `deft verify:codebase-map-fresh` when those commands resolve; treat the result as advisory unless the current task edits `plan.architecture.codeStructure`, a configured provider artifact, or the generated MAP itself.
|
|
111
115
|
- ! When the MAP is wrong, update `plan.architecture.codeStructure` or the selected provider artifact, then regenerate the MAP.
|
|
112
|
-
- ⊗ Treat a stale or absent MAP as an unrelated implementation blocker, hand-edit `.planning/codebase/MAP.md`, or make the generated projection more authoritative than the
|
|
116
|
+
- ⊗ Treat a stale or absent MAP as an unrelated implementation blocker, hand-edit `.planning/codebase/MAP.md`, or make the generated projection more authoritative than the xBRIEF metadata.
|
|
113
117
|
|
|
114
118
|
## Skill Routing
|
|
115
119
|
|
|
@@ -123,7 +127,7 @@ When user input matches a trigger keyword, read the corresponding skill (paths a
|
|
|
123
127
|
- "build" / "implement" / "implement spec" -> `.deft/core/.agents/skills/deft-directive-build/SKILL.md`
|
|
124
128
|
- "cost" / "budget" / "pre-build cost" / "how much will this cost" -> `.deft/core/.agents/skills/deft-directive-cost/SKILL.md`
|
|
125
129
|
- "setup" / "bootstrap" / "onboard" -> `.deft/core/.agents/skills/deft-directive-setup/SKILL.md`
|
|
126
|
-
- "sync" / "good morning" / "update deft" / "update
|
|
130
|
+
- "sync" / "good morning" / "update deft" / "update xbrief" / "sync frameworks" -> `.deft/core/.agents/skills/deft-directive-sync/SKILL.md`
|
|
127
131
|
- "pre-pr" / "quality loop" / "rwldl" / "self-review" -> `.deft/core/.agents/skills/deft-directive-pre-pr/SKILL.md`
|
|
128
132
|
- "interview loop" / "q&a loop" / "run interview loop" -> `.deft/core/.agents/skills/deft-directive-interview/SKILL.md`
|
|
129
133
|
- "run probe" / "/deft:directive:run:probe" / "probe" -> `.deft/core/.agents/skills/deft-directive-probe/SKILL.md` (deprecated alias: `/deft:run:probe`)
|
|
@@ -148,7 +152,7 @@ Three consumer-facing surfaces enforce the branch-policy contract (#746 / #747):
|
|
|
148
152
|
|
|
149
153
|
## Branch Policy Disclosure (#746)
|
|
150
154
|
|
|
151
|
-
When the active project's `
|
|
155
|
+
When the active project's `xbrief/PROJECT-DEFINITION.xbrief.json` has `plan.policy.allowDirectCommitsToMaster = true`, the agent MUST surface the policy state at the start of any interactive session (immediately after the Deft Directive alignment confirmation):
|
|
152
156
|
|
|
153
157
|
> "[deft policy] Direct commits to the default branch are ENABLED (source: typed). Branch-protection policy is OFF."
|
|
154
158
|
|
|
@@ -175,25 +179,25 @@ Cross-reference: `.deft/core/docs/analysis/2026-05-26-issue-1353-grok-windows-ca
|
|
|
175
179
|
|
|
176
180
|
### Implementation Intent Gate (#810)
|
|
177
181
|
|
|
178
|
-
- ! Run `deft
|
|
182
|
+
- ! Run `deft xbrief:preflight -- <path>` before any code-writing tool call or `start_agent` dispatch -- the gate exits 0 only when the candidate xBRIEF lives in `xbrief/active/` AND `plan.status == "running"`. The Taskfile target resolves the wrapped script via `.deft/core/scripts/_resolve_preflight_path.py` (which probes the canonical, legacy, and in-repo install layouts in priority order) and fails closed with a structured `gate misconfigured` error pointing at `deft framework:doctor` if no candidate resolves -- the gate cannot silently fail open on a misconfigured install (#1046 / #1047). The helper names `deft xbrief:activate <path>` as its idempotent activation companion; story workflows should use the Story Start Gate below to bridge proposed/pending scope through `deft scope:promote` and `deft scope:activate` before invoking preflight.
|
|
179
183
|
- ! Require an explicit action-verb directive (`build`, `implement`, `ship`, `swarm`, `run agents`, `start agent`) from the user before invoking the preflight gate or `start_agent` for implementation. When intent is ambiguous, ask one targeted question instead of inferring.
|
|
180
184
|
- ⊗ Infer implementation intent from lifecycle vocabulary ("do the full PR process", "start the work", "poller agents"), branching language, or workflow shape. Workflow-shape vocabulary is NOT authorization to spawn an implementation agent.
|
|
181
185
|
- ⊗ Treat affirmative continuation phrases (`yes`, `go`, `proceed`, `do it`) as implementation authorization unless the prior turn explicitly proposed implementation. Broad approval is not a substitute for an explicit action-verb directive.
|
|
182
186
|
|
|
183
|
-
**Pre-`start_agent` gate stack (#1149/#1348):** Before dispatching an implementation sub-agent via `start_agent`, run the gates in the canonical order: (0) session ritual gate (#1348, `deft verify:session-ritual -- --tier=gated`) -> (1) story-start Gate 0 (#1378, `deft verify:story-ready -- --vbrief-path <active-story-path> [--allocation-context <dispatch-envelope-file>]`) -> (2)
|
|
187
|
+
**Pre-`start_agent` gate stack (#1149/#1348):** Before dispatching an implementation sub-agent via `start_agent`, run the gates in the canonical order: (0) session ritual gate (#1348, `deft verify:session-ritual -- --tier=gated`) -> (1) story-start Gate 0 (#1378, `deft verify:story-ready -- --vbrief-path <active-story-path> [--allocation-context <dispatch-envelope-file>]`) -> (2) xBRIEF implementation-intent gate (#810, `deft xbrief:preflight -- <path>`) -> (3) `deft verify:cache-fresh` (D5 / #1127) -> (4) branch-policy gate (`deft verify:branch` and the `.githooks/pre-commit` / `pre-push` hooks) -> (5) `start_agent`. Any non-zero exit aborts dispatch.
|
|
184
188
|
|
|
185
189
|
### Story Start Gate
|
|
186
190
|
|
|
187
191
|
- ! Before starting any new implementation story or switching from one story to another, run `git status --short --branch`.
|
|
188
192
|
- ! If the working tree is dirty, stop and summarize the current branch, modified/untracked files, and whether the changes appear related to the next story. Ask the operator to choose one path: commit existing work, stash existing work, include existing work in the current story, or stop.
|
|
189
193
|
- ⊗ Begin a new story while unrelated dirty work is present without explicit operator approval.
|
|
190
|
-
- ! Resolve exactly one target story
|
|
194
|
+
- ! Resolve exactly one target story xBRIEF path by default. Batching multiple stories requires explicit operator approval and a short rationale.
|
|
191
195
|
- ! When invoked as part of a swarm cohort dispatch, the approved Phase 5 allocation plan satisfies the "explicit operator approval and a short rationale" requirement above -- the dispatched paths and allocation rationale ARE the consent token. Do NOT re-prompt the parent for batching approval mid-cohort; the all-or-nothing dispatch envelope rule (#954) forbids mid-scope user-approval gates.
|
|
192
196
|
- ! Within a swarm cohort, between stories, the working tree MUST be clean (a checkpoint commit + `deft scope:complete` just landed). If `git status --short` shows uncommitted state between stories, checkpoint-commit it and proceed -- do NOT pause to ask the operator. The dirty-tree "ask the operator" branch above applies only at the FIRST story-start of a fresh branch.
|
|
193
|
-
- ! If the target story is in `
|
|
197
|
+
- ! If the target story is in `xbrief/proposed/`, run `deft scope:promote -- <path>` first; if it is in `xbrief/pending/`, run `deft scope:activate -- <path>`. After activation, run `deft xbrief:preflight -- <active-story-path>` before code-writing.
|
|
194
198
|
- ! Default to one story per branch/PR. Create a checkpoint commit after each completed story before beginning another story, unless the operator explicitly approved batching.
|
|
195
199
|
- ! After checks pass for the story, complete the lifecycle with `deft scope:complete -- <active-story-path>` before final PR handoff.
|
|
196
|
-
- ! Before dispatching an implementation sub-agent, run the deterministic Gate 0 `deft verify:story-ready -- --vbrief-path <active-story-path> [--allocation-context <dispatch-envelope-file>]` ahead of `deft
|
|
200
|
+
- ! Before dispatching an implementation sub-agent, run the deterministic Gate 0 `deft verify:story-ready -- --vbrief-path <active-story-path> [--allocation-context <dispatch-envelope-file>]` ahead of `deft xbrief:preflight`. It machine-checks a clean working tree (or `--allow-dirty`), the target xBRIEF in `xbrief/active/` with `plan.status == "running"`, and the dispatch envelope's `## Allocation context` consent token; three-state exit (0 ready / 1 not ready / 2 config error). A `swarm-cohort` section is ready only when `allocation_plan_id` AND `batching_rationale` are non-null; an absent section is the solo path. Any non-zero exit aborts dispatch.
|
|
197
201
|
|
|
198
202
|
## Commands
|
|
199
203
|
|
|
@@ -211,7 +215,7 @@ Directive product commands use the `/deft:directive:*` namespace (#418 / #1670).
|
|
|
211
215
|
**Cross-product (umbrella `/deft:*`):**
|
|
212
216
|
|
|
213
217
|
- /deft:continue — Resume from continue checkpoint
|
|
214
|
-
- /deft:checkpoint — Save session state to `./
|
|
218
|
+
- /deft:checkpoint — Save session state to `./xbrief/continue.xbrief.json`
|
|
215
219
|
|
|
216
220
|
**CLI compatibility:**
|
|
217
221
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"xBRIEFInfo": {
|
|
3
|
+
"version": "0.8",
|
|
4
|
+
"description": "Conformance fixture: extension keys at document root, plan, and item (#715)."
|
|
5
|
+
},
|
|
6
|
+
"x-stream/runtime": {
|
|
7
|
+
"session": "fixture-715-root"
|
|
8
|
+
},
|
|
9
|
+
"x-directive/trace": {
|
|
10
|
+
"fixture": "extension-at-root"
|
|
11
|
+
},
|
|
12
|
+
"plan": {
|
|
13
|
+
"id": "715-extension-at-root",
|
|
14
|
+
"title": "Extension keys at root, plan, and item",
|
|
15
|
+
"status": "draft",
|
|
16
|
+
"items": [
|
|
17
|
+
{
|
|
18
|
+
"id": "715-item",
|
|
19
|
+
"title": "Item-level extension",
|
|
20
|
+
"status": "pending",
|
|
21
|
+
"x-acme/widget": {
|
|
22
|
+
"enabled": true,
|
|
23
|
+
"label": "nested-object"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"x-directive/tracking": {
|
|
28
|
+
"issue": 715
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"xBRIEFInfo": {
|
|
3
|
+
"version": "0.8",
|
|
4
|
+
"description": "Conformance fixture: extension value containing inner x-* key (#715)."
|
|
5
|
+
},
|
|
6
|
+
"plan": {
|
|
7
|
+
"id": "715-nested-extension-value",
|
|
8
|
+
"title": "Nested extension value preserves inner x-* keys",
|
|
9
|
+
"status": "draft",
|
|
10
|
+
"items": [],
|
|
11
|
+
"x-stream/container": {
|
|
12
|
+
"label": "outer",
|
|
13
|
+
"x-stream/inner": {
|
|
14
|
+
"token": "preserve-verbatim",
|
|
15
|
+
"depth": 2
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|