@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,403 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deft-directive-refinement
|
|
3
|
+
description: >-
|
|
4
|
+
Conversational refinement session. Ingests external work items into vBRIEF
|
|
5
|
+
proposed/ scope, deduplicates via origin references, evaluates proposals
|
|
6
|
+
with the user, reconciles stale origins, and promotes/demotes scopes through
|
|
7
|
+
the lifecycle using deterministic task commands.
|
|
8
|
+
triggers:
|
|
9
|
+
- refinement
|
|
10
|
+
- reprioritize
|
|
11
|
+
- refine
|
|
12
|
+
- roadmap refresh
|
|
13
|
+
- refresh roadmap
|
|
14
|
+
- triage
|
|
15
|
+
- action menu
|
|
16
|
+
- work the cache
|
|
17
|
+
- pre-ingest
|
|
18
|
+
---
|
|
19
|
+
<!-- AUTO-GENERATED by task packs:render -- DO NOT EDIT MANUALLY -->
|
|
20
|
+
<!-- Purpose: rendered skill -->
|
|
21
|
+
<!-- Source of truth: packs/skills/skills-pack-0.1.json -->
|
|
22
|
+
<!-- Regenerate with: task packs:render -->
|
|
23
|
+
<!-- Edit the source, not this file. Slice instead of loading every SKILL.md: task packs:slice skills by-trigger --trigger <kw> (or list) -->
|
|
24
|
+
|
|
25
|
+
# Deft Directive Refinement
|
|
26
|
+
|
|
27
|
+
Conversational refinement session -- ingest, evaluate, reconcile, and prioritize scope vBRIEFs with the user.
|
|
28
|
+
|
|
29
|
+
Legend (from RFC2119): !=MUST, ~=SHOULD, ≉=SHOULD NOT, ⊗=MUST NOT, ?=MAY.
|
|
30
|
+
|
|
31
|
+
**Upstream pass**: refinement begins with a triage pass -- see [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md) (D6 / #1130) for the canonical cache-hygiene + "what's next?" queue playbook before continuing into the refinement flow below.
|
|
32
|
+
|
|
33
|
+
**See also**: [`../../contracts/deterministic-questions.md`](../../contracts/deterministic-questions.md) (canonical numbered-menu rule used by every Phase 0 / Phase 2-5 gate below) | `task cache:fetch-all` / `task cache:get` (Tier 1 unified content cache, #883 Story 2) | `task triage:bootstrap` / `task triage:accept` / `task triage:reject` / `task triage:defer` / `task triage:needs-ac` / `task triage:mark-duplicate` / `task triage:bulk-*` / `task triage:refresh-active` (Phase 0 action surface, #845 + #883 Story 3 rebind).
|
|
34
|
+
|
|
35
|
+
## Platform Requirements
|
|
36
|
+
|
|
37
|
+
! This skill requires **GitHub** as the SCM platform and the **GitHub CLI (`gh`)** to be installed and authenticated. Issue ingestion, origin freshness checks, and completion lifecycle all depend on `gh`.
|
|
38
|
+
|
|
39
|
+
## Deterministic Questions Contract
|
|
40
|
+
|
|
41
|
+
! Every numbered-menu prompt rendered in this skill (Phase 0 Triage action menu, Phase 2 Evaluate per-item accept/reject, Phase 3 Reconcile flagged-item walk, Phase 4 Promote/Demote lifecycle gates, Phase 5 Prioritize reorder gates) MUST follow [`../../contracts/deterministic-questions.md`](../../contracts/deterministic-questions.md): render the canonical numbered menu in chat unless the host UI visibly preserves numeric option labels and returns numeric selections or exact displayed option text. The final two numbered options MUST be `Discuss` and `Back`, in that order. The Discuss-pause semantic is documented verbatim there -- on `Discuss` selection the agent MUST halt the in-progress sequence immediately, prompt `What would you like to discuss?`, and resume only on an explicit user signal. Implicit resumption is forbidden, and fallback chat replies MUST map only to the displayed number or exact displayed option text.
|
|
42
|
+
|
|
43
|
+
## When to Use
|
|
44
|
+
|
|
45
|
+
- User says "refinement", "reprioritize", "refine", "roadmap refresh", or "refresh roadmap" (legacy v0.19 terms -- deft-directive-refinement is the current skill name)
|
|
46
|
+
- User says "triage", "action menu", "work the cache", or "pre-ingest" -- first-class Phase 0 direct triggers introduced under #845; they route to Phase 0 (Triage), not the general refinement entry
|
|
47
|
+
- New issues have accumulated since the last refinement session
|
|
48
|
+
- Periodic maintenance pass (e.g. weekly or after a batch of user feedback)
|
|
49
|
+
- User wants to review and organize the backlog
|
|
50
|
+
|
|
51
|
+
! **Entry point (#1141, supersedes #845 / #883 action-menu).** Phase 0 -- Triage-first consultation is the canonical entry point for any refinement session. Phase 0 consults `task triage:summary` (D2 / #1122) and `task triage:queue --state=accept` (D11 / #1128) and pulls the `[RESUME]`-tagged slice (D3 / #1123) FIRST. Refinement does NOT itself triage cached candidates -- that work belongs to [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md) (D6 / #1130). Phase 0 ! MUST chain into Phase 1 -- Ingest on completion (or surface the empty-cache fallback prompt when the cache has not yet been bootstrapped -- see Phase 0a below). Phase 1+ semantics are unchanged.
|
|
52
|
+
|
|
53
|
+
## Prerequisites
|
|
54
|
+
|
|
55
|
+
- ! `vbrief/` directory exists with lifecycle folders (`proposed/`, `pending/`, `active/`, `completed/`, `cancelled/`)
|
|
56
|
+
- ! GitHub CLI (`gh`) is authenticated and can access the repo
|
|
57
|
+
- ~ `PROJECT-DEFINITION.vbrief.json` exists (run `task project:render` if missing)
|
|
58
|
+
|
|
59
|
+
## Session Model
|
|
60
|
+
|
|
61
|
+
Refinement is a **conversational loop**, not a batch job. The user directs the flow:
|
|
62
|
+
|
|
63
|
+
- "Triage" / "action menu" / "work the cache" / "pre-ingest" -> Phase 0 (Triage-first consultation, #1141) -- refinement consults the cache; the canonical decision-making playbook is `../deft-directive-triage/SKILL.md` (D6 / #1130)
|
|
64
|
+
- "Pull in issues" / "ingest" -> Phase 0 ALWAYS runs first to consult `task triage:summary` + `task triage:queue --state=accept`; Phase 1 follows on the cohort Phase 0b produces (#1141)
|
|
65
|
+
- "Show proposed" / "evaluate" -> Phase 2 (Evaluate)
|
|
66
|
+
- "Check origins" / "reconcile" -> Phase 3 (Reconcile)
|
|
67
|
+
- "Accept these" / "reject that" / "promote" / "demote" -> Phase 4 (Promote/Demote)
|
|
68
|
+
- "Reprioritize" / "reorder pending" -> Phase 5 (Prioritize)
|
|
69
|
+
- "Close out" / "scope is done" / "completion" -> Phase 6 (Completion Lifecycle)
|
|
70
|
+
- "Done" / "exit" -> Exit
|
|
71
|
+
|
|
72
|
+
The agent may suggest the next phase, but the user decides. Phases can be entered in any order and repeated.
|
|
73
|
+
|
|
74
|
+
## Branch Setup (Preflight)
|
|
75
|
+
|
|
76
|
+
! Before making any changes, ensure you are working on a feature branch. This preflight runs before Phase 0 and again before Phase 1 if Phase 0 is auto-skipped.
|
|
77
|
+
|
|
78
|
+
1. ! Check if the working tree has uncommitted changes that would conflict -- stop and ask the user to resolve them first
|
|
79
|
+
2. ! Create or switch to a refinement branch (e.g. `refinement/YYYY-MM-DD`) if not already on one
|
|
80
|
+
3. ! Confirm the branch and working directory to the user before proceeding
|
|
81
|
+
|
|
82
|
+
## Phase 0 -- Triage-first consultation (cache-first, #1141)
|
|
83
|
+
|
|
84
|
+
! Phase 0 is a thin consumer of the canonical triage cache: refinement consults `task triage:summary` (D2 / #1122) and `task triage:queue` (D11 / #1128) BEFORE walking any `vbrief/` lifecycle folder. The dedicated triage playbook lives at [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md) (D6 / #1130) -- refinement does NOT itself triage cached candidates; it consumes the queue's `accept` and `[RESUME]` slices and turns them into scope vBRIEFs.
|
|
85
|
+
|
|
86
|
+
! Phase 0 runs three sub-phases in canonical order: **Phase 0a -- Triage gate** -> **Phase 0b -- Cache-first ingestion** -> **Phase 0c -- Resume conditions**. Each sub-phase MUST run before the next, and Phase 0 MUST chain into Phase 1 -- Ingest on completion. Numbered prompts in Phase 0 ! MUST follow [`../../contracts/deterministic-questions.md`](../../contracts/deterministic-questions.md) (`Discuss` / `Back` as the final two numbered options; Discuss-pause semantic applies verbatim).
|
|
87
|
+
|
|
88
|
+
**See also (#883 Story 2):** the unified cache (`task cache:fetch-all --source=github-issue --repo OWNER/NAME`) is the sole content-mirroring surface in v0.26.0+. Tier 1 reads MUST go through `task cache:get -- github-issue OWNER/NAME/<N>`. The legacy "Three-Tier Inventory Model" + action-menu walk that lived here pre-#1141 has moved out of refinement and into `../deft-directive-triage/SKILL.md` (D6 / #1130); refinement now consumes the post-decision queue rather than producing decisions.
|
|
89
|
+
|
|
90
|
+
### Phase 0a -- Triage gate (`task triage:summary`)
|
|
91
|
+
|
|
92
|
+
1. ! Invoke `task triage:summary` (D2 / #1122) and capture the one-liner.
|
|
93
|
+
2. ! **Empty-cache backward-compat fallback.** If the one-liner is the documented empty-cache prompt (`[triage] cache empty -- run task triage:bootstrap`), the agent ! MUST emit the verbatim recovery message to stderr BEFORE any folder scan:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
triage cache empty -- run `task triage:welcome` (N3 / #1143) to onboard, or `task triage:bootstrap` to seed the cache directly; refinement Phase 0 cannot consult the queue against an empty cache. Falling back to a legacy `vbrief/proposed/` folder scan only if you opt in.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then prompt the user `Fall back to legacy folder-scan against vbrief/proposed/ for this session? [y/N]` (default `N`). On `N`, exit refinement with the canonical `deft-directive-refinement complete -- exiting skill.` confirmation and the chaining instruction `Run task triage:welcome (N3 / #1143) to onboard, then re-enter refinement.`. On `y`, chain into Phase 1 against `vbrief/proposed/` as the legacy fallback. ! MUST NOT silently proceed without surfacing the breadcrumb to `task triage:welcome` -- a fresh post-upgrade install needs that pointer to find the canonical onboarding ritual.
|
|
100
|
+
|
|
101
|
+
3. ! **Outstanding-work gate.** If the cache is populated AND any of `untriaged`, `stale-defer (resume condition met)`, or `in-flight` is non-zero, surface the one-liner verbatim to the user with the canonical recommendation:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
triage cache has outstanding work -- recommend running `skills/deft-directive-triage/SKILL.md` (D6 / #1130) first. Proceed to refinement anyway? [y/N]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
~ Default is `N`: deferring to the triage skill is the documented happy path because refinement consumes `accept`-decisioned candidates and an untriaged backlog means there are fewer `accept` rows than there could be. On `N`, exit with the canonical confirmation phrasing and the chaining instruction `Run skills/deft-directive-triage/SKILL.md to clear the backlog, then re-enter refinement.`. On `y`, proceed to Phase 0b.
|
|
108
|
+
|
|
109
|
+
4. ? When all counts are zero (cache populated, no outstanding work), proceed to Phase 0b without prompting.
|
|
110
|
+
|
|
111
|
+
⊗ Skip Phase 0a -- refinement on top of an untriaged cache wastes the operator's time on items the triage skill would have rejected, deferred, or marked needs-AC.
|
|
112
|
+
⊗ Bypass the empty-cache fallback prompt -- a silent proceed against an empty cache surfaces a misleading "no candidates" state and hides the upgrade-onboarding path from the operator.
|
|
113
|
+
|
|
114
|
+
### Phase 0b -- Cache-first ingestion (`task triage:queue --state=accept`)
|
|
115
|
+
|
|
116
|
+
1. ! Pull the ingestion candidate list via `task triage:queue --state=accept` (D11 / #1128). Each row is a cached issue whose latest audit-log decision is `accept` -- the canonical "ready to become a scope vBRIEF" cohort. ! MUST NOT enumerate `vbrief/proposed/` independently of the queue; the folder participates only via the join described in step 2.
|
|
117
|
+
2. ! Join the queue against `vbrief/proposed/` (and the rest of the lifecycle folders) by `references[].uri`: queue rows whose issue is already represented by an existing vBRIEF surface as "already tracked"; queue rows with no matching vBRIEF are "new accept candidates". Items already in `vbrief/proposed/` continue to participate -- they are joined against the cache rather than enumerated separately.
|
|
118
|
+
3. ~ When the join surfaces zero new candidates (every `accept` row already has a vBRIEF), Phase 0b is a clean no-op; chain straight into Phase 0c.
|
|
119
|
+
4. ! For each new candidate, fall through to Phase 1 -- Ingest, which delegates the actual scope-vBRIEF write to `task issue:ingest`. The intended single-verb form is `task scope:promote --from-issue=<N>` (#1136 / D18); until D18 lands, refinement chains the existing `task issue:ingest` + `task scope:promote` pair.
|
|
120
|
+
|
|
121
|
+
<!-- TODO(#1136 / D18): when `task scope:promote --from-issue=<N>` ships, refinement Phase 0b consumes it directly instead of chaining `task issue:ingest` + `task scope:promote`. -->
|
|
122
|
+
|
|
123
|
+
⊗ Walk `vbrief/proposed/` directly as the primary ingestion surface -- the cache is the authoritative "what is ready to refine?" surface; the folder is the destination, not the source of truth.
|
|
124
|
+
⊗ Drop items that exist in `vbrief/proposed/` but lack a matching cache row -- those are reconciled later (Phase 3 / origin reconciliation), not silently discarded.
|
|
125
|
+
|
|
126
|
+
### Phase 0c -- Resume conditions (`[RESUME]`-tagged items first)
|
|
127
|
+
|
|
128
|
+
1. ! Before walking new untriaged candidates from Phase 0b, process every `[RESUME]`-tagged row in the queue. `[RESUME]` rows surface from D3 (#1123) when a prior `defer` audit entry's `resume-on` condition fires (atomics: `ref:closed:#N`, `ref:merged:#N`, `date:>=YYYY-MM-DD`, `pending-count:>=N|<=N`, composed by a single top-level `AND` or `OR`).
|
|
129
|
+
2. ! Stale-defer (resume-eligible) items take priority over fresh untriaged when both are present in the same Phase 0 pass -- the operator made a forward-dated decision on the deferred item and the framework is honouring it. Treat the `[RESUME]` slice as the FIRST class of candidates surfaced to the user.
|
|
130
|
+
3. ~ The exact precedence in `task triage:queue` is `[ORPHAN]` -> `[RESUME]` -> `[URGENT]` -> untriaged -> other (per D11 + D13 / #1132 grouping). Refinement consumes this order verbatim and surfaces `[RESUME]` candidates first; `[ORPHAN]` rows are out-of-scope for refinement (they are handled by the triage skill's audit phase).
|
|
131
|
+
|
|
132
|
+
⊗ Treat `[RESUME]` rows as "leftover" -- they are the highest-priority class refinement is meant to process, because the operator already decided to revisit them when the condition fired.
|
|
133
|
+
|
|
134
|
+
### Pre-Phase-1 handoff
|
|
135
|
+
|
|
136
|
+
1. ! Surface a one-line session summary: `{resume_eligible} resume-eligible, {new_accept} new accept candidate(s), {already_tracked} already tracked in vbrief/`.
|
|
137
|
+
2. ! Chain into Phase 1 -- Ingest, which now operates on the cohort produced by Phase 0b's join (`[RESUME]` rows first, then new accept candidates).
|
|
138
|
+
3. ? If the user opts out of Phase 1 (e.g. "that's it for today"), exit via the Phase 0 mid-session exit surface below -- ! MUST NOT route to the `### EXIT` block under `## PR & Review Cycle` because that block is the post-PR-creation exit path and references a `PR #{N}` that does not yet exist at this point in the flow.
|
|
139
|
+
|
|
140
|
+
#### Phase 0 mid-session exit surface
|
|
141
|
+
|
|
142
|
+
! When the user opts out of Phase 1 after completing (or partially completing) Phase 0, perform exactly these steps -- ! MUST NOT mention any PR number, since none has been created yet:
|
|
143
|
+
|
|
144
|
+
1. ! Surface the outstanding-work tally: `{resume_eligible} resume-eligible candidate(s) still pending, {new_accept} accept candidate(s) not yet ingested -- these will resurface on the next Phase 0 entry.`
|
|
145
|
+
2. ! Note the audit-log location verbatim using double-backtick fencing so the inner path renders correctly: ``Audit log preserved at `vbrief/.eval/candidates.jsonl`; queue state is reproducible via `task triage:queue --state=accept`.``
|
|
146
|
+
3. ! Confirm skill exit with the canonical phrasing: `deft-directive-refinement complete -- exiting skill.`
|
|
147
|
+
4. ! Provide the Phase-0-appropriate chaining instruction: ``Resume with `task triage:queue --state=accept` to inspect the queue, or re-enter the refinement skill when ready to continue.`` Do NOT reference a PR, a review cycle, or a monitor agent.
|
|
148
|
+
|
|
149
|
+
⊗ Skip Phase 1 silently after Phase 0 -- always render the chaining decision so the user knows the entry point shifted.
|
|
150
|
+
⊗ Mutate `vbrief/proposed/` directly during Phase 0 -- only `task issue:ingest` (called from Phase 1) is allowed to write there; Phase 0 is read-only against the cache.
|
|
151
|
+
⊗ Route Phase 0 mid-session opt-out to the post-PR `### EXIT` block under `## PR & Review Cycle` -- that block surfaces a non-existent `PR #{N}` and confuses the user.
|
|
152
|
+
|
|
153
|
+
## Phase 1 -- Ingest
|
|
154
|
+
|
|
155
|
+
! Scan external sources for new work items and create proposed scope vBRIEFs.
|
|
156
|
+
|
|
157
|
+
### Step 1: Gather Sources
|
|
158
|
+
|
|
159
|
+
1. ? Scan non-GitHub sources (Jira, direct user requests, etc.) manually if applicable — those ingest paths are not yet task-wrapped
|
|
160
|
+
2. ! GitHub issues are ingested via the task wrapper documented in Step 3 — the task fetches open issues itself, so no separate `gh issue list` call is needed
|
|
161
|
+
|
|
162
|
+
### Step 2: Deduplicate via References (Dry-Run Preview)
|
|
163
|
+
|
|
164
|
+
1. ? Run `task issue:ingest -- --all --dry-run` to preview which issues the ingest task would create scope vBRIEFs for. The task deduplicates candidates against `references` entries in existing vBRIEFs (across all lifecycle folders) so already-tracked issues are skipped automatically.
|
|
165
|
+
2. ! Present the user with the list of new-vs-already-tracked items the dry-run reports: "{N} new items found, {M} already tracked"
|
|
166
|
+
3. ! Wait for user approval before proceeding to ingest
|
|
167
|
+
|
|
168
|
+
### Step 3: Ingest Approved Items
|
|
169
|
+
|
|
170
|
+
! Delegate ingest to `task issue:ingest` — the task is the canonical implementation of scope-vBRIEF creation. Skills MUST NOT reinvent the slug rules, reference shape, or deduplication logic inline (see #537 for background).
|
|
171
|
+
|
|
172
|
+
- **Single issue**: `task issue:ingest -- <N>` — creates `vbrief/proposed/YYYY-MM-DD-<slug>.vbrief.json` with origin `references`, canonical slug from `scripts/slug_normalize.py` (see [`../../conventions/vbrief-filenames.md`](../../conventions/vbrief-filenames.md)), and schema-conformant shape.
|
|
173
|
+
- **Batch**: `task issue:ingest -- --all [--label <L>] [--status <S>]` — ingests every open issue matching the filters, skipping duplicates by `references.uri` match.
|
|
174
|
+
- **Preview**: add `--dry-run` to either form to preview without writing files.
|
|
175
|
+
|
|
176
|
+
The task emits vBRIEFs conforming to the canonical v0.6 schema (`vbrief/schemas/vbrief-core.schema.json`) with origin references in the form documented in [`../../conventions/references.md`](../../conventions/references.md):
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
"references": [
|
|
180
|
+
{
|
|
181
|
+
"uri": "https://github.com/{owner}/{repo}/issues/{N}",
|
|
182
|
+
"type": "x-vbrief/github-issue",
|
|
183
|
+
"title": "Issue #{N}: {issue title}"
|
|
184
|
+
}
|
|
185
|
+
]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
- ! New scope vBRIEFs MUST target `"vBRIEFInfo": { "version": "0.6" }` (the task handles this automatically)
|
|
189
|
+
- ! `plan.status` starts at `"proposed"`; the task sets this
|
|
190
|
+
- ! Conform to `vbrief/schemas/vbrief-core.schema.json` (v0.6) -- the task validates before writing
|
|
191
|
+
- ~ After ingest, review the generated vBRIEFs with the user before promoting any of them to `pending/`
|
|
192
|
+
|
|
193
|
+
⊗ Hand-author scope vBRIEFs inside the skill when the ingest task exists — duplicating the narrative logic is how #534 (non-conformant references) and #537 (drift between skill and task) arise
|
|
194
|
+
⊗ Write references with `url`/`id`/bare `github-issue` types — use the schema-conformant `{uri, type, title}` shape above
|
|
195
|
+
⊗ Ingest an item that already has a matching vBRIEF reference -- `task issue:ingest` handles deduplication; skills MUST NOT duplicate that logic inline
|
|
196
|
+
|
|
197
|
+
## Phase 2 -- Evaluate
|
|
198
|
+
|
|
199
|
+
! List proposed items for interactive user review.
|
|
200
|
+
|
|
201
|
+
### Step 1: List Proposed Items
|
|
202
|
+
|
|
203
|
+
1. ! Read all vBRIEFs in `vbrief/proposed/`
|
|
204
|
+
2. ! Present each item with:
|
|
205
|
+
- Title and filename
|
|
206
|
+
- Origin link(s) from `references`
|
|
207
|
+
- Summary from `narratives` (if populated)
|
|
208
|
+
- Labels/category (if available from origin)
|
|
209
|
+
3. ! Sort by creation date (oldest first) or as user prefers
|
|
210
|
+
|
|
211
|
+
### Step 2: Interactive Review
|
|
212
|
+
|
|
213
|
+
! For each proposed item (or batch, as user directs):
|
|
214
|
+
|
|
215
|
+
- ! Present the item and wait for user decision
|
|
216
|
+
- ~ The user may: accept (promote to pending), reject (cancel), defer (keep in proposed), or request more detail
|
|
217
|
+
- ! Do not proceed to the next item until the user responds
|
|
218
|
+
- ? The user may batch-accept or batch-reject multiple items at once
|
|
219
|
+
|
|
220
|
+
⊗ Auto-accept or auto-reject proposed items without user review
|
|
221
|
+
|
|
222
|
+
## Phase 3 -- Reconcile (RFC D12)
|
|
223
|
+
|
|
224
|
+
! Check if linked origins have changed since the vBRIEF was last touched. Delegate the scan to `task reconcile:issues` and walk the user through flagged items for approval (see #537 for why the skill is a thin wrapper over the task).
|
|
225
|
+
|
|
226
|
+
### Step 1: Run the Reconciler
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
task reconcile:issues
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The task scans every vBRIEF with a GitHub-backed reference (whether the reference uses the legacy `github-issue` bare type or the canonical `x-vbrief/github-issue` shape), fetches each linked issue, compares timestamps and state, and reports items in four buckets:
|
|
233
|
+
|
|
234
|
+
- **Linked & current** — origin has not changed since the vBRIEF was last updated (no action)
|
|
235
|
+
- **Stale** — origin `updatedAt` is newer than the vBRIEF (propose an update)
|
|
236
|
+
- **Externally closed** — origin issue is `CLOSED` (propose cancellation or reconcile if intentional divergence)
|
|
237
|
+
- **Unlinked** — vBRIEF has no GitHub reference (flag for review)
|
|
238
|
+
|
|
239
|
+
### Step 2: Walk Flagged Items with the User
|
|
240
|
+
|
|
241
|
+
1. ! For each **stale** item the task surfaces, show the user the diff between the current vBRIEF and the refreshed origin. Propose edits; ! wait for explicit user approval before writing anything.
|
|
242
|
+
2. ! For each **externally closed** item, ask the user whether to `task scope:cancel <file>` it or preserve intentional divergence.
|
|
243
|
+
3. ! For each **unlinked** item, ask whether to attach an origin reference or leave the vBRIEF as-is.
|
|
244
|
+
|
|
245
|
+
### Step 3: Apply User-Approved Updates
|
|
246
|
+
|
|
247
|
+
- ! Agent proposes edits; ! user approves each change
|
|
248
|
+
- ! Never auto-update vBRIEFs — intentional divergence (vBRIEF refined beyond original issue scope) must be preserved
|
|
249
|
+
- ! For approved updates, update the vBRIEF content and `vBRIEFInfo.updated` timestamp; prefer the task commands (`task scope:cancel`, `task scope:block`, etc.) over hand-editing where they apply
|
|
250
|
+
|
|
251
|
+
⊗ Replace the task invocation with a hand-written `gh issue view` loop — the task is the canonical implementation; skills MUST NOT duplicate it (#537)
|
|
252
|
+
⊗ Auto-update vBRIEFs based on origin changes without user approval
|
|
253
|
+
⊗ Overwrite intentional divergence -- if a vBRIEF has been refined beyond the original issue, preserve the refinement
|
|
254
|
+
|
|
255
|
+
## Phase 4 -- Promote/Demote
|
|
256
|
+
|
|
257
|
+
! Move vBRIEFs between lifecycle folders using deterministic task commands. The status values below align with the canonical v0.6 Status enum (`draft | proposed | approved | pending | running | completed | blocked | failed | cancelled`) — note that `failed` is also a valid terminal transition for active work that could not complete.
|
|
258
|
+
|
|
259
|
+
### Available Commands
|
|
260
|
+
|
|
261
|
+
- `task scope:promote <file>` -- proposed/ -> pending/ (status: pending)
|
|
262
|
+
- `task scope:activate <file>` -- pending/ -> active/ (status: running)
|
|
263
|
+
- `task scope:complete <file>` -- active/ -> completed/ (status: completed)
|
|
264
|
+
- `task scope:cancel <file>` -- any -> cancelled/ (status: cancelled)
|
|
265
|
+
- `task scope:restore <file>` -- cancelled/ -> proposed/ (status: proposed)
|
|
266
|
+
- `task scope:block <file>` -- stays in active/ (status: blocked)
|
|
267
|
+
- `task scope:unblock <file>` -- stays in active/ (status: running)
|
|
268
|
+
- `task scope:fail <file>` (v0.6+) -- active/ -> completed/ (status: failed) — record a failure terminal state when a scope cannot complete but should not be cancelled
|
|
269
|
+
- `task scope:undo <decision_id>` (D15 / #1134) -- reverse a single scope-lifecycle audit entry (`demote` -> re-promote, `cancel` -> restore-from-cancelled-to-prior-folder, `restore` -> re-cancel); terminal actions (`complete` / `fail`) are REFUSED -- use `git revert` or hand-edit
|
|
270
|
+
- `task scope:undo --batch-id=<uuid>` (D15 / #1134) -- reverse every audit entry tagged with the batch_id (e.g. the cohort produced by `task scope:demote --batch`); idempotent on already-undone entries; the undo cohort is itself reversible via the `undo_batch_id` minted on the new entries. Optional `--dry-run` previews without writing.
|
|
271
|
+
- `task scope:undo --latest` (D15 / #1134) -- reverse the most-recent reversible audit entry (`demote` / `cancel` / `restore` / `undo`) not already undone; convenience form used by the N6 / #1146 smoketest contract.
|
|
272
|
+
|
|
273
|
+
### Workflow
|
|
274
|
+
|
|
275
|
+
1. ! Execute transitions using the task commands above -- they handle `plan.status` updates, `plan.updated` timestamps, and file moves atomically
|
|
276
|
+
2. ! Derived-artifact renders (`task roadmap:render`, `task project:render`) happen after a **batch** of promotions/demotions, not after each individual item. During high-volume triage (e.g. dozens of accept/reject decisions in one session), defer both renders until the end of the batch -- the source of truth is the lifecycle folder contents under `vbrief/`, so ROADMAP.md and PROJECT-DEFINITION.vbrief.json can be refreshed once per batch without losing correctness.
|
|
277
|
+
3. ! `task roadmap:render` regenerates ROADMAP.md from the updated lifecycle folder contents. Call it once per batch (typically at the end of Phase 4, before handing back to the user or transitioning to Phase 5), not after every single promote/demote.
|
|
278
|
+
4. ! `task project:render` refreshes the PROJECT-DEFINITION items registry. Call it **once per refinement pass** -- usually at the end of the session alongside the final roadmap render -- unless the user explicitly needs an intermediate registry refresh. It is not a per-edit tax.
|
|
279
|
+
5. ! Before the user is shown the final backlog state (end of Phase 4, end of Phase 5, or session exit), both `task roadmap:render` AND `task project:render` MUST have been run at least once so ROADMAP.md and PROJECT-DEFINITION.vbrief.json reflect the current lifecycle folder truth. This preserves correctness while allowing N promotions/demotions to share one render checkpoint.
|
|
280
|
+
6. ! Mark rejected items as `cancelled` via `task scope:cancel` (never delete vBRIEFs)
|
|
281
|
+
|
|
282
|
+
~ Operationally: a large refinement session can ingest/evaluate/promote multiple issues and close out with **one** final render checkpoint, rather than N repetitive renders after every individual item.
|
|
283
|
+
|
|
284
|
+
⊗ Rerender derived artifacts (`task roadmap:render`, `task project:render`) after every single accept/reject/promote/demote during high-volume triage -- batch the lifecycle edits and render once at the end of the batch
|
|
285
|
+
⊗ Move vBRIEFs between folders manually (cp/mv) -- always use `task scope:*` commands
|
|
286
|
+
⊗ Delete vBRIEFs -- use `task scope:cancel` to preserve history
|
|
287
|
+
|
|
288
|
+
## Phase 5 -- Prioritize
|
|
289
|
+
|
|
290
|
+
! Reorder and organize the pending backlog.
|
|
291
|
+
|
|
292
|
+
1. ! List all vBRIEFs in `vbrief/pending/` with titles, origins, and any phase/dependency metadata
|
|
293
|
+
2. ~ Help the user set phases and dependencies:
|
|
294
|
+
- Group related items into phases (via vBRIEF `items` hierarchy or `tags`)
|
|
295
|
+
- Identify dependencies between items (via `edges` in vBRIEF schema)
|
|
296
|
+
3. ! `task roadmap:render` is the **checkpoint** before showing the reordered backlog to the user -- not a per-edit tax. Run it ONCE at the end of the reorder pass to regenerate ROADMAP.md from the updated pending/ contents. Do not invoke it after each individual reorder action.
|
|
297
|
+
4. ~ Present the regenerated roadmap summary to the user for confirmation
|
|
298
|
+
|
|
299
|
+
## Phase 6 -- Completion Lifecycle
|
|
300
|
+
|
|
301
|
+
! On scope completion, update origins to close the loop.
|
|
302
|
+
|
|
303
|
+
### When a Scope Completes
|
|
304
|
+
|
|
305
|
+
1. ! Read the completed vBRIEF's `references` array
|
|
306
|
+
2. ! For each GitHub-issue reference (either the legacy bare `github-issue` type or the canonical `x-vbrief/github-issue` shape):
|
|
307
|
+
- Close the issue with a comment linking to the implementing PR:
|
|
308
|
+
```
|
|
309
|
+
gh issue close {N} --comment "Completed via PR #{PR} -- scope vBRIEF: {filename}"
|
|
310
|
+
```
|
|
311
|
+
- The issue number is extracted from the reference `uri` (e.g. `https://github.com/o/r/issues/{N}`)
|
|
312
|
+
3. ? For other reference types (`x-vbrief/jira-ticket`, `x-vbrief/user-request`, `x-vbrief/github-pr`, etc.), follow the appropriate update mechanism
|
|
313
|
+
4. ! Update PROJECT-DEFINITION via `task project:render`
|
|
314
|
+
|
|
315
|
+
⊗ Complete a scope without updating its origins
|
|
316
|
+
~ Completion lifecycle can be triggered during refinement or as a standalone action after a PR merge
|
|
317
|
+
|
|
318
|
+
! When the refinement session files a new umbrella issue (or surfaces one whose current-shape comment is missing), file the umbrella then file its `## Current shape (as of pass-N)` comment per `## Umbrella current-shape convention` in `AGENTS.md` (#1152) -- the edit-in-place comment is the canonical surface every subsequent design pass updates.
|
|
319
|
+
|
|
320
|
+
~ Issue-label hygiene for any umbrella or child issue this skill files: before creating issues, inspect the target repo's existing labels with `gh label list` or the labels API; choose one or more suitable existing labels when practical, or explicitly note that no label was applied. This is a recommendation, not a gate -- do not block issue creation solely because no label fits, and do not invent ad hoc labels outside the repo's existing label set.
|
|
321
|
+
|
|
322
|
+
! When a refinement pass produces a slicing event (rare but possible -- e.g. a design pass on an existing umbrella files N additional Wave-N child issues), record the cohort in `vbrief/.eval/slices.jsonl` via `scripts/slice_record.py::write_slice(...)` with `actor="skill:refinement"` immediately after the children are filed (#1132 / D13). Same call shape as `skills/deft-directive-gh-slice/SKILL.md` Step 6. The cohort record is what makes `task triage:audit --orphans` able to detect Wave-2+ children whose umbrella closes prematurely; without it the production-side drift this surface guards against re-fires. Skip when the pass produced no new child cohort (e.g. a pure re-prioritization).
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
! When the umbrella + children were filed by hand (legacy `gh issue create` / `issue_write` MCP / prior pass-N runs that pre-date this skill's slicing phase), use the canonical retro verb `task slice:record-existing` (#1147 / N7) -- it wraps the same `slice_record.write_slice` helper with `actor="manual:operator"`, takes `--umbrella=N --children=A,B,C [--wave-N=...]` flags, validates each issue via the N5 / #1145 `scm.call` shim, and is idempotent on a matching umbrella + child set (re-run is a no-op; `--force` writes a second record for legitimate multi-session slicing). Companion `task slice:list` enumerates persisted slices for verification. The backfill verb is the canonical retro path for cohorts D13's writer never saw.
|
|
326
|
+
|
|
327
|
+
## CHANGELOG Convention
|
|
328
|
+
|
|
329
|
+
- ! Write ONE batch `CHANGELOG.md` entry at the END of the full refinement session -- not one entry per vBRIEF created or promoted. The batch entry summarizes all changes made during the session.
|
|
330
|
+
- ⊗ Add a CHANGELOG entry after each individual action during refinement -- wait until the full session is complete and write a single summary entry.
|
|
331
|
+
|
|
332
|
+
## PR & Review Cycle
|
|
333
|
+
|
|
334
|
+
After all refinement work is complete:
|
|
335
|
+
|
|
336
|
+
1. ! Ask the user: "Ready to commit and create a PR?"
|
|
337
|
+
2. ! Wait for explicit user confirmation before proceeding.
|
|
338
|
+
|
|
339
|
+
### Pre-Flight (before pushing)
|
|
340
|
+
|
|
341
|
+
! Run all pre-flight checks BEFORE committing and pushing:
|
|
342
|
+
|
|
343
|
+
1. ! Verify `CHANGELOG.md` has an `[Unreleased]` entry covering the refinement changes
|
|
344
|
+
2. ! Run `task check` -- all checks must pass
|
|
345
|
+
3. ! Verify `.github/PULL_REQUEST_TEMPLATE.md` checklist is satisfiable for this PR. If the file is **missing**, do NOT block — copy the canonical template from `templates/PULL_REQUEST_TEMPLATE.md` (ship-with-deft) to `.github/PULL_REQUEST_TEMPLATE.md` in the consumer project, then proceed with pre-flight (#531). If the file exists but contains unsatisfiable checklist items for this PR, call them out to the user before pushing.
|
|
346
|
+
4. ! **Mandatory file review**: Re-read ALL modified files before committing. Explicitly check for:
|
|
347
|
+
- Encoding errors (em-dashes corrupted to replacement characters, BOM artifacts)
|
|
348
|
+
- Unintended duplication (accidental double vBRIEFs or duplicate entries)
|
|
349
|
+
- Structural issues (malformed vBRIEF JSON, broken references)
|
|
350
|
+
- Semantic accuracy (verify that counts and claims in CHANGELOG entries match the actual data)
|
|
351
|
+
|
|
352
|
+
### Commit, Push, and Create PR
|
|
353
|
+
|
|
354
|
+
1. ! Commit with a descriptive message: `docs(vbrief): refinement session -- {summary}`
|
|
355
|
+
2. ! Push the branch to origin
|
|
356
|
+
3. ! Create a PR targeting the appropriate base branch
|
|
357
|
+
|
|
358
|
+
### Review Cycle Handoff
|
|
359
|
+
|
|
360
|
+
! After the PR is created, automatically sequence into `skills/deft-directive-review-cycle/SKILL.md`.
|
|
361
|
+
|
|
362
|
+
- ! Inform the user: "PR #{N} created -- starting review cycle."
|
|
363
|
+
- ! Follow the full review cycle skill from Phase 1 (Deft Process Audit) onward.
|
|
364
|
+
|
|
365
|
+
### EXIT
|
|
366
|
+
|
|
367
|
+
! When the review cycle completes (exit condition met) or the PR is ready for human review:
|
|
368
|
+
|
|
369
|
+
1. ! Explicitly confirm skill exit: "deft-directive-refinement complete -- exiting skill."
|
|
370
|
+
2. ! Provide chaining instructions to the user/agent:
|
|
371
|
+
- If review cycle is complete and PR is approved: "PR #{N} is ready for human merge review."
|
|
372
|
+
- If review cycle is still in progress: "Review cycle handed off to deft-review-cycle. Monitor PR #{N} for Greptile findings."
|
|
373
|
+
- If returning to a monitor agent: "Returning control to monitor agent -- refinement PR #{N} created and review cycle initiated."
|
|
374
|
+
3. ! Do NOT continue into adjacent work after this point -- the skill boundary is an exit condition.
|
|
375
|
+
|
|
376
|
+
## Anti-Patterns
|
|
377
|
+
|
|
378
|
+
- ⊗ Bypass Phase 0 by walking `vbrief/proposed/` or `gh issue list` directly -- `task triage:queue --state=accept` (D11 / #1128) is the canonical ingestion-candidate surface (#1141)
|
|
379
|
+
- ⊗ Skip Phase 0a's `task triage:summary` invocation -- the triage-gate decision (run the triage skill first vs proceed) depends on its output (#1141 / D2 / #1122)
|
|
380
|
+
- ⊗ Silently proceed against an empty cache -- emit the canonical `task triage:welcome` (N3 / #1143) breadcrumb to stderr first (#1141)
|
|
381
|
+
- ⊗ Treat `[RESUME]`-tagged items as leftover -- they are the highest-priority class refinement processes (#1141 / D3 / #1123)
|
|
382
|
+
- ⊗ Skip Phase 1 silently after Phase 0 -- always render the chaining decision so the user knows the entry point shifted (#1141, supersedes #845)
|
|
383
|
+
- ⊗ Auto-accept or auto-reject proposed items without user review
|
|
384
|
+
- ⊗ Create vBRIEFs without origin provenance (`references` linking to the source)
|
|
385
|
+
- ⊗ Ingest items without deduplicating against existing vBRIEF references first
|
|
386
|
+
- ⊗ Auto-update vBRIEFs based on origin changes -- user approves all updates
|
|
387
|
+
- ⊗ Overwrite intentional divergence when reconciling stale origins
|
|
388
|
+
- ⊗ Move vBRIEFs between folders manually -- always use `task scope:*` commands
|
|
389
|
+
- ⊗ Delete vBRIEFs -- use `task scope:cancel` to preserve history
|
|
390
|
+
- ⊗ Complete a scope without updating its origins (closing issues, posting comments)
|
|
391
|
+
- ⊗ Skip deduplication during ingest -- always diff against existing references
|
|
392
|
+
- ⊗ Add a CHANGELOG entry per individual action during refinement -- write one batch entry at the end of the full session
|
|
393
|
+
- ⊗ Proceed to the next proposed item without waiting for user decision during evaluate
|
|
394
|
+
- ⊗ Auto-push without explicit user instruction
|
|
395
|
+
- ⊗ Rerender ROADMAP.md or PROJECT-DEFINITION.vbrief.json after every single accept/reject/promote/demote during high-volume triage -- `task roadmap:render` and `task project:render` are batch checkpoints, not per-edit taxes, and calling them N times for N lifecycle edits turns O(1) render work into O(N) without changing correctness (see #638)
|
|
396
|
+
- ⊗ Return a final backlog view to the user without having run `task roadmap:render` and `task project:render` at least once since the last lifecycle edit -- batch the renders, but do not skip them
|
|
397
|
+
|
|
398
|
+
## See also
|
|
399
|
+
|
|
400
|
+
- Upstream skill: [`../deft-directive-triage/SKILL.md`](../deft-directive-triage/SKILL.md) (D6 / #1130) -- the canonical triage hygiene + queue selection playbook. Refinement Phase 0a consults `task triage:summary` (D2 / #1122) and Phase 0b consumes `task triage:queue --state=accept` (D11 / #1128), both of which are produced by the triage skill's decision flow. `[RESUME]`-tagged items (Phase 0c) originate from D3 (#1123) `--resume-on` conditions documented in the triage skill's Phase 3.
|
|
401
|
+
- Reversibility verb in Phase 4: `task scope:undo <file>` (D15 / #1134).
|
|
402
|
+
- Onboarding (empty-cache fallback target): `task triage:welcome` (N3 / #1143) -- the single chained command a fresh post-upgrade install runs before re-entering refinement.
|
|
403
|
+
- Refs: #1141 (this rewrite), #1119 (umbrella), #1122 (D2), #1128 (D11), #1123 (D3), #1130 (D6), #1134 (D15), #1143 (N3), #1149 (N9 routing).
|