@deftai/directive-content 0.76.0 → 0.78.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-directive-swarm/SKILL.md +998 -3
- package/Taskfile.yml +14 -1
- package/UPGRADING.md +26 -2
- package/commands.md +11 -1
- package/docs/agent-docs.md +4 -0
- package/docs/skill-pin-policy.md +77 -0
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +16 -8
- package/skills/deft-directive-build/SKILL.md +4 -0
- package/skills/deft-directive-pre-pr/SKILL.md +14 -0
- package/skills/deft-directive-review-cycle/SKILL.md +29 -4
- package/skills/deft-directive-setup/SKILL.md +5 -1
- package/skills/deft-directive-swarm/SKILL.md +9 -0
- package/skills/deft-directive-triage/SKILL.md +6 -1
- package/tasks/engine-invoke.cjs +116 -0
- package/tasks/engine.yml +38 -12
- package/tasks/eval.yml +9 -0
- package/tasks/plan-sequence.yml +47 -0
- package/tasks/ts-build-fresh.cjs +99 -0
- package/tasks/verify.yml +20 -0
- package/templates/agent-prompt-preamble.md +83 -2
- package/templates/agents-entry.md +25 -30
- package/tools/package-manager-network.md +2 -2
|
@@ -49,6 +49,28 @@ Worked example (a swarm-cohort member):
|
|
|
49
49
|
|
|
50
50
|
A `solo` dispatch sets `dispatch_kind: solo`, MAY leave `allocation_plan_id` / `batching_rationale` null, and lists only its own xBRIEF in `cohort_vbriefs`; such a section does NOT by itself satisfy the consent token, so the Story Start Gate falls through to the #1371 prose carve-out for a lone interactive dispatch.
|
|
51
51
|
|
|
52
|
+
## 2.55 Ordered-plan continuation boundary (#2402)
|
|
53
|
+
|
|
54
|
+
When the operator supplies an ordered plan (delivery sequence, cohort, checklist, review batch, or phase list), continuation language is bounded by that sequence — not by the triage queue, skill chaining, or adjacent backlog memory.
|
|
55
|
+
|
|
56
|
+
! Record the active sequence with `task plan-sequence:set -- --file <json>` (persists `.deft/plan-sequence.json`). Inspect with `task plan-sequence:current`; advance with `task plan-sequence:advance`; clear with `task plan-sequence:clear`.
|
|
57
|
+
|
|
58
|
+
! Before creating or dispatching a new external work unit (PR, branch, story activation, sub-agent implementation task), when a sequence is active run `task verify:plan-sequence -- --target-kind <kind> --target <id-or-title>`. Exit non-zero means fail closed.
|
|
59
|
+
|
|
60
|
+
! "next" / "what's next?" / "proceed" / "resume" / "move on" means **exactly one** next unit in the **narrowest active** ordered sequence. Unit type is inherited from that sequence.
|
|
61
|
+
|
|
62
|
+
! When the sequence is exhausted (`continuation_past_final` defaults false), stop and ask. Do not open PR 3 after an approved two-PR plan. Do not consult `task triage:queue`, open-issue intuition, or skill-chaining instructions to invent the next unit.
|
|
63
|
+
|
|
64
|
+
! Explicit queue/backlog asks ("what's the queue?", "build a cohort") remain queue-driven even mid-plan. Bare "what's next?" is **not** such an ask while a sequence is active.
|
|
65
|
+
|
|
66
|
+
! Skill-exit chaining instructions are advisory entrypoints only — they do not authorize adjacent work unless it matches the current ordered-plan entry or a fresh operator directive.
|
|
67
|
+
|
|
68
|
+
! Review-cycle exit returns to the ordered-plan context and authorizes at most the next sequence entry (after `plan-sequence:advance` for the completed PR). Cohort/build flows stop after the final approved entry.
|
|
69
|
+
|
|
70
|
+
⊗ Reuse triage queue `continuationNumbers` / `continuationOrder` for ordered-plan state — those fields are for `[RESUME]` / stale-defer ordering only.
|
|
71
|
+
|
|
72
|
+
⊗ Treat affirmative continuation ("yes", "proceed") as permission to widen past the approved sequence.
|
|
73
|
+
|
|
52
74
|
## 2.6 Provider-neutral worker metadata (#1531)
|
|
53
75
|
|
|
54
76
|
Heterogeneous swarm dispatch (#1531) assigns each worker a **dispatch provider** (the runtime primitive that launched the agent), a **worker role** (what the agent is allowed to do), and a **selected backend** or **routing policy** (how the harness maps that role to a concrete agent). These fields are provider-neutral: Composer-class coding agents, Grok Build (`spawn_subagent`), Cursor/cloud agents, and future adapters share the same contract.
|
|
@@ -189,6 +211,18 @@ PYTEST_ADDOPTS="--basetemp=$(mktemp -d)/pt" task check
|
|
|
189
211
|
|
|
190
212
|
A clean result under an isolated basetemp is attributable to your change, not to the ambient shared-`/tmp` race. Do NOT point `--basetemp` at a static path shared across workers -- that re-introduces the collision. Solo / single-run invocations on a private worktree do not require this, but it is harmless to apply unconditionally.
|
|
191
213
|
|
|
214
|
+
## 3.8 Windows Cursor Task-tool console storm (#2563)
|
|
215
|
+
|
|
216
|
+
On Windows, Cursor Task-tool local subagents can open a visible `cmd.exe` / `conhost` window per shell turn. Framework source checkouts amplify this: many `task <verb>` calls run `engine:_ts-build` → `pnpm`/`tsc` via `shell: true`. Parallel (and even serial) Task agents have frozen the maintainer host; completing the same stories in-parent (no Task subagent) stayed stable.
|
|
217
|
+
|
|
218
|
+
**Directive rule for orchestrators on Windows:**
|
|
219
|
+
|
|
220
|
+
- ! Prefer in-parent implementation or cloud workers for Cursor Task cohorts until the branch under test includes the #2563 mitigations (`windowsHide` on engine spawns + warm-dist skip via `tasks/ts-build-fresh.cjs`).
|
|
221
|
+
- ! When local Task agents are required, keep concurrency at **1**, reuse a warm `packages/cli/dist/bin.js` (set `DEFT_SKIP_TS_BUILD=1` only when dist is known current), and avoid spawning nested Task agents from workers.
|
|
222
|
+
- ⊗ Launch a multi-agent local Cursor Task swarm on Windows that multiplies cold `task` rebuilds without operator acceptance of host-freeze risk.
|
|
223
|
+
|
|
224
|
+
Reference: issue #2563; swarm skill Platform Requirements; env scrub + stdio inherit for nested Task recursion (#2554 / #2438) are necessary but not sufficient alone.
|
|
225
|
+
|
|
192
226
|
## 4. pre-pr and review-cycle skills
|
|
193
227
|
|
|
194
228
|
Before pushing any branch:
|
|
@@ -203,8 +237,55 @@ Anti-pattern: pushing without pre-pr and relying on Greptile to find issues. Tha
|
|
|
203
237
|
The active host harness may expose its own review-labeled surfaces. On Cursor these are the `bugbot` and `security-review` Task **subagent types** and the `review-bugbot` / `review-security` **skills**; other harnesses may ship equivalents. A generic operator request to "review" / "get this reviewed" / "use sub-agents for reviews" must NOT be routed to those host-native tools as the review of record.
|
|
204
238
|
|
|
205
239
|
- ! Route ALL review work through the canonical `skills/deft-directive-review-cycle/SKILL.md` surface. Map a generic review request to the review cycle **by intent**, not by literal keyword -- "review this", "get this reviewed", and "use sub-agents for reviews" all mean run `deft-directive-review-cycle` (extends the #1862 / #2261 intent-routing fix).
|
|
206
|
-
-
|
|
207
|
-
-
|
|
240
|
+
- ! Map **PR shepherding intent** the same way: `babysit`, `babysit this PR`, `shepherd`, `watch the PR`, and the Cursor product action **babysit-pull-request-in-cloud** all mean run `deft-directive-review-cycle` on Deft-managed repos (`.deft/core/` installed) -- NOT the Cursor-global `babysit` skill (`~/.cursor/skills-cursor/babysit/SKILL.md`) (#2261).
|
|
241
|
+
- ~ Host review tools (Cursor `babysit` / `bugbot` / `security-review` subagent types, `review-bugbot` / `review-security` skills, or any future host equivalent) MAY be folded in as *advisory* finding sources INSIDE the review cycle -- the #2019 harness-aware-reviewer path -- with their findings batched alongside the Greptile / bot findings the cycle already processes.
|
|
242
|
+
- ⊗ Substitute a host-native review subagent type, Cursor global `babysit`, or `review-*` skill for `deft-directive-review-cycle` as the review surface. The host tools are advisory inputs folded into the cycle, never a replacement for it. Reaching for them on a bare "review" or "babysit" request is the #1862 / #2261 wrong-review-surface class (see also #2019, #2018).
|
|
243
|
+
|
|
244
|
+
## 4.6 Cloud PR-shepherd dispatch -- review-monitor worked example (#2261)
|
|
245
|
+
|
|
246
|
+
When an operator triggers **babysit-pull-request-in-cloud** (or equivalent PR-shepherding intent) on a Deft-managed repo, the orchestrator MUST dispatch a **review-monitor** worker with this preamble (or a reference to `templates/agent-prompt-preamble.md`) and an explicit mandate to read `skills/deft-directive-review-cycle/SKILL.md` before any PR mutation.
|
|
247
|
+
|
|
248
|
+
Worked example (cloud background review-monitor on PR #1037):
|
|
249
|
+
|
|
250
|
+
```markdown
|
|
251
|
+
## Allocation context
|
|
252
|
+
|
|
253
|
+
- dispatch_kind: solo
|
|
254
|
+
- allocation_plan_id: null
|
|
255
|
+
- batching_rationale: null
|
|
256
|
+
- cohort_vbriefs: []
|
|
257
|
+
- operator_approval_evidence: operator selected babysit-pull-request-in-cloud 2026-07-03
|
|
258
|
+
|
|
259
|
+
## Worker metadata
|
|
260
|
+
|
|
261
|
+
- dispatch_provider: cursor-cloud-agent
|
|
262
|
+
- worker_role: review-monitor
|
|
263
|
+
- selected_backend: cursor-cloud
|
|
264
|
+
- routing_policy: null
|
|
265
|
+
- resolved_model: null
|
|
266
|
+
- model_source: harness-default explicit
|
|
267
|
+
|
|
268
|
+
## Runtime and GitHub auth mode
|
|
269
|
+
|
|
270
|
+
- runtime_mode: cloud-headless
|
|
271
|
+
- github_auth_mode: injected-token
|
|
272
|
+
|
|
273
|
+
## Unit of work
|
|
274
|
+
|
|
275
|
+
drive-to: merge-ready on PR #1037 (repo: deftai/deftvisage, branch: fix/visage-repo-org-scoping)
|
|
276
|
+
|
|
277
|
+
## Mandates
|
|
278
|
+
|
|
279
|
+
1. First tool call: read AGENTS.md; confirm Deft alignment.
|
|
280
|
+
2. Read `templates/agent-prompt-preamble.md` (binding) and `skills/deft-directive-review-cycle/SKILL.md` end-to-end -- NOT `~/.cursor/skills-cursor/babysit/SKILL.md`.
|
|
281
|
+
3. Run review-cycle Phase 1 process audit before the fix loop; batch Phase 1 + Phase 2 fixes per review-cycle discipline.
|
|
282
|
+
4. Poll terminal verdict via `task pr:watch -- <N>` when waiting on Greptile/SLizard (#1056).
|
|
283
|
+
5. Exit only on review-cycle Step 6 fail-closed all-of (#1259) -- ad hoc SLizard P2 fixes without the exit predicate are insufficient.
|
|
284
|
+
|
|
285
|
+
DONE: include PR URL, role review-monitor, and whether Step 6 CLEAN was reached.
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Anti-pattern: dispatching `Task(environment=cloud)` with only the Cursor global babysit skill attached and no preamble / `deft-directive-review-cycle` path -- that is the #2261 recurrence class.
|
|
208
289
|
|
|
209
290
|
## 5. REST-by-default for read-only gh calls
|
|
210
291
|
|
|
@@ -7,16 +7,7 @@ Deft is installed in .deft/core/. Full guidelines: .deft/core/main.md
|
|
|
7
7
|
|
|
8
8
|
## Session routing (#2176)
|
|
9
9
|
|
|
10
|
-
! **Read-only default** until mutation intent
|
|
11
|
-
|
|
12
|
-
**Bootstrap card** (before answering):
|
|
13
|
-
- `deft` / `directive` won't run → README.md § Cold-start bootstrap (#2273); ⊗ never `.deft/core/`
|
|
14
|
-
- Pre-cutover artifacts → `.deft/core/.agents/skills/deft-directive-setup/SKILL.md` § Pre-Cutover Detection Guard (#2068)
|
|
15
|
-
- USER.md missing → setup SKILL Phase 1; `xbrief/PROJECT-DEFINITION.xbrief.json` missing → setup SKILL Phase 2 (#1813); ⊗ respond before phase completes
|
|
16
|
-
- Config complete → read main.md → USER.md → PROJECT-DEFINITION (USER.md wins on conflicts); ~ `deft-directive-sync` on return
|
|
17
|
-
|
|
18
|
-
**Mutation boundary:** code-writing, scope lifecycle, `start_agent`, commits, push, or release → `deft session:start` then `deft verify:session-ritual -- --tier=gated` per `.deft/core/commands.md` § Session-start ritual (#1149).
|
|
19
|
-
- ? `deft session:start -- --read-only` — alignment only, no ritual-state (#2176)
|
|
10
|
+
! **Read-only default** until mutation intent: load AGENTS.md / main.md / USER.md / `xbrief/PROJECT-DEFINITION.xbrief.json`; resolve USER.md via `deft session:start` (`USER.md resolved …`; win32 `%APPDATA%\deft\USER.md`; unix `~/.config/deft/USER.md`; ⊗ invent `~/.config/deft` on Windows #2544); confirm Deft alignment + addressing-name; ⊗ no mutable `deft session:start` / triage welcome / sync / branch-policy unless asked or implementation-ready (#2176) — `.deft/core/commands.md` § Session routing. Bootstrap: cold-start → README § Cold-start (#2273) ⊗ never `.deft/core/`; pre-cutover → setup Pre-Cutover (#2068); missing USER.md / PROJECT-DEFINITION → setup Phase 1/2 (#1813) ⊗ before answering; else main → USER → PROJECT-DEFINITION; ~ sync. Mutation → `deft session:start` then `deft verify:session-ritual -- --tier=gated` (#1149). ? `deft session:start -- --read-only` (#2176).
|
|
20
11
|
|
|
21
12
|
## Session-start ritual (#1149)
|
|
22
13
|
|
|
@@ -24,11 +15,11 @@ Deft is installed in .deft/core/. Full guidelines: .deft/core/main.md
|
|
|
24
15
|
|
|
25
16
|
## WIP cap
|
|
26
17
|
|
|
27
|
-
! Respect `plan.policy.wipCap` (default 20) — at cap `deft scope:promote` refuses; relief via `deft scope:demote --batch --older-than-days 30` (#2319 / #1121). Full WIP
|
|
18
|
+
! Respect `plan.policy.wipCap` (default 20) — at cap `deft scope:promote` refuses; relief via `deft scope:demote --batch --older-than-days 30` (#2319 / #1121). Full WIP: `.deft/core/.agents/skills/deft-directive-swarm/SKILL.md`.
|
|
28
19
|
|
|
29
20
|
## xBRIEF layout (#2034 / #2110)
|
|
30
21
|
|
|
31
|
-
|
|
22
|
+
Legacy `vbrief/` read-accepted; `deft migrate:xbrief` for `xbrief/` (v0.6→v0.8). `x-vbrief/` tokens read-accepted until migrated.
|
|
32
23
|
|
|
33
24
|
## Unmanaged project header (#2065)
|
|
34
25
|
|
|
@@ -36,9 +27,9 @@ Projects on legacy `vbrief/` still read-accepted; run `deft migrate:xbrief` for
|
|
|
36
27
|
|
|
37
28
|
## Cache-as-authoritative work selection (#1149)
|
|
38
29
|
|
|
39
|
-
! "what next?"
|
|
30
|
+
! "what next?" → ordered-plan first (#2402 / `deft plan-sequence:*`); else `deft triage:queue --limit=10` (D11) — `commands.md` § Backlog Triage.
|
|
40
31
|
|
|
41
|
-
⊗ Recommend
|
|
32
|
+
⊗ Recommend work without queue/plan consult; ⊗ widen past an exhausted plan.
|
|
42
33
|
|
|
43
34
|
## Umbrella status reading (#1152 / #2066)
|
|
44
35
|
|
|
@@ -48,61 +39,65 @@ Projects on legacy `vbrief/` still read-accepted; run `deft migrate:xbrief` for
|
|
|
48
39
|
|
|
49
40
|
## Deterministic questions runtime obligation (#1470)
|
|
50
41
|
|
|
51
|
-
!
|
|
42
|
+
! Structured questions MUST end with `Discuss` and `Back` — `.deft/core/contracts/deterministic-questions.md` (#1470 / #767).
|
|
52
43
|
|
|
53
44
|
## Issue body→comments reading (#2143)
|
|
54
45
|
|
|
55
|
-
! Fetch body + `issues/<N>/comments` via REST before requirements or dispatch — `.deft/core/templates/agent-prompt-preamble.md` § 5.6 / `deft issue:ingest` (#2143).
|
|
56
|
-
|
|
57
|
-
⊗ Build a dispatch envelope from the issue body alone when the issue has comments.
|
|
46
|
+
! Fetch body + `issues/<N>/comments` via REST before requirements or dispatch — `.deft/core/templates/agent-prompt-preamble.md` § 5.6 / `deft issue:ingest` (#2143). ⊗ Build a dispatch envelope from the issue body alone when the issue has comments.
|
|
58
47
|
|
|
59
48
|
## Content packs
|
|
60
49
|
|
|
61
|
-
! Before improvising
|
|
50
|
+
! Before improvising: `deft packs:slice --list-packs`, then `deft packs:slice <pack> --list` / `deft packs:slice <pack> <slice>` — `commands.md` (§ packs); never enumerate names here.
|
|
62
51
|
|
|
63
52
|
## Codebase MAP Projection (#1595 / #1498)
|
|
64
53
|
|
|
65
|
-
! `plan.architecture.codeStructure` is durable SoT; `.planning/codebase/MAP.md` is generated
|
|
54
|
+
! `plan.architecture.codeStructure` is durable SoT; `.planning/codebase/MAP.md` is generated — `deft codebase:map` / `deft verify:codebase-map-fresh` (`commands.md`). ⊗ Do not hand-edit MAP, block on stale/absent MAP, or elevate projection above xBRIEF (#1595 / #1498).
|
|
66
55
|
|
|
67
56
|
## Skills
|
|
68
57
|
|
|
69
|
-
!
|
|
58
|
+
! **Skills Index** (Level-0) in `.deft/core/REFERENCES.md` — scan before improvising; read `SKILL.md` only on index match. `welcome` / `onboard triage` → `deft triage:welcome --onboard` (N3 / #1143); lessons → packs:slice.
|
|
59
|
+
|
|
60
|
+
## Skill pin policy (#2508)
|
|
61
|
+
|
|
62
|
+
! Process-critical skills with false-negative risk MUST be named in AGENTS.md (always-pin tier) — tier definitions: `.deft/core/docs/skill-pin-policy.md` (#2508).
|
|
63
|
+
! **Default always-pins:** `deft-directive-build`, `deft-directive-pre-pr`, `deft-directive-review-cycle`, `deft-directive-swarm` — read each `SKILL.md` when that work type starts.
|
|
64
|
+
⊗ Pin entire language packs, deployment docs, or framework bulk into AGENTS.md — pins are for false-negative-sensitive process gates only (#2508).
|
|
70
65
|
|
|
71
66
|
## Review-surface precedence (#2308)
|
|
72
67
|
|
|
73
|
-
! Route review work through `deft-directive-review-cycle` — `.deft/core/.agents/skills/deft-directive-review-cycle/SKILL.md`; host
|
|
68
|
+
! Route PR shepherding / review work through `deft-directive-review-cycle` — `.deft/core/.agents/skills/deft-directive-review-cycle/SKILL.md`; host `babysit` / `bugbot` / `security-review` advisory-only (#2308 / #2261).
|
|
74
69
|
|
|
75
70
|
## Value feedback and attribution (#1709)
|
|
76
71
|
|
|
77
|
-
! `plan.policy.valueFeedback.enabled` defaults OFF —
|
|
72
|
+
! `plan.policy.valueFeedback.enabled` defaults OFF — `deft policy:show --field=valueFeedback` / `deft policy:enable-value-feedback -- --confirm`; `deft value:show`; `deft feedback:file`; `.deft/core/.agents/skills/deft-directive-feedback/SKILL.md` (#1709).
|
|
78
73
|
|
|
79
74
|
## Eval and framework health (#1703)
|
|
80
75
|
|
|
81
|
-
!
|
|
76
|
+
! `deft eval:health` when orienting or after gate/policy changes (Tier 0; 4-hour debounce). Release: `deft eval:run` / `deft eval:report`; skill routing: `deft eval:triggers` (#1586 / #1703).
|
|
82
77
|
|
|
83
78
|
## Branch policy & branch verification
|
|
84
79
|
|
|
85
|
-
!
|
|
80
|
+
! Feature branches — `deft verify:branch`, `deft verify:forward-coverage`, hooks, `deft check` (#746 / #747) — `.deft/core/scm/github.md` § Branch policy.
|
|
86
81
|
|
|
87
82
|
## Branch Policy Disclosure (#746)
|
|
88
83
|
|
|
89
|
-
! When `plan.policy.allowDirectCommitsToMaster = true`, surface
|
|
84
|
+
! When `plan.policy.allowDirectCommitsToMaster = true`, surface via `deft policy:show --field=allowDirectCommitsToMaster` (#746) — `.deft/core/scm/github.md` § Branch policy.
|
|
90
85
|
|
|
91
86
|
## Contextual guardrails (runtime-detect lazy-load)
|
|
92
87
|
|
|
93
|
-
! Lazy-load `.deft/core/scm/github.md`
|
|
88
|
+
! Lazy-load `.deft/core/scm/github.md` before risky ops (#2157 / #2369): PowerShell → `deft verify:encoding` (#798); TS capture (#1366); cascade → `deft pr:wait-mergeable-and-merge` (#1369); SCM → `deft verify:scm-boundary` (#884).
|
|
94
89
|
|
|
95
90
|
## Development Process
|
|
96
91
|
|
|
97
92
|
### Implementation Intent Gate (#810)
|
|
98
93
|
|
|
99
|
-
! `deft xbrief:preflight -- <path>` on `xbrief/active/` before code-writing; action-verb
|
|
94
|
+
! `deft xbrief:preflight -- <path>` on `xbrief/active/` before code-writing; action-verb (`build`, `implement`, `ship`, `swarm`, `run agents`, `start agent`) (#810) — `commands.md` § Scope xBRIEF Lifecycle.
|
|
100
95
|
|
|
101
96
|
### Story Start Gate
|
|
102
97
|
|
|
103
|
-
! `git status --short --branch` + `deft verify:story-ready`;
|
|
98
|
+
! `git status --short --branch` + `deft verify:story-ready`; `deft scope:promote -- <path>` / `deft scope:activate -- <path>` / `deft scope:complete -- <active-story-path>` (#1378) — `commands.md` § Scope xBRIEF Lifecycle.
|
|
104
99
|
|
|
105
100
|
## Commands
|
|
106
101
|
|
|
107
|
-
!
|
|
102
|
+
! `/deft:directive:*` namespace (#418 / #1670); full table in `.deft/core/commands.md` — load on demand.
|
|
108
103
|
<!-- /deft:managed-section -->
|
|
@@ -13,8 +13,8 @@ Directive runs against arbitrary repositories, including private monorepos with
|
|
|
13
13
|
## Rules
|
|
14
14
|
|
|
15
15
|
- ! Read-only, session-start, and session-ritual flows (`deft session:start`, `deft verify:session-ritual`, `deft verify:tools`) MUST perform no npm/pnpm registry access. Tool-presence probes MUST use PATH lookups (`which`/`accessSync`) or `--version` checks, never a subcommand that can resolve dependencies or query a registry.
|
|
16
|
-
- ! `deft doctor` MUST default to an OFFLINE tier: no check in the default run may contact an npm/pnpm registry. The one check that can (`payload-staleness`, which
|
|
17
|
-
- ! Before a network-gated check runs, `deft doctor --network` MUST print a disclosure line naming the tool and registry class it may contact (
|
|
16
|
+
- ! `deft doctor` MUST default to an OFFLINE tier: no check in the default run may contact an npm/pnpm registry. The one check that can (`payload-staleness`, which uses `git ls-remote` to verify the installed pin and `npm view <package> version` to compare a release-tag install with the latest stable package) is gated behind the explicit `--network` flag and is skipped by default with a pointer to that flag.
|
|
17
|
+
- ! Before a network-gated check runs, `deft doctor --network` MUST print a disclosure line naming the tool and registry class it may contact (for example, "may contact your git remote and the npm registry") BEFORE any network call is attempted.
|
|
18
18
|
- ! Any future doctor check, session step, or read-only command that needs to invoke `npm`/`pnpm` in a way that can reach a registry MUST follow the same pattern: explicit flag or subcommand, disclosed registry class before the call, and offline by default.
|
|
19
19
|
- ~ Where a package-manager operation is unavoidable in an explicitly-invoked flow (e.g. a release or install workflow that legitimately needs to fetch packages), prefer offline/frozen modes (`--offline`, `--prefer-offline`, `--frozen-lockfile`) when the operation only needs to validate local state rather than resolve fresh metadata.
|
|
20
20
|
- ⊗ MUST NOT invoke `npm`/`pnpm` subcommands that can contact a registry from any code path reachable by `session:start`, `verify:session-ritual`, `verify:tools`, or the default `deft doctor` invocation.
|