@deftai/directive-runtime 0.126.0-beta.1 → 0.126.0-beta.2
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/contracts/human-origin-authz.md +14 -8
- package/dist/coverage-hotspots.d.ts +3 -0
- package/dist/coverage-hotspots.js +42 -2
- package/dist/occupancy-release.d.ts +5 -0
- package/dist/occupancy-release.js +11 -3
- package/dist/policy.d.ts +2 -0
- package/dist/policy.js +6 -0
- package/dist/triage-actions.js +10 -2
- package/docs/framework-gap-filing.md +85 -0
- package/docs/product-signal.md +1 -1
- package/package.json +1 -1
- package/packs/skills/skills-pack-0.1.json +6 -3
- package/scm/github.md +1 -1
- package/skills/deft-directive-feedback/SKILL.md +19 -14
- package/skills/deft-directive-product-signal/SKILL.md +1 -1
- package/vendor/directive-content/contracts/human-origin-authz.md +14 -8
- package/vendor/directive-content/docs/framework-gap-filing.md +85 -0
- package/vendor/directive-content/docs/product-signal.md +1 -1
- package/vendor/directive-content/packs/skills/skills-pack-0.1.json +6 -3
- package/vendor/directive-content/scm/github.md +1 -1
- package/vendor/directive-content/skills/deft-directive-feedback/SKILL.md +19 -14
- package/vendor/directive-content/skills/deft-directive-product-signal/SKILL.md +1 -1
- package/vendor/directive-core/dist/.tsbuildinfo +1 -1
- package/vendor/directive-core/dist/coverage-applicability/evaluate.d.ts.map +1 -1
- package/vendor/directive-core/dist/coverage-applicability/evaluate.js +39 -0
- package/vendor/directive-core/dist/coverage-applicability/evaluate.js.map +1 -1
- package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts +24 -5
- package/vendor/directive-core/dist/coverage-hotspots/evaluate.d.ts.map +1 -1
- package/vendor/directive-core/dist/coverage-hotspots/evaluate.js +89 -8
- package/vendor/directive-core/dist/coverage-hotspots/evaluate.js.map +1 -1
- package/vendor/directive-core/dist/hooks/dispatcher.d.ts.map +1 -1
- package/vendor/directive-core/dist/hooks/dispatcher.js +10 -2
- package/vendor/directive-core/dist/hooks/dispatcher.js.map +1 -1
- package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.d.ts.map +1 -1
- package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.js +15 -0
- package/vendor/directive-core/dist/init-deposit/skill-discovery-deposit.js.map +1 -1
- package/vendor/directive-core/dist/intake/issue-ingest.d.ts +13 -0
- package/vendor/directive-core/dist/intake/issue-ingest.d.ts.map +1 -1
- package/vendor/directive-core/dist/intake/issue-ingest.js +164 -21
- package/vendor/directive-core/dist/intake/issue-ingest.js.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/controller.d.ts.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/controller.js +118 -12
- package/vendor/directive-core/dist/pre-pr-controller/controller.js.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/index.d.ts +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/index.d.ts.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/index.js +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/index.js.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts +5 -0
- package/vendor/directive-core/dist/pre-pr-controller/phases.d.ts.map +1 -1
- package/vendor/directive-core/dist/pre-pr-controller/phases.js +10 -0
- package/vendor/directive-core/dist/pre-pr-controller/phases.js.map +1 -1
- package/vendor/directive-core/dist/scope/promote-from-issue.d.ts +2 -1
- package/vendor/directive-core/dist/scope/promote-from-issue.d.ts.map +1 -1
- package/vendor/directive-core/dist/scope/promote-from-issue.js +17 -61
- package/vendor/directive-core/dist/scope/promote-from-issue.js.map +1 -1
- package/vendor/directive-core/dist/session/occupancy-recovery.d.ts +10 -0
- package/vendor/directive-core/dist/session/occupancy-recovery.d.ts.map +1 -1
- package/vendor/directive-core/dist/session/occupancy-recovery.js +43 -7
- package/vendor/directive-core/dist/session/occupancy-recovery.js.map +1 -1
- package/vendor/directive-core/dist/session/occupancy.d.ts +47 -1
- package/vendor/directive-core/dist/session/occupancy.d.ts.map +1 -1
- package/vendor/directive-core/dist/session/occupancy.js +240 -33
- package/vendor/directive-core/dist/session/occupancy.js.map +1 -1
- package/vendor/directive-core/dist/session/session-start.d.ts.map +1 -1
- package/vendor/directive-core/dist/session/session-start.js +6 -1
- package/vendor/directive-core/dist/session/session-start.js.map +1 -1
- package/vendor/directive-core/dist/triage/actions/index.d.ts +8 -5
- package/vendor/directive-core/dist/triage/actions/index.d.ts.map +1 -1
- package/vendor/directive-core/dist/triage/actions/index.js +248 -22
- package/vendor/directive-core/dist/triage/actions/index.js.map +1 -1
- package/vendor/directive-core/dist/triage/actions/types.d.ts +16 -2
- package/vendor/directive-core/dist/triage/actions/types.d.ts.map +1 -1
- package/vendor/directive-core/dist/triage/bulk/index.d.ts +8 -1
- package/vendor/directive-core/dist/triage/bulk/index.d.ts.map +1 -1
- package/vendor/directive-core/dist/triage/bulk/index.js +30 -11
- package/vendor/directive-core/dist/triage/bulk/index.js.map +1 -1
- package/vendor/directive-core/dist/value/feedback-file.d.ts +5 -0
- package/vendor/directive-core/dist/value/feedback-file.d.ts.map +1 -1
- package/vendor/directive-core/dist/value/feedback-file.js +26 -4
- package/vendor/directive-core/dist/value/feedback-file.js.map +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Framework-gap filing (consumer → deftai/directive)
|
|
2
|
+
|
|
3
|
+
Durable house style for consumer framework-gap issues filed against
|
|
4
|
+
`deftai/directive`. Mirrors the shipped builders `buildFrameworkGapTitle` and
|
|
5
|
+
`buildFrameworkGapBody` in the value-feedback engine. This document is
|
|
6
|
+
**gate-free**: agents may read it while `plan.policy.valueFeedback.upstreamPrompt`
|
|
7
|
+
is OFF.
|
|
8
|
+
|
|
9
|
+
Primary command: `deft feedback:file` (optional Taskfile wrapper when
|
|
10
|
+
go-task is installed). Skill: `deft-directive-feedback`.
|
|
11
|
+
|
|
12
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
13
|
+
|
|
14
|
+
## Title
|
|
15
|
+
|
|
16
|
+
- ! Prefix with `[framework-gap]` (the builder adds it when missing).
|
|
17
|
+
- ! Consumer hard-stop classification uses the sole title token `BLOCKER`
|
|
18
|
+
(`--blocker`). Example: `[framework-gap] BLOCKER Missing decompose hint`.
|
|
19
|
+
- ⊗ Invent other title classifications. Label-only classes stay labels.
|
|
20
|
+
- ⊗ Treat absence of `BLOCKER` as "not a blocker" — absence means not classified.
|
|
21
|
+
|
|
22
|
+
## Body sections
|
|
23
|
+
|
|
24
|
+
The builder emits this shape (placeholders when a field is omitted):
|
|
25
|
+
|
|
26
|
+
1. `## Summary` — one-line sanitized summary
|
|
27
|
+
2. `## Context`
|
|
28
|
+
3. `## Expected behavior`
|
|
29
|
+
4. `## Actual behavior / gap`
|
|
30
|
+
5. `## Session notes`
|
|
31
|
+
6. When `--blocker`: `## Adoption impact` with affected flow/version,
|
|
32
|
+
documented alternatives, observed recovery cost, and a triage owner/date
|
|
33
|
+
placeholder for a privileged actor
|
|
34
|
+
7. Footer separator + `_Filed via \`deft feedback:file\` … (Refs #1709 …)_`
|
|
35
|
+
|
|
36
|
+
Free-text fields fence line-leading `#` and `---` (indent) so operator paste
|
|
37
|
+
cannot break the markdown skeleton.
|
|
38
|
+
|
|
39
|
+
## Labels at create
|
|
40
|
+
|
|
41
|
+
- ! Pass an **empty** label list at issue create. Consumers generally lack
|
|
42
|
+
push access to set labels.
|
|
43
|
+
- ! Maintainer triage applies labels afterward from the maintainer catalog
|
|
44
|
+
(`.github/ISSUE_LABELS.md`) and `content/scm/github.md`.
|
|
45
|
+
- ~ `docs/consumer-issue-label-kit.md` is contrast only for consumer-kit
|
|
46
|
+
repos — not the privileged upstream `adoption-blocker` SoT.
|
|
47
|
+
- ⊗ Cite the consumer label kit as authority for upstream
|
|
48
|
+
`adoption-blocker`.
|
|
49
|
+
|
|
50
|
+
## Privileged `adoption-blocker`
|
|
51
|
+
|
|
52
|
+
- ! `adoption-blocker` is a **privileged write** after the body-evidence test
|
|
53
|
+
in `content/scm/github.md` § Consumer hard-blocker.
|
|
54
|
+
- ! The `BLOCKER` title token is an inbound flare only; it never writes the
|
|
55
|
+
ranking label.
|
|
56
|
+
- ⊗ Auto-apply or request `adoption-blocker` from a consumer-authored title alone.
|
|
57
|
+
|
|
58
|
+
## Dedup
|
|
59
|
+
|
|
60
|
+
- ! Normalize titles by stripping `[framework-gap]` and optional `BLOCKER`
|
|
61
|
+
before comparison so marked/unmarked drafts collide.
|
|
62
|
+
- ! When an open upstream issue matches, STOP and link it — do not file again.
|
|
63
|
+
|
|
64
|
+
## Tracking footer
|
|
65
|
+
|
|
66
|
+
- ! Use `Refs #1709` (value-feedback gap escalation) only.
|
|
67
|
+
- ⊗ Use `Closes` / `Fixes` / `Resolves` in the upstream body.
|
|
68
|
+
|
|
69
|
+
## Draft → confirm
|
|
70
|
+
|
|
71
|
+
1. Draft / readout: `deft feedback:file --summary "…" …` (optional
|
|
72
|
+
`--dry-run` / `--json`). Gate-OFF still returns title+body for template
|
|
73
|
+
readout; filing stays blocked until consent.
|
|
74
|
+
2. Enable upstream path when needed:
|
|
75
|
+
`deft policy:enable-value-feedback --confirm --upstream-prompt`
|
|
76
|
+
(audited setter; bare `--confirm` does not silently enable
|
|
77
|
+
`upstreamPrompt`). ⊗ Hand-edit PROJECT-DEFINITION as the primary setter.
|
|
78
|
+
3. Confirm: re-run the **same report fields and target repo** with `--confirm`
|
|
79
|
+
added and without `--dry-run` or `--json`.
|
|
80
|
+
|
|
81
|
+
## Related
|
|
82
|
+
|
|
83
|
+
- Skill: `skills/deft-directive-feedback/SKILL.md`
|
|
84
|
+
- SCM hard-stop rules: `scm/github.md` § Consumer hard-blocker
|
|
85
|
+
- Maintainer label catalog: `.github/ISSUE_LABELS.md` (repo-only; not deposited)
|
|
@@ -54,6 +54,6 @@ Agents: `deft-directive-product-signal` — triggers `product check-in`, `produc
|
|
|
54
54
|
|
|
55
55
|
## Related
|
|
56
56
|
|
|
57
|
-
- Public gap escalation: `deft-directive-feedback` / `
|
|
57
|
+
- Public gap escalation: `deft-directive-feedback` / `deft feedback:file` (hard confirm)
|
|
58
58
|
- Skill telemetry emit: #829 (optional `skillsSummary` hook only; not required for pulse)
|
|
59
59
|
- HTTP transport: #2697 (Phase 2)
|
|
@@ -94,17 +94,20 @@
|
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"id": "deft-directive-feedback",
|
|
97
|
-
"description": "
|
|
97
|
+
"description": "Mid-session and session-end framework-gap escalation for directive consumers. Collects friction/gap reports, drafts deduped framework-gap issues against deftai/directive, and files upstream only after explicit operator confirmation. Use when the operator says \"file a directive issue\", \"file this upstream\", or \"report a framework gap\".",
|
|
98
98
|
"triggers": [
|
|
99
99
|
"feedback",
|
|
100
100
|
"framework gap",
|
|
101
101
|
"file upstream",
|
|
102
|
+
"file this upstream",
|
|
103
|
+
"file a directive issue",
|
|
104
|
+
"report a framework gap",
|
|
102
105
|
"gap escalation",
|
|
103
106
|
"directive feedback"
|
|
104
107
|
],
|
|
105
108
|
"path": "skills/deft-directive-feedback/SKILL.md",
|
|
106
109
|
"version": "0.1",
|
|
107
|
-
"body": "# Deft Directive Feedback -- gap escalation to upstream\n\nConversational batched flow for filing framework gaps discovered during consumer sessions. Mirrors the confirmation gate from `deft-directive-article-review` -- the agent drafts and dedups; the operator approves before any upstream issue is created.\n\nLegend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.\n\n## When to Use\n\n-
|
|
110
|
+
"body": "# Deft Directive Feedback -- gap escalation to upstream\n\nConversational batched flow for filing framework gaps discovered during consumer sessions. Mirrors the confirmation gate from `deft-directive-article-review` -- the agent drafts and dedups; the operator approves before any upstream issue is created. House style for title/body/labels/dedup lives in [`docs/framework-gap-filing.md`](../../docs/framework-gap-filing.md).\n\nLegend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.\n\n## When to Use\n\n- Mid-session when the operator says \"file a directive issue\", \"file this upstream\", \"report a framework gap\", or \"directive feedback\" -- even while `plan.policy.valueFeedback.upstreamPrompt` is OFF\n- Session end when `friction:*` ledger signals or the operator reports a directive shortfall\n- After the operator opts into upstream filing via the audited setter below\n\n## Preconditions\n\n- ! Run only from a **consumer project** -- the filing path no-ops inside the directive maintainer repo\n- ! Filing requires `plan.policy.valueFeedback.upstreamPrompt` ON. If OFF, draft with `deft feedback:file --dry-run` / `--json` (title+body still print), then ask the operator to enable via `deft policy:enable-value-feedback --confirm --upstream-prompt`. If declined, STOP safely -- do not hand-edit PROJECT-DEFINITION.\n- ! Inspect current state with `deft policy:show --field=valueFeedback`\n- ⊗ File upstream issues without explicit operator confirmation\n- ⊗ Treat handwritten typed-block / PROJECT-DEFINITION edits as the primary audited setter\n\n## Phase 1 -- Collect (batched)\n\n- ! Gather concrete gap reports from the session: what was expected, what happened, and minimal reproduction context\n- ! Batch multiple friction items into one upstream issue when they share a root cause; otherwise prepare separate drafts\n- ~ Prefer attributed phrasing (\"encoding gate blocked a valid file\") over vague quality claims\n- ! Follow [`docs/framework-gap-filing.md`](../../docs/framework-gap-filing.md) for title/BLOCKER, section shape, empty create labels, privileged `adoption-blocker`, dedup, and Refs\n\n## Phase 1.5 -- Adoption-blocker judgment\n\n- ! Ask whether the gap blocks adoption. A gap blocks adoption when the consumer cannot complete an intended Directive flow and has no reasonable workaround.\n- ! When the answer is yes, collect the body evidence a privileged actor needs before applying `adoption-blocker`: affected consumer flow and version; documented alternatives attempted, or why they are not a reasonable workaround; observed recovery cost. Pass `--blocker` (and `--flow`, `--alternatives`, `--recovery-cost` when known) so the title carries `BLOCKER` and the body carries those sections.\n- ! When the answer is no or unknown, omit `--blocker`. Absence of the token does not mean \"not a blocker\" -- it means not classified.\n- ⊗ Apply or request the `adoption-blocker` ranking label from a consumer-authored title. The label is a privileged write after the body-evidence test.\n\n## Phase 2 -- Draft + dedup\n\n- ! For each candidate report, run a dry draft (reuse the same report fields and target repo in Phase 3; confirmation adds `--confirm` and drops `--dry-run`/`--json`):\n\n```bash\ndeft feedback:file --summary \"<one-line summary>\" --context \"<session context>\" --expected \"<expected>\" --actual \"<actual>\" --notes \"<optional>\" [--blocker --flow \"<flow and version>\" --alternatives \"<alts>\" --recovery-cost \"<cost>\"] [--dry-run|--json]\n```\n\n- ! Read the printed draft title/body with the operator before proceeding\n- ! If the command reports a duplicate open issue, STOP and link the existing issue instead of filing again\n- ⊗ Proceed past a duplicate-detection block without operator override\n- ~ When go-task is installed, the Taskfile may wrap the same verb; prefer `deft feedback:file` as primary\n\n## Phase 3 -- Confirm + file\n\n- ! Present the final draft and ask for explicit yes/no confirmation\n- ! Only after approval, re-run the **same report fields and target repo** with `--confirm` added and without `--dry-run` or `--json`:\n\n```bash\ndeft feedback:file --summary \"<one-line summary>\" --context \"<session context>\" --expected \"<expected>\" --actual \"<actual>\" --confirm [--blocker]\n```\n\n- ! Print the filed issue URL to the operator\n- ⊗ Use `Closes`/`Fixes`/`Resolves` in the upstream body -- use `Refs #1709` only\n\n## Phase 4 -- Handoff\n\n- ~ Record the upstream issue URL in the session handoff or continue checkpoint if the operator tracks follow-ups locally\n- ~ Return to the prior workflow; gap escalation does not block story completion\n\n## Anti-Patterns\n\n- ⊗ Filing from the maintainer framework repo (consumer-only guard)\n- ⊗ Skipping dedup review when the command reports an existing open issue\n- ⊗ Treating `--confirm` as implicit from broad session approval -- require an explicit filing confirmation step\n- ⊗ Infer \"not a blocker\" from an unmarked report -- absence of `BLOCKER` means not classified\n- ⊗ Auto-apply `adoption-blocker` from a consumer-authored title\n- ⊗ Hand-editing PROJECT-DEFINITION to flip `upstreamPrompt` instead of the audited setter\n",
|
|
108
111
|
"frontmatter_extra": null
|
|
109
112
|
},
|
|
110
113
|
{
|
|
@@ -233,7 +236,7 @@
|
|
|
233
236
|
],
|
|
234
237
|
"path": "skills/deft-directive-product-signal/SKILL.md",
|
|
235
238
|
"version": "0.1",
|
|
236
|
-
"body": "# Deft Directive Product Signal — consented check-in (#2693)\n\nAgent-driven qualitative product-improvement signal for partner/trial installs. Lightweight interview, minimized local summaries (value/health/helped), optional skillsSummary hook — submits to private `deftai/product-signal` when enable + consent gates pass.\n\nLegend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.\n\n## When to Use\n\n- Operator says `product check-in`, `product pulse`, `partner feedback`, or `product signal`\n- Partner onboarding after ops enables `plan.policy.productSignal`\n- ⊗ Do NOT invoke from session:start or ambient rituals when disabled (#2693 D3)\n\n## Preconditions\n\n- ! `plan.policy.productSignal.enabled` MUST be true (`task policy:show --field=productSignal`)\n- ! Install-level consent MUST be recorded before outbound submit (`task product-signal:status`)\n- ! Consent schema v2 binds to the configured sinkRepo; legacy v1 consent authorizes only `deftai/product-signal` (#2767)\n- ! Re-consent after changing `plan.policy.productSignal.sinkRepo`; mismatch soft-skips as sink-unconsented\n- ⊗ Prompt or submit when `enabled` is false\n- ⊗ Block story work on sink errors — fail open (#2693 D16/D18)\n\n## Phase 1 — Gate\n\n```bash\ntask product-signal:status\ntask policy:show -- --field=productSignal\n```\n\n- ! If disabled: soft-skip with one line; exit skill\n- ! If headless/CI: fail open — no consent/interview prompts (#2693 D16)\n\n## Phase 2 — First-time consent (interactive only, D17)\n\nWhen enabled, interactive, and consent missing/revoked, ask:\n\n> May we collect usage metrics and related session signal from this install to improve Directive? This can include a short check-in plus minimized local summaries (value/health and related ledgers). Nothing is sent while this path is off or without your consent.\n>\n> If you are unsure, please check with your company before saying no — they are a Directive partner and may already expect this signal to be shared.\n>\n> Reply **yes** to consent, or **no** to decline.\n\n- **yes** → `task product-signal:consent -- --grant` (pass `--project-root` when using a custom sinkRepo); continue\n- **no** → soft-skip; do not badger every turn\n\n## Phase 3 — Interview (≤3 answers + optional NPS)\n\n- ! Ask at most three short questions plus optional NPS (0–10)\n- ~ Target ≤30s human time beyond first-time consent\n- ⊗ Paste secrets, paths, raw logs, or full USER.md into answers\n\n## Phase 4 — Assemble + validate + submit\n\n```bash\ntask product-signal:submit -- --surface pulse --dry-run\ntask product-signal:submit -- --surface pulse --nps 9\n```\n\n- ! On validation failure: show reason; no partial write\n- ! On sink ACL/network errors: soft-skip with hint; do not fail caller (#2693 D18)\n- ! Report issue URL on success\n\n## Private gaps (D19)\n\n- ! Record bugs/gaps as `Gap:` comments on the standing **pulse** thread (enable+consent sufficient)\n- ! Public promote to `deftai/directive` remains hard-confirm via `deft-directive-feedback` / `
|
|
239
|
+
"body": "# Deft Directive Product Signal — consented check-in (#2693)\n\nAgent-driven qualitative product-improvement signal for partner/trial installs. Lightweight interview, minimized local summaries (value/health/helped), optional skillsSummary hook — submits to private `deftai/product-signal` when enable + consent gates pass.\n\nLegend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.\n\n## When to Use\n\n- Operator says `product check-in`, `product pulse`, `partner feedback`, or `product signal`\n- Partner onboarding after ops enables `plan.policy.productSignal`\n- ⊗ Do NOT invoke from session:start or ambient rituals when disabled (#2693 D3)\n\n## Preconditions\n\n- ! `plan.policy.productSignal.enabled` MUST be true (`task policy:show --field=productSignal`)\n- ! Install-level consent MUST be recorded before outbound submit (`task product-signal:status`)\n- ! Consent schema v2 binds to the configured sinkRepo; legacy v1 consent authorizes only `deftai/product-signal` (#2767)\n- ! Re-consent after changing `plan.policy.productSignal.sinkRepo`; mismatch soft-skips as sink-unconsented\n- ⊗ Prompt or submit when `enabled` is false\n- ⊗ Block story work on sink errors — fail open (#2693 D16/D18)\n\n## Phase 1 — Gate\n\n```bash\ntask product-signal:status\ntask policy:show -- --field=productSignal\n```\n\n- ! If disabled: soft-skip with one line; exit skill\n- ! If headless/CI: fail open — no consent/interview prompts (#2693 D16)\n\n## Phase 2 — First-time consent (interactive only, D17)\n\nWhen enabled, interactive, and consent missing/revoked, ask:\n\n> May we collect usage metrics and related session signal from this install to improve Directive? This can include a short check-in plus minimized local summaries (value/health and related ledgers). Nothing is sent while this path is off or without your consent.\n>\n> If you are unsure, please check with your company before saying no — they are a Directive partner and may already expect this signal to be shared.\n>\n> Reply **yes** to consent, or **no** to decline.\n\n- **yes** → `task product-signal:consent -- --grant` (pass `--project-root` when using a custom sinkRepo); continue\n- **no** → soft-skip; do not badger every turn\n\n## Phase 3 — Interview (≤3 answers + optional NPS)\n\n- ! Ask at most three short questions plus optional NPS (0–10)\n- ~ Target ≤30s human time beyond first-time consent\n- ⊗ Paste secrets, paths, raw logs, or full USER.md into answers\n\n## Phase 4 — Assemble + validate + submit\n\n```bash\ntask product-signal:submit -- --surface pulse --dry-run\ntask product-signal:submit -- --surface pulse --nps 9\n```\n\n- ! On validation failure: show reason; no partial write\n- ! On sink ACL/network errors: soft-skip with hint; do not fail caller (#2693 D18)\n- ! Report issue URL on success\n\n## Private gaps (D19)\n\n- ! Record bugs/gaps as `Gap:` comments on the standing **pulse** thread (enable+consent sufficient)\n- ! Public promote to `deftai/directive` remains hard-confirm via `deft-directive-feedback` / `deft feedback:file`\n\n## Revoke\n\n```bash\ntask product-signal:consent -- --revoke\n# and/or disable: set plan.policy.productSignal.enabled false\n```\n\n## Anti-Patterns\n\n- ⊗ Ambient consent nag when disabled\n- ⊗ Fail-closed headless behavior\n- ⊗ Sticky forever-fail when sink is down\n- ⊗ Auto-file public framework-gap issues from pulses\n\n## Exit\n\ndeft-directive-product-signal complete — exiting skill.\n",
|
|
237
240
|
"frontmatter_extra": null
|
|
238
241
|
},
|
|
239
242
|
{
|
|
@@ -531,7 +531,7 @@ Agent `edit_files` operations can fail when structured file sections contain Uni
|
|
|
531
531
|
|
|
532
532
|
This is the canonical ranking label for **a Directive consumer cannot complete an intended flow and has no reasonable workaround**. The range is install, first session, update, `task check`, and ship -- not onboarding alone. Do not invent a second ranking label for that class.
|
|
533
533
|
|
|
534
|
-
**Title classification (the one sanctioned exception, #3713):** `BLOCKER` in the title is permitted for this class, and is the **only** classification allowed in an issue title. Every other classification stays label-only. Reason: the filing population cannot apply labels -- GitHub requires push access to set them at issue creation. The token is an inbound flare; it never writes `adoption-blocker`. A privileged actor applies the label after the body-evidence test below. Absence of the token does not mean "not a blocker." `
|
|
534
|
+
**Title classification (the one sanctioned exception, #3713):** `BLOCKER` in the title is permitted for this class, and is the **only** classification allowed in an issue title. Every other classification stays label-only. Reason: the filing population cannot apply labels -- GitHub requires push access to set them at issue creation. The token is an inbound flare; it never writes `adoption-blocker`. A privileged actor applies the label after the body-evidence test below. Absence of the token does not mean "not a blocker." `deft feedback:file --blocker` is the consumer filing path that carries the token and this evidence. See also [`docs/framework-gap-filing.md`](../docs/framework-gap-filing.md).
|
|
535
535
|
|
|
536
536
|
**Release census (#3969 / #4917):** `task verify:consumer-hard-stops` blocks a cut only for open `blocks-release-tag`. `adoption-blocker` is the punch list and does not block a tag. The BLOCKER title flare does not by itself block a cut. Issue bodies are not read into the verdict.
|
|
537
537
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: deft-directive-feedback
|
|
3
3
|
description: >-
|
|
4
|
-
|
|
5
|
-
friction/gap reports, drafts deduped framework-gap
|
|
6
|
-
deftai/directive, and files upstream only after explicit
|
|
7
|
-
confirmation.
|
|
4
|
+
Mid-session and session-end framework-gap escalation for directive
|
|
5
|
+
consumers. Collects friction/gap reports, drafts deduped framework-gap
|
|
6
|
+
issues against deftai/directive, and files upstream only after explicit
|
|
7
|
+
operator confirmation. Use when the operator says "file a directive issue",
|
|
8
|
+
"file this upstream", or "report a framework gap".
|
|
8
9
|
---
|
|
9
10
|
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
10
11
|
<!-- Purpose: rendered skill -->
|
|
@@ -14,28 +15,30 @@ description: >-
|
|
|
14
15
|
|
|
15
16
|
# Deft Directive Feedback -- gap escalation to upstream
|
|
16
17
|
|
|
17
|
-
Conversational batched flow for filing framework gaps discovered during consumer sessions. Mirrors the confirmation gate from `deft-directive-article-review` -- the agent drafts and dedups; the operator approves before any upstream issue is created.
|
|
18
|
+
Conversational batched flow for filing framework gaps discovered during consumer sessions. Mirrors the confirmation gate from `deft-directive-article-review` -- the agent drafts and dedups; the operator approves before any upstream issue is created. House style for title/body/labels/dedup lives in [`docs/framework-gap-filing.md`](../../docs/framework-gap-filing.md).
|
|
18
19
|
|
|
19
20
|
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
20
21
|
|
|
21
22
|
## When to Use
|
|
22
23
|
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
- After
|
|
24
|
+
- Mid-session when the operator says "file a directive issue", "file this upstream", "report a framework gap", or "directive feedback" -- even while `plan.policy.valueFeedback.upstreamPrompt` is OFF
|
|
25
|
+
- Session end when `friction:*` ledger signals or the operator reports a directive shortfall
|
|
26
|
+
- After the operator opts into upstream filing via the audited setter below
|
|
26
27
|
|
|
27
28
|
## Preconditions
|
|
28
29
|
|
|
29
30
|
- ! Run only from a **consumer project** -- the filing path no-ops inside the directive maintainer repo
|
|
30
|
-
- ! `plan.policy.valueFeedback.upstreamPrompt`
|
|
31
|
+
- ! Filing requires `plan.policy.valueFeedback.upstreamPrompt` ON. If OFF, draft with `deft feedback:file --dry-run` / `--json` (title+body still print), then ask the operator to enable via `deft policy:enable-value-feedback --confirm --upstream-prompt`. If declined, STOP safely -- do not hand-edit PROJECT-DEFINITION.
|
|
32
|
+
- ! Inspect current state with `deft policy:show --field=valueFeedback`
|
|
31
33
|
- ⊗ File upstream issues without explicit operator confirmation
|
|
32
|
-
- ⊗
|
|
34
|
+
- ⊗ Treat handwritten typed-block / PROJECT-DEFINITION edits as the primary audited setter
|
|
33
35
|
|
|
34
36
|
## Phase 1 -- Collect (batched)
|
|
35
37
|
|
|
36
38
|
- ! Gather concrete gap reports from the session: what was expected, what happened, and minimal reproduction context
|
|
37
39
|
- ! Batch multiple friction items into one upstream issue when they share a root cause; otherwise prepare separate drafts
|
|
38
40
|
- ~ Prefer attributed phrasing ("encoding gate blocked a valid file") over vague quality claims
|
|
41
|
+
- ! Follow [`docs/framework-gap-filing.md`](../../docs/framework-gap-filing.md) for title/BLOCKER, section shape, empty create labels, privileged `adoption-blocker`, dedup, and Refs
|
|
39
42
|
|
|
40
43
|
## Phase 1.5 -- Adoption-blocker judgment
|
|
41
44
|
|
|
@@ -46,23 +49,24 @@ Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
|
46
49
|
|
|
47
50
|
## Phase 2 -- Draft + dedup
|
|
48
51
|
|
|
49
|
-
- ! For each candidate report, run a dry draft:
|
|
52
|
+
- ! For each candidate report, run a dry draft (reuse the same report fields and target repo in Phase 3; confirmation adds `--confirm` and drops `--dry-run`/`--json`):
|
|
50
53
|
|
|
51
54
|
```bash
|
|
52
|
-
|
|
55
|
+
deft feedback:file --summary "<one-line summary>" --context "<session context>" --expected "<expected>" --actual "<actual>" --notes "<optional>" [--blocker --flow "<flow and version>" --alternatives "<alts>" --recovery-cost "<cost>"] [--dry-run|--json]
|
|
53
56
|
```
|
|
54
57
|
|
|
55
58
|
- ! Read the printed draft title/body with the operator before proceeding
|
|
56
59
|
- ! If the command reports a duplicate open issue, STOP and link the existing issue instead of filing again
|
|
57
60
|
- ⊗ Proceed past a duplicate-detection block without operator override
|
|
61
|
+
- ~ When go-task is installed, the Taskfile may wrap the same verb; prefer `deft feedback:file` as primary
|
|
58
62
|
|
|
59
63
|
## Phase 3 -- Confirm + file
|
|
60
64
|
|
|
61
65
|
- ! Present the final draft and ask for explicit yes/no confirmation
|
|
62
|
-
- ! Only after approval, re-run with `--confirm`:
|
|
66
|
+
- ! Only after approval, re-run the **same report fields and target repo** with `--confirm` added and without `--dry-run` or `--json`:
|
|
63
67
|
|
|
64
68
|
```bash
|
|
65
|
-
|
|
69
|
+
deft feedback:file --summary "<one-line summary>" --context "<session context>" --expected "<expected>" --actual "<actual>" --confirm [--blocker]
|
|
66
70
|
```
|
|
67
71
|
|
|
68
72
|
- ! Print the filed issue URL to the operator
|
|
@@ -80,3 +84,4 @@ task feedback:file -- --summary "<one-line summary>" --context "<session context
|
|
|
80
84
|
- ⊗ Treating `--confirm` as implicit from broad session approval -- require an explicit filing confirmation step
|
|
81
85
|
- ⊗ Infer "not a blocker" from an unmarked report -- absence of `BLOCKER` means not classified
|
|
82
86
|
- ⊗ Auto-apply `adoption-blocker` from a consumer-authored title
|
|
87
|
+
- ⊗ Hand-editing PROJECT-DEFINITION to flip `upstreamPrompt` instead of the audited setter
|
|
@@ -75,7 +75,7 @@ task product-signal:submit -- --surface pulse --nps 9
|
|
|
75
75
|
## Private gaps (D19)
|
|
76
76
|
|
|
77
77
|
- ! Record bugs/gaps as `Gap:` comments on the standing **pulse** thread (enable+consent sufficient)
|
|
78
|
-
- ! Public promote to `deftai/directive` remains hard-confirm via `deft-directive-feedback` / `
|
|
78
|
+
- ! Public promote to `deftai/directive` remains hard-confirm via `deft-directive-feedback` / `deft feedback:file`
|
|
79
79
|
|
|
80
80
|
## Revoke
|
|
81
81
|
|