@mgiles/perk 2.3.0 → 3.1.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/README.md +1 -1
- package/extension/adapters/planAdapterPlannotator.ts +135 -91
- package/extension/adapters/planAdapterTombell.ts +5 -3
- package/extension/doors/address.ts +235 -37
- package/extension/doors/annotationPush.ts +924 -0
- package/extension/doors/auditWaveTools.ts +352 -0
- package/extension/doors/ciExecutor.ts +220 -55
- package/extension/doors/commitCompact.ts +98 -10
- package/extension/doors/draftReviewWaveTools.ts +412 -0
- package/extension/doors/dreamWaveTools.ts +475 -0
- package/extension/doors/harvestWaveTools.ts +279 -0
- package/extension/doors/land.ts +1 -0
- package/extension/doors/learn.ts +24 -6
- package/extension/doors/learnFactory.ts +33 -7
- package/extension/doors/lifecycleGates.ts +1 -1
- package/extension/doors/objectiveReviewBrowser.ts +537 -0
- package/extension/doors/objectiveStack.ts +1143 -0
- package/extension/doors/planReviewBrowser.ts +475 -0
- package/extension/doors/plannotatorHandoff.ts +120 -49
- package/extension/doors/prReview.ts +180 -63
- package/extension/doors/prReviewBrowser.ts +31 -23
- package/extension/doors/prReviewDynamic.ts +57 -30
- package/extension/doors/prReviewTerminal.ts +6 -11
- package/extension/doors/reviewWaveTools.ts +397 -0
- package/extension/doors/selfcheck.ts +1 -1
- package/extension/doors/submit.ts +82 -7
- package/extension/factories/gistAuthor.ts +4 -4
- package/extension/factories/gistDraft.ts +1 -1
- package/extension/factories/gistSave.ts +2 -2
- package/extension/factories/objective.ts +7 -7
- package/extension/factories/objectiveAuthor.ts +5 -4
- package/extension/factories/objectiveDraft.ts +153 -30
- package/extension/factories/objectiveDreamReport.ts +347 -0
- package/extension/factories/objectivePlan.ts +163 -9
- package/extension/factories/objectiveSave.ts +90 -2
- package/extension/factories/planMode.ts +5 -3
- package/extension/factories/planReview.ts +304 -46
- package/extension/factories/planTitle.ts +27 -9
- package/extension/hunkFeedback/inbox.ts +389 -0
- package/extension/hunkFeedback/perkFeedback.ts +364 -0
- package/extension/hunkFeedback/receiver.ts +296 -0
- package/extension/hunkFeedback/store.ts +533 -0
- package/extension/index.ts +169 -57
- package/extension/substrate/agentScratch.ts +171 -0
- package/extension/substrate/bindingDelivery.ts +9 -11
- package/extension/substrate/cache.ts +166 -23
- package/extension/substrate/coldDoor.ts +2 -3
- package/extension/substrate/command.ts +9 -6
- package/extension/substrate/config.ts +41 -12
- package/extension/substrate/git.ts +95 -2
- package/extension/substrate/providers.ts +4 -33
- package/extension/substrate/resources.ts +11 -0
- package/extension/substrate/result.ts +16 -7
- package/extension/substrate/sessionData.ts +8 -6
- package/extension/substrate/sessionPointers.ts +4 -5
- package/extension/substrate/structuredOutput.ts +78 -19
- package/extension/substrate/toolGating.ts +179 -23
- package/extension/substrate/workflowState.ts +50 -2
- package/extension/surfaces/footerProvider.ts +6 -6
- package/extension/surfaces/report.ts +38 -12
- package/extension/surfaces/surfaces.ts +213 -275
- package/extension/vendor/btw/btw.ts +94 -17
- package/extension/waves/adversarialReviewWave.ts +181 -0
- package/extension/waves/auditWave.ts +312 -0
- package/extension/waves/draftReviewWave.ts +205 -0
- package/extension/waves/dreamReducerWave.ts +700 -0
- package/extension/waves/dreamReport.ts +1494 -0
- package/extension/waves/dreamWave.ts +927 -0
- package/extension/waves/harvestWave.ts +399 -0
- package/extension/waves/memoryAdapter.ts +14 -1
- package/extension/waves/objectiveExplorerWave.ts +120 -0
- package/extension/waves/ponytail.ts +104 -0
- package/extension/waves/prReviewDynamicWave.ts +383 -72
- package/extension/waves/prReviewWave.ts +175 -25
- package/extension/waves/reportWave.ts +503 -107
- package/extension/waves/reviewClassifierWave.ts +109 -0
- package/extension/waves/rpcAdapter.ts +65 -2
- package/extension/worker/readOnlySession.ts +4 -5
- package/extension/worker/worker.ts +71 -93
- package/extension/workerMain.ts +4 -6
- package/package.json +18 -5
- package/prompts/README.md +19 -0
- package/prompts/_fixtures/live.yaml +115 -65
- package/prompts/commit-and-compact-continuation.md +13 -0
- package/prompts/common/resume-advisory.md +1 -0
- package/prompts/contexts/adapters/plannotator-gist.md +13 -0
- package/prompts/contexts/adapters/plannotator-objective.md +8 -3
- package/prompts/contexts/adapters/plannotator-plan.md +8 -3
- package/prompts/contexts/gist-authoring.md +6 -20
- package/prompts/contexts/objective-authoring.md +6 -18
- package/prompts/stages/address/action.md +3 -14
- package/prompts/stages/address/preview.md +2 -13
- package/prompts/stages/audit.md +18 -0
- package/prompts/stages/conflict-resolution.md +1 -1
- package/prompts/stages/gist-author/seed.md +4 -4
- package/prompts/stages/gist-save.md +1 -1
- package/prompts/stages/implement.md +3 -1
- package/prompts/stages/learn-code.md +1 -1
- package/prompts/stages/learn-docs.md +2 -2
- package/prompts/stages/learn-dream.md +10 -0
- package/prompts/stages/learn-harvest.md +15 -0
- package/prompts/stages/learn-orchestrate.md +1 -1
- package/prompts/stages/objective-author/adopt.md +5 -3
- package/prompts/stages/objective-author/file.md +5 -4
- package/prompts/stages/objective-author/seed.md +5 -4
- package/prompts/stages/objective-land.md +7 -0
- package/prompts/stages/objective-plan/guidance.md +2 -13
- package/prompts/stages/objective-plan/seed.md +5 -12
- package/prompts/stages/objective-recover.md +8 -0
- package/prompts/stages/objective-replan.md +4 -2
- package/prompts/stages/objective-review-browser.md +9 -0
- package/prompts/stages/objective-sync.md +6 -0
- package/prompts/stages/plan-from/adopt.md +2 -2
- package/prompts/stages/plan-from/file.md +2 -2
- package/prompts/stages/plan-review-browser.md +9 -0
- package/prompts/stages/pr-review-browser/active.md +6 -14
- package/prompts/stages/pr-review-browser/foreign.md +6 -14
- package/prompts/stages/pr-review-dynamic.md +6 -6
- package/prompts/stages/pr-review-terminal/active.md +7 -15
- package/prompts/stages/pr-review-terminal/foreign.md +7 -15
- package/prompts/stages/pr-review-terminal/local.md +1 -1
- package/prompts/stages/pr-review.md +5 -5
- package/prompts/stages/replan.md +3 -3
- package/shared/README.md +2 -2
- package/shared/bindings.yaml +15 -0
- package/shared/contracts-history.md +11 -0
- package/shared/contracts.md +5373 -281
- package/shared/providers.yaml +27 -60
- package/shared/registry.yaml +42 -18
- package/shared/schemas/inputs/review-post-batch.schema.json +14 -1
- package/shared/schemas/outputs/objective-doctor.schema.json +487 -0
- package/shared/schemas/outputs/objective-stack-land.schema.json +732 -0
- package/shared/schemas/outputs/objective-stack-recover.schema.json +397 -0
- package/shared/schemas/outputs/objective-stack-status.schema.json +577 -0
- package/shared/schemas/outputs/objective-stack-sync.schema.json +184 -0
- package/shared/schemas/outputs/plan-save.schema.json +12 -0
- package/shared/schemas/outputs/pr-land.schema.json +3 -3
- package/shared/schemas/outputs/pr-submit.schema.json +177 -1
- package/extension/adapters/todoAdapterJuicesharp.ts +0 -102
- package/extension/checkpoints/checkpoints.ts +0 -550
- package/extension/checkpoints/planSteps.ts +0 -108
- package/extension/doors/askUser.ts +0 -198
- package/prompts/common/output-schemas/objective-explorer.md +0 -36
- package/prompts/common/output-schemas/review-classifier.md +0 -47
- package/prompts/contexts/adapters/juicesharp-todo.md +0 -7
package/shared/providers.yaml
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
# id — the stable provider id. NOT the cache.plan-ref `provider` string:
|
|
17
17
|
# that field is the ISSUE BACKEND (the stamped `backend_id`, e.g.
|
|
18
18
|
# "github"), not the seam id — see contracts.md §8.10 / §8.21.
|
|
19
|
-
# seam — `plan` | `
|
|
19
|
+
# seam — `plan` | `footer` | `web` (the three seams; see
|
|
20
20
|
# pluggability-taxonomy.md for the scope fence).
|
|
21
21
|
# package — the foreign Pi package spec added to .pi/settings.json `packages`
|
|
22
22
|
# (e.g. "npm:@tombell/pi-plan"); `null` for perk's own bundled reference
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
# a FOREIGN package because perk owns no native web implementation — its
|
|
26
26
|
# `default: true` entry carries a non-null `package` (the documented exception).
|
|
27
27
|
# adapter — the perk-owned shim module that bridges the foreign surface to the
|
|
28
|
-
# artifact boundary (cache.plan-ref
|
|
28
|
+
# artifact boundary (cache.plan-ref); `null` for the
|
|
29
29
|
# reference provider.
|
|
30
30
|
# default — exactly ONE `true` per seam: the behavior-preserving no-config pick.
|
|
31
31
|
# package_filter — optional Pi object-form filter (extensions/skills/… arrays)
|
|
@@ -39,38 +39,23 @@
|
|
|
39
39
|
# name a provider that exists / has the right seam? — are `doctor`'s job, NOT the
|
|
40
40
|
# loaders. The Python plane is the authoritative validator.
|
|
41
41
|
#
|
|
42
|
-
# Status
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
# `
|
|
46
|
-
# canonical `plan_save` → `cache.plan-ref` contract, and perk VACATES the plan surface at
|
|
42
|
+
# Status: this file ships the substrate (the reference entries + foreign entries per seam), and
|
|
43
|
+
# every seam has a REAL foreign provider. The PLAN adapter: `tombell-plan` is a REAL, selectable
|
|
44
|
+
# plan provider — `planAdapterTombell` bridges `@tombell/pi-plan`'s free-form prose surface to
|
|
45
|
+
# perk's canonical `plan_save` → `cache.plan-ref` contract, and perk VACATES the plan surface at
|
|
47
46
|
# REGISTRATION time (not just handler-time) under a foreign plan selection so the foreign
|
|
48
47
|
# `/plan`/`Ctrl+Alt+P`/`--plan` are the sole registrants (Pi suffixes duplicate command
|
|
49
|
-
# names). The
|
|
50
|
-
# provider — `todoAdapterJuicesharp` carries perk's implement-progress discipline onto
|
|
51
|
-
# `@juicesharp/rpiv-todo`'s checklist overlay (injection-only, active-workflow-gated), and
|
|
52
|
-
# perk's own checkpoints simply DEFER at runtime (Node 3.1) — NO registration-time vacating,
|
|
53
|
-
# because the todo seam has no command-name collision (`/checkpoints` vs the overlay's own
|
|
54
|
-
# command). The DEFAULT path (the reference providers) is the hard guarantee.
|
|
48
|
+
# names). The DEFAULT path (the reference providers) is the hard guarantee.
|
|
55
49
|
#
|
|
56
|
-
# The
|
|
57
|
-
# the
|
|
58
|
-
# (`@juicesharp/rpiv-ask-user-question`) registers a tool with the IDENTICAL name, and tools
|
|
59
|
-
# (unlike commands) do NOT get `:N` suffixes — a same-named tool replaces/warns by extension load
|
|
60
|
-
# order. So the adapter is VACATE-ONLY (`adapter: null`, no shim, no injected context): under a
|
|
61
|
-
# foreign askuser selection perk's `registerAskUser` registers NOTHING at REGISTRATION time,
|
|
62
|
-
# leaving exactly one `ask_user_question` standing. Under the default (`perk-ask-user`) the foreign
|
|
63
|
-
# package is never installed, so perk's tool is the sole registrant.
|
|
64
|
-
#
|
|
65
|
-
# The FOOTER seam is the SECOND INTERFACE seam (no durable artifact to bridge), mirroring askuser
|
|
66
|
-
# but with INSTALL-SITE (runtime) vacating rather than registration-time vacating: perk installs
|
|
50
|
+
# The FOOTER seam is one of the TWO INTERFACE seams (with web; no durable artifact to bridge),
|
|
51
|
+
# vacated at the INSTALL SITE (runtime) rather than registration time: perk installs
|
|
67
52
|
# its own footer (`installPerkFooter`) inside the `session_start` event handler, so under a foreign
|
|
68
53
|
# `[providers] footer` selection perk simply does NOT call `installPerkFooter` (a runtime guard at
|
|
69
54
|
# that single install site, keyed off `ctx.cwd`), leaving the foreign footer (`pi-powerline-footer`,
|
|
70
55
|
# `pi-bar`, or `@tombell/pi-status`) as the sole footer surface. `adapter: null`, no shim: for
|
|
71
|
-
# `pi-powerline-footer`/`pi-bar` perk's objective
|
|
72
|
-
# automatically via the already-publishing
|
|
73
|
-
# statuses), so the bridge is automatic; `@tombell/pi-status` is the exception (it does NOT render
|
|
56
|
+
# `pi-powerline-footer`/`pi-bar` perk's objective progress reaches the foreign footer
|
|
57
|
+
# automatically via the already-publishing single-value `perk` `setStatus` slot (both render
|
|
58
|
+
# extension statuses), so the bridge is automatic; `@tombell/pi-status` is the exception (it does NOT render
|
|
74
59
|
# extension statuses — see the `pi-status-footer` note below).
|
|
75
60
|
# Fail-safe: any config-read error resolves to the reference id → perk installs its footer (the
|
|
76
61
|
# default path is the hard zero-change guarantee).
|
|
@@ -79,14 +64,14 @@
|
|
|
79
64
|
# `[providers] footer` (no footer outcome ever needs a manual `packages` edit):
|
|
80
65
|
# - `pi-status-footer` (`npm:@tombell/pi-status`) is vacate-only like the two above, BUT — unlike
|
|
81
66
|
# `powerline-footer`/`pi-bar-footer` — pi-status does NOT render extension statuses, so perk's
|
|
82
|
-
# objective
|
|
67
|
+
# objective progress is NOT shown in the footer when it is selected. This is an
|
|
83
68
|
# accepted limitation (it matches what pi-status already does today); perk does not build a
|
|
84
69
|
# status-bridge adapter for it (it is a genuine interface seam).
|
|
85
70
|
# - `pi-default` (`package: null`) is the "install nothing / leave pi's stock built-in footer"
|
|
86
71
|
# option: perk vacates (gate false), convergence adds no package, so pi's own footer stands.
|
|
87
72
|
#
|
|
88
|
-
# The WEB seam is the
|
|
89
|
-
# novelty: it is the
|
|
73
|
+
# The WEB seam is the OTHER INTERFACE seam (no durable artifact to bridge), but with a genuine
|
|
74
|
+
# novelty: it is the ONLY seam whose `default: true` provider has a NON-NULL `package`. perk owns
|
|
90
75
|
# no native web-research implementation, so the behavior-preserving reference (`pi-web-access`,
|
|
91
76
|
# zero-config Exa search + content fetch + the bundled `librarian` skill) is itself a foreign npm
|
|
92
77
|
# package. Selection simply SWAPS which web package the provider-convergence installs — `adapter:
|
|
@@ -102,6 +87,17 @@
|
|
|
102
87
|
# IS the surface pick). The hunk CLI converges unconditionally (init/doctor's best-effort
|
|
103
88
|
# `review-cli` install/verify); the plannotator package rides the plan seam's `plannotator-plan`
|
|
104
89
|
# entry.
|
|
90
|
+
#
|
|
91
|
+
# There is NO askuser seam anymore: it is RETIRED to a REQUIRED BORROW. After perk's first-party
|
|
92
|
+
# `ask_user_question` tool was deleted the seam had exactly one selectable provider — nothing to
|
|
93
|
+
# select (the borrow-vs-seam criterion) — so `ask_user_question` is now the borrowed
|
|
94
|
+
# `@juicesharp/rpiv-ask-user-question` questionnaire, installed for every repo via
|
|
95
|
+
# `BORROWED_PACKAGES` (convergence/init/settings.py).
|
|
96
|
+
#
|
|
97
|
+
# There is NO todo seam anymore: it is RETIRED to a REQUIRED BORROW. After the seam had exactly
|
|
98
|
+
# one selectable provider — nothing to select (the borrow-vs-seam criterion) — the checklist
|
|
99
|
+
# overlay became the borrowed `@juicesharp/rpiv-todo`, installed for every repo via
|
|
100
|
+
# `BORROWED_PACKAGES` (convergence/init/settings.py).
|
|
105
101
|
|
|
106
102
|
schema_version: 1
|
|
107
103
|
|
|
@@ -111,16 +107,6 @@ providers:
|
|
|
111
107
|
package: null # null ⇒ perk's bundled reference provider (no foreign package)
|
|
112
108
|
adapter: null # null ⇒ no shim needed; perk produces the contract natively
|
|
113
109
|
default: true # the behavior-preserving no-config pick for the plan seam
|
|
114
|
-
- id: perk-checkpoints # perk's own checkpoints
|
|
115
|
-
seam: todo
|
|
116
|
-
package: null
|
|
117
|
-
adapter: null
|
|
118
|
-
default: true # the behavior-preserving no-config pick for the todo seam
|
|
119
|
-
- id: perk-ask-user # perk's own ask_user_question tool (extension/doors/askUser.ts)
|
|
120
|
-
seam: askuser
|
|
121
|
-
package: null
|
|
122
|
-
adapter: null
|
|
123
|
-
default: true # the behavior-preserving no-config pick for the askuser seam
|
|
124
110
|
|
|
125
111
|
# --- foreign entries ---
|
|
126
112
|
- id: tombell-plan # REAL plan provider (Node 2.3) — planAdapterTombell bridges it
|
|
@@ -145,25 +131,6 @@ providers:
|
|
|
145
131
|
# event flow (its browser review UI). Saving stays the human-run `/plan-save`.
|
|
146
132
|
# No `package_filter`: `@plannotator/pi-extension`'s `pi.extensions` is `["./"]` (the sole
|
|
147
133
|
# extension is the package root), so omitting the filter loads exactly that one extension.
|
|
148
|
-
- id: juicesharp-todo # REAL todo provider (Node 3.2) — todoAdapterJuicesharp bridges it
|
|
149
|
-
seam: todo
|
|
150
|
-
package: "npm:@juicesharp/rpiv-todo" # the foreign Pi package to add to `packages`
|
|
151
|
-
adapter: "todoAdapterJuicesharp" # the perk-owned shim carrying progress discipline onto it
|
|
152
|
-
default: false
|
|
153
|
-
# No `package_filter`: `@juicesharp/rpiv-todo` is a single-concern checklist overlay, so omitting
|
|
154
|
-
# the filter ("load all of that type") loads its bundled extension. The smoke's manual half is the
|
|
155
|
-
# gate that no perk surface collides; a targeted `extensions` filter is a follow-up if one ever does.
|
|
156
|
-
- id: juicesharp-ask-user # REAL askuser provider — VACATE-ONLY (interface seam, no adapter)
|
|
157
|
-
seam: askuser
|
|
158
|
-
package: "npm:@juicesharp/rpiv-ask-user-question" # the foreign Pi package to add to `packages`
|
|
159
|
-
adapter: null # VACATE-ONLY: the foreign tool shares the exact name `ask_user_question`,
|
|
160
|
-
# so perk's `registerAskUser` registers NOTHING under this selection —
|
|
161
|
-
# there is no durable artifact to bridge (interface seam), and the
|
|
162
|
-
# foreign tool self-documents via its own `promptGuidelines`.
|
|
163
|
-
default: false
|
|
164
|
-
# No `package_filter`: the verified manifest is `{"extensions": ["./index.ts"]}`, so omitting the
|
|
165
|
-
# filter ("load all of that type") loads exactly that one extension — the same reasoning as the
|
|
166
|
-
# tombell-plan / juicesharp-todo entries.
|
|
167
134
|
- id: perk-footer # perk's own footer (extension/surfaces/surfaces.ts installPerkFooter)
|
|
168
135
|
seam: footer
|
|
169
136
|
package: null
|
|
@@ -189,7 +156,7 @@ providers:
|
|
|
189
156
|
package: "npm:@tombell/pi-status" # the foreign Pi package to add to `packages`
|
|
190
157
|
adapter: null # VACATE-ONLY: the footer produces no durable artifact (interface seam).
|
|
191
158
|
# UNLIKE powerline/pi-bar, pi-status does NOT render extension statuses,
|
|
192
|
-
# so perk's objective
|
|
159
|
+
# so perk's objective progress is NOT shown in the footer
|
|
193
160
|
# under this selection (an accepted limitation — matches pi-status today;
|
|
194
161
|
# no status-bridge adapter is built).
|
|
195
162
|
default: false
|
package/shared/registry.yaml
CHANGED
|
@@ -28,6 +28,7 @@ state_keys:
|
|
|
28
28
|
- review-threads # review threads (distinct API from comments)
|
|
29
29
|
- learn # the perk:learn knowledge-capture issue (P2.T8b)
|
|
30
30
|
- gist # the perk:gist statement-of-intent issue (contracts.md §8.41)
|
|
31
|
+
- stack # the native stacked-PR resource (contracts.md §8.47)
|
|
31
32
|
# Tier 2 · .perk/workflow/ — the local cache (see contracts.md §8.1).
|
|
32
33
|
cache:
|
|
33
34
|
- plan # materialized plan body cache
|
|
@@ -52,6 +53,11 @@ state_keys:
|
|
|
52
53
|
# `_check_doors_and_run_id` enforces `warm == keep` and `cold_local`/`cold_remote == mint`
|
|
53
54
|
# for every stage (Q2). It is a shape-locked map, NOT free per-stage data — the field is kept
|
|
54
55
|
# because the shape is the contract, not because stages vary.
|
|
56
|
+
# `worktree` vocabulary (positioned by the one selector/positioner, `launch.resolve_worktree`
|
|
57
|
+
# — contracts.md §8.38): `none` = the invoking checkout; `create` = create the `plan-<id>`
|
|
58
|
+
# branch/worktree when missing (idempotent validated reuse when present); `reuse` = reuse a
|
|
59
|
+
# VALIDATED local checkout, or (learn excepted) restore the EXISTING `origin/plan-<id>` branch
|
|
60
|
+
# non-destructively when the checkout is missing — `reuse` never creates a new plan branch.
|
|
55
61
|
# `command` is the human/contract LABEL for the stage's command, not the routing table: the
|
|
56
62
|
# actual dedicated cold-door routing lives in code via `perk/cli/stages.py` `DEDICATED_STAGES`
|
|
57
63
|
# (the generic launcher generator skips those ids). The field documents intent; it does not route.
|
|
@@ -72,7 +78,7 @@ stages:
|
|
|
72
78
|
command: gist author # dedicated seeded cold door (perk gist author)
|
|
73
79
|
requires: [] # nothing exists yet — this stage CREATES the gist
|
|
74
80
|
reads: []
|
|
75
|
-
writes: [session.workflow-state, cache.session-data] # the read-only `mode` append; gist_draft writes the gist-draft artifact + its session_artifacts pointer
|
|
81
|
+
writes: [session.workflow-state, cache.session-data, cache.scratch] # the read-only `mode` append; gist_draft writes the gist-draft artifact + its session_artifacts pointer; eligible turns may provision agent scratch
|
|
76
82
|
predecessors: [] # an initial of the disconnected gist component
|
|
77
83
|
successors: [gist-save]
|
|
78
84
|
|
|
@@ -85,7 +91,7 @@ stages:
|
|
|
85
91
|
command: gist save # the gist_save terminating tool + /gist-save command
|
|
86
92
|
requires: []
|
|
87
93
|
reads: []
|
|
88
|
-
writes: [github.gist, session.workflow-state] # create the gist issue/project
|
|
94
|
+
writes: [github.gist, session.workflow-state, cache.scratch] # create the gist issue/project; eligible turns may provision agent scratch
|
|
89
95
|
predecessors: [gist-author]
|
|
90
96
|
successors: [] # a terminal — consumption happens via the adoption doors, not edges
|
|
91
97
|
|
|
@@ -98,7 +104,7 @@ stages:
|
|
|
98
104
|
command: objective author # P3.T2: dedicated seeded cold door (perk objective author)
|
|
99
105
|
requires: [] # nothing exists yet — this stage CREATES the objective
|
|
100
106
|
reads: []
|
|
101
|
-
writes: [session.workflow-state, cache.session-data] # the read-only `mode` append (the gate toggle); #352 Node 2.1: objective_draft writes the objective-draft artifact + its session_artifacts pointer
|
|
107
|
+
writes: [session.workflow-state, cache.session-data, cache.scratch] # the read-only `mode` append (the gate toggle); #352 Node 2.1: objective_draft writes the objective-draft artifact + its session_artifacts pointer; eligible turns may provision agent scratch
|
|
102
108
|
predecessors: [] # the new single initial (authoring precedes everything)
|
|
103
109
|
successors: [objective-save]
|
|
104
110
|
|
|
@@ -111,7 +117,7 @@ stages:
|
|
|
111
117
|
command: objective save # P3.T2: the objective_save terminating tool + /objective-save command
|
|
112
118
|
requires: []
|
|
113
119
|
reads: []
|
|
114
|
-
writes: [github.objective, session.workflow-state] # create the objective issue; link active_objective
|
|
120
|
+
writes: [github.objective, session.workflow-state, cache.scratch] # create the objective issue; link active_objective; eligible turns may provision agent scratch
|
|
115
121
|
predecessors: [objective-author]
|
|
116
122
|
successors: [objective-plan]
|
|
117
123
|
|
|
@@ -124,7 +130,7 @@ stages:
|
|
|
124
130
|
command: objective plan # P2.T10: dedicated cold door (perk objective plan) + /objective-plan
|
|
125
131
|
requires: [github.objective] # an objective issue must exist
|
|
126
132
|
reads: [github.objective] # roadmap nodes + next-node selection
|
|
127
|
-
writes: [github.objective, session.workflow-state, cache.session-data] # mark node planning; set active_objective; #339 Node 2.1: plan_draft writes the working-plan artifact + its session_artifacts pointer
|
|
133
|
+
writes: [github.objective, session.workflow-state, cache.session-data, cache.scratch] # mark node planning; set active_objective; #339 Node 2.1: plan_draft writes the working-plan artifact + its session_artifacts pointer; eligible turns may provision agent scratch
|
|
128
134
|
predecessors: [objective-save] # P3.T2: objective-save now precedes planning
|
|
129
135
|
successors: [plan]
|
|
130
136
|
|
|
@@ -137,7 +143,7 @@ stages:
|
|
|
137
143
|
command: plan # slash = /plan (perk-owned P2.T2a; toggles the read-only tool gate)
|
|
138
144
|
requires: []
|
|
139
145
|
reads: []
|
|
140
|
-
writes: [session.workflow-state, cache.session-data] # P2.T2a: /plan enter/exit appends `mode`; #339 Node 2.1: plan_draft writes the working-plan artifact + its session_artifacts pointer
|
|
146
|
+
writes: [session.workflow-state, cache.session-data, cache.scratch] # P2.T2a: /plan enter/exit appends `mode`; #339 Node 2.1: plan_draft writes the working-plan artifact + its session_artifacts pointer; eligible turns may provision agent scratch
|
|
141
147
|
predecessors: [objective-plan] # P2.T10: objective-plan is the new single initial
|
|
142
148
|
successors: [save]
|
|
143
149
|
|
|
@@ -150,7 +156,7 @@ stages:
|
|
|
150
156
|
command: plan save # cold: the merged `perk plan save` door (Node 3.2); warm twin: the plan_save tool + /plan-save command
|
|
151
157
|
requires: []
|
|
152
158
|
reads: []
|
|
153
|
-
writes: [github.plan, cache.plan-ref, session.workflow-state] # T2a: plan issue; T2b: plan-ref pointer; T3: warm door appends active_plan_ref
|
|
159
|
+
writes: [github.plan, cache.plan-ref, session.workflow-state, cache.scratch] # T2a: plan issue; T2b: plan-ref pointer; T3: warm door appends active_plan_ref; eligible turns may provision agent scratch
|
|
154
160
|
predecessors: [plan]
|
|
155
161
|
successors: [implement]
|
|
156
162
|
|
|
@@ -163,7 +169,7 @@ stages:
|
|
|
163
169
|
command: implement
|
|
164
170
|
requires: [cache.plan-ref] # T4: cold door derives plan-<pr_id> from the active ref
|
|
165
171
|
reads: [cache.plan-ref] # T4: positions the worktree from the ref (agent reads github.plan)
|
|
166
|
-
writes: [session.workflow-state] # T4: the worktree session links active_plan_ref on session_start
|
|
172
|
+
writes: [session.workflow-state, cache.scratch] # T4: the worktree session links active_plan_ref on session_start; eligible turns may provision agent scratch
|
|
167
173
|
predecessors: [save]
|
|
168
174
|
successors: [submit]
|
|
169
175
|
|
|
@@ -175,23 +181,26 @@ stages:
|
|
|
175
181
|
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
176
182
|
command: pr submit
|
|
177
183
|
requires: [cache.plan-ref] # T5a: reads the active ref to derive the branch
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
# Stacked route (§8.47): the delivery publish operation reads the objective (train +
|
|
185
|
+
# journal fold) and the native stack, and writes the journal (objective comments), the
|
|
186
|
+
# checkpoint pair (plan header), and the stack registration. Incremental touches neither.
|
|
187
|
+
reads: [cache.plan-ref, github.plan, github.objective, github.stack]
|
|
188
|
+
writes: [github.pr, github.plan, github.objective, github.stack, cache.scratch]
|
|
180
189
|
predecessors: [implement]
|
|
181
190
|
successors: [address]
|
|
182
191
|
|
|
183
192
|
- id: address
|
|
184
|
-
summary: Classify PR review feedback
|
|
193
|
+
summary: Classify PR review feedback, publish committed fixes, then resolve the threads.
|
|
185
194
|
mode: read-write
|
|
186
195
|
worktree: reuse
|
|
187
196
|
doors: { warm: true, cold_local: true, cold_remote: true } # bounded agentic stage — remotely runnable
|
|
188
197
|
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
189
198
|
command: pr address
|
|
190
|
-
#
|
|
191
|
-
#
|
|
199
|
+
# The isolated child classifies; the parent fixes, then §8.52's finalizer routes through
|
|
200
|
+
# submit before resolving. The stacked route owns the objective journal + native stack.
|
|
192
201
|
requires: [github.pr] # the PR whose feedback we address
|
|
193
|
-
reads: [cache.plan-ref, github.pr, github.review-threads, github.comments]
|
|
194
|
-
writes: [github.review-threads, github.comments, github.pr, session.workflow-state]
|
|
202
|
+
reads: [cache.plan-ref, github.plan, github.pr, github.review-threads, github.comments, github.objective, github.stack]
|
|
203
|
+
writes: [github.review-threads, github.comments, github.pr, github.plan, github.objective, github.stack, session.workflow-state, cache.scratch]
|
|
195
204
|
predecessors: [submit]
|
|
196
205
|
successors: [land]
|
|
197
206
|
|
|
@@ -204,14 +213,16 @@ stages:
|
|
|
204
213
|
command: pr land
|
|
205
214
|
requires: [github.pr] # T5b: the PR to merge must exist
|
|
206
215
|
reads: [cache.plan-ref, github.pr, github.objective] # T5b ref->branch->PR; T11a node lookup
|
|
207
|
-
writes: [github.pr, cache.markers, github.objective, github.plan] # T5b merge+marker; T11a mechanical node-done; §8.36 learn_state header stamp
|
|
216
|
+
writes: [github.pr, cache.markers, github.objective, github.plan, cache.scratch] # T5b merge+marker; T11a mechanical node-done; §8.36 learn_state header stamp; eligible turns may provision agent scratch
|
|
208
217
|
predecessors: [address]
|
|
209
218
|
successors: [learn]
|
|
210
219
|
|
|
211
220
|
- id: learn
|
|
212
221
|
summary: Capture learnings from the landed run; clears the pending-learn marker.
|
|
213
222
|
mode: read-write
|
|
214
|
-
worktree: reuse # pending-learn blocks worktree deletion until this runs (Q5)
|
|
223
|
+
worktree: reuse # pending-learn blocks worktree deletion until this runs (Q5);
|
|
224
|
+
# learn NEVER restores a missing checkout (post-merge the remote
|
|
225
|
+
# branch is commonly gone; its session evidence is machine-local)
|
|
215
226
|
doors: { warm: true, cold_local: true, cold_remote: false }
|
|
216
227
|
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
217
228
|
command: learn
|
|
@@ -223,6 +234,19 @@ stages:
|
|
|
223
234
|
# keys (no new gateway op) — the existing learn tool / learn capture worker still persist.
|
|
224
235
|
requires: [cache.markers] # pending-learn gates the worktree
|
|
225
236
|
reads: [cache.markers, cache.plan-ref] # was it set? + the plan ref -> issue number/run_id
|
|
226
|
-
writes: [cache.markers, github.learn, github.comments, github.plan] # clear marker; create learn issue + back-link; §8.36 learn_state header stamp
|
|
237
|
+
writes: [cache.markers, github.learn, github.comments, github.plan, cache.scratch] # clear marker; create learn issue + back-link; §8.36 learn_state header stamp; eligible turns may provision agent scratch
|
|
227
238
|
predecessors: [land]
|
|
228
239
|
successors: []
|
|
240
|
+
|
|
241
|
+
- id: audit
|
|
242
|
+
summary: Judge session-audit evidence packets via the auditor wave (dev-only door in perk-dev).
|
|
243
|
+
mode: read-only
|
|
244
|
+
worktree: none # runs in the invoking checkout; the one write is gitignored scratch
|
|
245
|
+
doors: { warm: false, cold_local: true, cold_remote: false }
|
|
246
|
+
run_id: { warm: keep, cold_local: mint, cold_remote: mint }
|
|
247
|
+
command: audit judge # label only — the dedicated cold door lives in perk-dev, not perk
|
|
248
|
+
requires: []
|
|
249
|
+
reads: []
|
|
250
|
+
writes: [session.workflow-state, cache.scratch] # the claim append; run_audit_wave writes <bundle>/verdicts.json under scratch
|
|
251
|
+
predecessors: [] # a deliberately isolated node — the dev-only audit component
|
|
252
|
+
successors: []
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"additionalProperties": false,
|
|
32
|
-
"description": "The strict `/pr-review` batch shape
|
|
32
|
+
"description": "The strict `/pr-review` batch shape.\n\n`comments`/`fyi` stay nullable so an explicit `null` is tolerated (today's behavior),\nnormalized to `[]` in conversion. `line: int` and `expected_pr: int` reject\n`bool`/`float`/`str` under strict validation.",
|
|
33
33
|
"properties": {
|
|
34
34
|
"verdict": {
|
|
35
35
|
"enum": [
|
|
@@ -73,6 +73,19 @@
|
|
|
73
73
|
],
|
|
74
74
|
"default": null,
|
|
75
75
|
"title": "Fyi"
|
|
76
|
+
},
|
|
77
|
+
"expected_pr": {
|
|
78
|
+
"anyOf": [
|
|
79
|
+
{
|
|
80
|
+
"exclusiveMinimum": 0,
|
|
81
|
+
"type": "integer"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "null"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"default": null,
|
|
88
|
+
"title": "Expected Pr"
|
|
76
89
|
}
|
|
77
90
|
},
|
|
78
91
|
"required": [
|