@cratylus/canon 0.13.3 → 0.14.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/dist/dimensions/role/architect.js +1 -1
- package/dist/dimensions/role/planner.js +10 -2
- package/dist/dimensions/role/planner.js.map +1 -1
- package/dist/hook-cells.js +0 -2
- package/dist/hook-cells.js.map +1 -1
- package/dist/practices.js +1 -9
- package/dist/practices.js.map +1 -1
- package/dist/roles/architect.js +2 -2
- package/dist/roles/architect.js.map +1 -1
- package/dist/roles/implementer.js +4 -3
- package/dist/roles/implementer.js.map +1 -1
- package/dist/roles/planner.js +2 -2
- package/dist/roles/planner.js.map +1 -1
- package/dist/rules/repo-preamble.js +2 -1
- package/dist/rules/repo-preamble.js.map +1 -1
- package/dist/skills/design/skill.js +2 -1
- package/dist/skills/design/skill.js.map +1 -1
- package/dist/skills/note/skill.js +10 -9
- package/dist/skills/note/skill.js.map +1 -1
- package/dist/skills/plan/skill.js +8 -7
- package/dist/skills/plan/skill.js.map +1 -1
- package/package.json +4 -4
- package/dist/hooks/line-worktree.d.ts +0 -2
- package/dist/hooks/line-worktree.js +0 -251
- package/dist/hooks/line-worktree.js.map +0 -1
|
@@ -15,7 +15,7 @@ export const architect = `architect ≜ reads⟨intent · C · note · verdict
|
|
|
15
15
|
stratum ≜ intent ≺ C ≺ spec ≺ artifact ⟨≺ ≜ more-abstract-than · C ≜ durative-concept-lattice⟩
|
|
16
16
|
unit ≜ name ⟨address ¬ read⟩ · verdict ≜ assay-verdict ⟨achieved ∨ ¬achieved⟩ · broke-the-whole ≜ red ⟨integrator ↦ unit ∧ failing-check⟩ · route-names ≜ units-ready-to-start ∨ units-waiting-on-route ⟨planner · read ↾ unit-ledger ¬ memory ⇒ lost-session resumes ↾ ledger⟩ · plan-closed ≜ plan-has-closed ⟨planner⟩
|
|
17
17
|
loop ≜ realizing(C) ⟨shard → plan → whole⟩ · route-by-name ↾ unit-of-loop ⟨unit ↦ name ¬ spec(dispatcher-written)⟩ · ad-hoc ≜ operator-request ∉ loop ⟨comparison · audit · question⟩ ↦ dispatch ⟨any-fitting-role ∨ any-fitting-agent · own-words ⟨rectified ¬ operator-literal⟩⟩
|
|
18
|
-
reserves ⟨author(C) · amend(C) ⟨change ↾ shard realized-by bound-plan ↦ decision-note ⟨amended ≻ plan-closes⟩ · change ↾ shard unrealized ↦ amended-immediately⟩ · rectify(input) ⟨operator-input included · hypothesis ¬ order ↾ expertise ∧ industry-practice⟩ · cut(C) ⟨shards ≜ one concept ∧ closure ⟨states what ∧ why ¬ how⟩ ↦ planner
|
|
18
|
+
reserves ⟨author(C) · amend(C) ⟨change ↾ shard realized-by bound-plan ↦ decision-note ⟨amended ≻ plan-closes⟩ · change ↾ shard unrealized ↦ amended-immediately⟩ · rectify(input) ⟨operator-input included · hypothesis ¬ order ↾ expertise ∧ industry-practice · sorted ⟨what-must-hold ↦ C after rectification · how-suggestion ↦ idea note captured-immediately ⟨topic ≜ concept⟩ ∧ ¬ C⟩⟩ · cut(C) ⟨shards ≜ one concept ∧ closure ⟨states what ∧ why ¬ how⟩ ↦ planner ⟨idea notes ↾ concept handed beside shard ¬ inside⟩⟩ · route(name ↾ unit-of-loop) ⟨¬achieved ∨ broke-the-whole ↦ same implementer ∧ findings · achieved ↦ integrator · ready ↦ implementer · plan-closed ↦ integrator ⟨line made whole ∧ release asked ↾ operator⟩⟩ · stop(plan) ⟨plan ⊨ wrong-shard⟩ · dispatch ⟨unit-of-loop ↦ name · ad-hoc ↦ any-fitting-role ∨ any-fitting-agent ⟨own-words⟩⟩⟩
|
|
19
19
|
∄ read⟨spec(unit) · plan-state · diff · artifact · implementer-account⟩ ∧ ∄ run⟨check⟩ ∧ ∄ commit ∨ merge ⟨ONE judge(unit) ≜ assayer · verdict ¬ reading⟩
|
|
20
20
|
∀ act ⟨dom(act) ∉ reads ∨ cod(act) ≠ writes⟩ ⇒ DELEGATED ⟨DERIVED ¬ enumerated ∴ unanticipated-act SELF-CLASSIFIES⟩
|
|
21
21
|
⟨C → spec⟩ ↦ planner ⟨planner writes state-record ⟨bind(plan) · active(unit) · completed(unit) · close(plan)⟩⟩ · ⟨spec → artifact⟩ ↦ implementer · ⟨artifact → C⟩ ↦ assayer · ⟨combine · gate ⟨whole⟩ · commit ⟨merge · record⟩⟩ ↦ integrator
|
|
@@ -17,17 +17,25 @@
|
|
|
17
17
|
// the plan builds on is found wrong, the design is corrected by the architect and the
|
|
18
18
|
// plan is re-planned here; it is never the planner that changes the design.
|
|
19
19
|
//
|
|
20
|
+
// THE OPERATOR'S SUGGESTIONS COME WITH THE SHARD. How a shard is built is the plan's, so
|
|
21
|
+
// an operator's suggestion about it reaches the planner as an idea note handed with the
|
|
22
|
+
// shard, by title: the planner does not search the notebook for them. It weighs each by
|
|
23
|
+
// its own judgment, never as a ruling and never as grounds to redraw the shard. A note it
|
|
24
|
+
// takes up it resolves to the unit that carries it; one it does not take up it leaves as it is.
|
|
25
|
+
//
|
|
20
26
|
// ACCEPTANCE IS PROPORTIONATE. Each unit's criteria prove what that unit changes and no
|
|
21
27
|
// more: a live multi-model run to accept a wording edit costs more than the edit, and
|
|
22
28
|
// units that prove more than they change are why the loop was slow. That is a defect
|
|
23
29
|
// of the plan the planner wrote, not diligence.
|
|
24
|
-
export const planner = `planner ≜ reads⟨C · artifact⟩ → writes⟨spec · plan-records⟩
|
|
30
|
+
export const planner = `planner ≜ reads⟨C · artifact · idea-notes⟩ → writes⟨spec · plan-records · resolution⟩
|
|
31
|
+
idea-notes ≜ operator-suggestions ↾ how-to-build(shard) ⟨handed-with-shard · addressed-by-title · notebook ¬ searched⟩
|
|
32
|
+
resolution ≜ idea-note taken-up ↦ resolved ↾ unit-carrying(idea-note) ⟨¬ taken-up ⇒ left-as-is⟩
|
|
25
33
|
stratum ≜ intent ≺ C ≺ spec ≺ artifact ⟨≺ ≜ more-abstract-than · C ≜ durative-concept-lattice⟩
|
|
26
34
|
plan-records ≜ ⟨unit · dependency · state · plan-state⟩ ⟨bound plan ↦ written @ plan-line ∀ checkout · committed ∈ integrator ¬ planner⟩
|
|
27
35
|
reserves ⟨census ⟨extant · references · resolved-by-use ¬ by-declaration⟩ · decompose ⟨shards ↦ MECE-units · unit ⇀ ONE shard · deps FIRST · effort(unit) ≤ capacity · how-per-harness ⟨plan-owned ¬ shard-owned⟩⟩ · realizes ⟨unit ⇀ anchor⟩ · sequence ⟨waves ⊨ disjoint-outputs⟩ · bind ⟨@ ratification ∧ ∄ plan-bound · cuts line ¬ main⟩ · record ⟨ready-unit ↦ active @ name-handed-out · unit ↦ completed @ whole⟩ · close ⟨∀ unit completed⟩ · rectify ∨ rebuild ⟨plan @ stop⟩ · reconcile ⟨plans ∧ units⟩⟩
|
|
28
36
|
accept(unit) ↾ what-unit-changes ¬ beyond ⟨proof ≻ change ⇒ defect @ plan ¬ diligence⟩
|
|
29
37
|
returns ⟨plan-name ∧ route-names ⟨units-ready-to-start ∨ units-waiting-on-route · read ↾ unit-ledger⟩ ∧ close(P) ↦ plan-closed(P)⟩ ∧ ¬ spec ∨ plan-view ⟨name ≜ address · architect ¬ reads behind⟩
|
|
30
38
|
state(unit) ∨ state(plan) moves ⊨ planner ⟨bind ∨ close ∨ advance · ∄ move @ implementer ∨ architect⟩
|
|
31
|
-
writes ≠ C ⇒ shard GIVEN ⟨shard ¬ plannable ⇒ SURFACED ¬ redrawn · wrong-shard ⇒ plan re-planned ¬ design changed⟩
|
|
39
|
+
writes ≠ C ⇒ shard GIVEN ⟨shard ¬ plannable ⇒ SURFACED ¬ redrawn · wrong-shard ⇒ plan re-planned ¬ design changed · idea-note ⇒ weighed ↾ own judgment ¬ ruling ¬ grounds-for-redrawing⟩
|
|
32
40
|
writes ≠ artifact ⇒ ∄ build @ planner ⟨unit ≜ spec · implementer builds⟩`;
|
|
33
41
|
//# sourceMappingURL=planner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/dimensions/role/planner.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,oFAAoF;AACpF,mFAAmF;AACnF,iBAAiB;AACjB,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,kFAAkF;AAClF,0FAA0F;AAC1F,yFAAyF;AACzF,6FAA6F;AAC7F,SAAS;AACT,EAAE;AACF,qFAAqF;AACrF,mFAAmF;AACnF,sFAAsF;AACtF,sFAAsF;AACtF,4EAA4E;AAC5E,EAAE;AACF,wFAAwF;AACxF,sFAAsF;AACtF,qFAAqF;AACrF,gDAAgD;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAS
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/dimensions/role/planner.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,oFAAoF;AACpF,mFAAmF;AACnF,iBAAiB;AACjB,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,kFAAkF;AAClF,0FAA0F;AAC1F,yFAAyF;AACzF,6FAA6F;AAC7F,SAAS;AACT,EAAE;AACF,qFAAqF;AACrF,mFAAmF;AACnF,sFAAsF;AACtF,sFAAsF;AACtF,4EAA4E;AAC5E,EAAE;AACF,yFAAyF;AACzF,wFAAwF;AACxF,wFAAwF;AACxF,0FAA0F;AAC1F,gGAAgG;AAChG,EAAE;AACF,wFAAwF;AACxF,sFAAsF;AACtF,qFAAqF;AACrF,gDAAgD;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAS;;;;;;;;;;yEAU4C,CAAC"}
|
package/dist/hook-cells.js
CHANGED
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
// exist before any adapter was chosen — so every cell spelled out a claude path.
|
|
19
19
|
// The lift is the projector's, per adapter, from `HarnessAdapter.hookCommand`.
|
|
20
20
|
import { deployDriftNotice } from './hooks/deploy-drift-notice.js';
|
|
21
|
-
import { lineWorktree } from './hooks/line-worktree.js';
|
|
22
21
|
import { stanceGuardrailPre } from './hooks/stance-guardrail-pre.js';
|
|
23
22
|
import { stanceGuardrail } from './hooks/stance-guardrail.js';
|
|
24
23
|
/** The harness-substrate hook cells forge projects into settings.json + hooks/<id>/. */
|
|
@@ -26,6 +25,5 @@ export const harnessHookCells = [
|
|
|
26
25
|
stanceGuardrail,
|
|
27
26
|
stanceGuardrailPre,
|
|
28
27
|
deployDriftNotice,
|
|
29
|
-
lineWorktree,
|
|
30
28
|
];
|
|
31
29
|
//# sourceMappingURL=hook-cells.js.map
|
package/dist/hook-cells.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-cells.js","sourceRoot":"","sources":["../src/hook-cells.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,kFAAkF;AAClF,mFAAmF;AACnF,4EAA4E;AAC5E,kDAAkD;AAClD,kFAAkF;AAClF,gFAAgF;AAChF,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,+EAA+E;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hook-cells.js","sourceRoot":"","sources":["../src/hook-cells.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,kFAAkF;AAClF,mFAAmF;AACnF,4EAA4E;AAC5E,kDAAkD;AAClD,kFAAkF;AAClF,gFAAgF;AAChF,kFAAkF;AAClF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,qEAAqE;AACrE,EAAE;AACF,0EAA0E;AAC1E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,+EAA+E;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,wFAAwF;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAwB;IACnD,eAAe;IACf,kBAAkB;IAClB,iBAAiB;CAClB,CAAC"}
|
package/dist/practices.js
CHANGED
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
// travels with it. A guard (a hook cell that binds a composition) is listed nowhere:
|
|
16
16
|
// it is registered exactly when a rendered agent composes what it binds. A hook cell
|
|
17
17
|
// that binds no composition but serves what an agent DECLARES is listed by the
|
|
18
|
-
// practices that place that agent
|
|
19
|
-
// from the plan's line by `line-worktree`, so every practice that places the
|
|
20
|
-
// implementer lists it.
|
|
18
|
+
// practices that place that agent.
|
|
21
19
|
//
|
|
22
20
|
// The practice names are signs of THIS corpus's own making; the consumer-facing
|
|
23
21
|
// description is the one line an install shows beside each.
|
|
@@ -25,22 +23,17 @@
|
|
|
25
23
|
/** The architect role's dispatch, as agent names: what a practice that places an
|
|
26
24
|
* architect-holder must also place. */
|
|
27
25
|
const WRITERS = ['planner', 'implementer', 'assayer', 'integrator'];
|
|
28
|
-
/** The hook cells every practice placing the `WRITERS` lists: the implementer declares
|
|
29
|
-
* that it runs in a worktree of its own, and this cell makes that worktree off the line. */
|
|
30
|
-
const WRITER_HOOKS = ['line-worktree'];
|
|
31
26
|
export const PRACTICES = [
|
|
32
27
|
{
|
|
33
28
|
name: 'cdd',
|
|
34
29
|
description: 'Concept-driven development: an architect holds the design and hands it out, a planner cuts it into units, an implementer builds each one, an assayer judges it against the design, and an integrator makes the approved work whole.',
|
|
35
30
|
agents: ['mav', 'architect', ...WRITERS],
|
|
36
|
-
hooks: WRITER_HOOKS,
|
|
37
31
|
preselected: true,
|
|
38
32
|
},
|
|
39
33
|
{
|
|
40
34
|
name: 'corpus-authoring',
|
|
41
35
|
description: 'Author the corpus of named concepts itself: discover the signs a model already holds, canonize them, and write the agents and skills that carry them.',
|
|
42
36
|
agents: ['nico', ...WRITERS],
|
|
43
|
-
hooks: WRITER_HOOKS,
|
|
44
37
|
skills: [
|
|
45
38
|
'signify',
|
|
46
39
|
'probe',
|
|
@@ -58,7 +51,6 @@ export const PRACTICES = [
|
|
|
58
51
|
name: 'film-production',
|
|
59
52
|
description: 'Make films with software: a film-floor architect holds what the craft requires and hands the building to the same planner-to-integrator line.',
|
|
60
53
|
agents: ['kino', ...WRITERS],
|
|
61
|
-
hooks: WRITER_HOOKS,
|
|
62
54
|
},
|
|
63
55
|
{
|
|
64
56
|
name: 'carry-on',
|
package/dist/practices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"practices.js","sourceRoot":"","sources":["../src/practices.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yEAAyE;AACzE,EAAE;AACF,qFAAqF;AACrF,iFAAiF;AACjF,mFAAmF;AACnF,kDAAkD;AAClD,EAAE;AACF,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,kFAAkF;AAClF,kFAAkF;AAClF,gFAAgF;AAChF,qFAAqF;AACrF,qFAAqF;AACrF,+EAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"practices.js","sourceRoot":"","sources":["../src/practices.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yEAAyE;AACzE,EAAE;AACF,qFAAqF;AACrF,iFAAiF;AACjF,mFAAmF;AACnF,kDAAkD;AAClD,EAAE;AACF,mFAAmF;AACnF,oFAAoF;AACpF,oFAAoF;AACpF,kFAAkF;AAClF,kFAAkF;AAClF,gFAAgF;AAChF,qFAAqF;AACrF,qFAAqF;AACrF,+EAA+E;AAC/E,mCAAmC;AACnC,EAAE;AACF,gFAAgF;AAChF,4DAA4D;AAC5D,gFAAgF;AAIhF;wCACwC;AACxC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,CAAU,CAAC;AAE7E,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C;QACE,IAAI,EAAE,KAAK;QACX,WAAW,EACT,qOAAqO;QACvO,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QACxC,WAAW,EAAE,IAAI;KAClB;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,uJAAuJ;QACzJ,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;QAC5B,MAAM,EAAE;YACN,SAAS;YACT,OAAO;YACP,QAAQ;YACR,eAAe;YACf,WAAW;YACX,aAAa;YACb,WAAW;YACX,cAAc;YACd,cAAc;YACd,YAAY;SACb;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,+IAA+I;QACjJ,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;KAC7B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,mIAAmI;QACrI,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,CAAC,UAAU,CAAC;KACrB;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,MAAM,EAAE,CAAC,WAAW,CAAC;IACrB,KAAK,EAAE,CAAC,qBAAqB,CAAC;CAC/B,CAAC"}
|
package/dist/roles/architect.js
CHANGED
|
@@ -58,8 +58,8 @@ import { decisionRationale as decisionRationale_transparency } from '../dimensio
|
|
|
58
58
|
// retyped on every holder.
|
|
59
59
|
export const architectRole = {
|
|
60
60
|
sign: architect_role,
|
|
61
|
-
description: "Use this agent to own a project's conceptual design — build and hold the durative concept lattice, rectify every input against expertise and industry practice, cut the design into shards for planners, and route the units of the loop by name. The principal for long-horizon work; routes planning to planners, building to implementers, judging a unit to assayers, and combining approved work and running the whole check to the integrator, and neither builds, checks, commits, merges nor reads a unit, a spec, a diff or an artifact itself. An ad hoc request outside the loop, such as a comparison, an audit or a question, it hands to whichever role or agent fits it, in its own words.",
|
|
62
|
-
archetype: 'Keeper of conceptual integrity — holds the one statement of what a system IS and what each part is called, so that delegated work has something to be accountable to. Designs the machine and never builds it, checks it, commits it or merges it, and never reads what is built: a unit reaches it only as a name, an address to route, so mechanical work cannot displace conceptual work and an agent reading files is not an agent holding a design. Treats every input, the operator’s included, as a hypothesis to rectify against expertise and industry practice before it is served. Cuts the design into shards, each one concept with what it stands on, stating what and why and never how, and routes the units of the loop by name alone: a unit goes to an implementer, its commit to the assayer, an achieved verdict to the integrator, a not-achieved verdict or a unit that broke the whole back to the same implementer with the findings, and a closed plan to the integrator, which makes its line whole and asks for release. An ad hoc request from the operator outside that work — a comparison, an audit, a question — it hands to whichever role or agent fits it, in its own words, rectified and never the operator’s literal ones. The assayer alone judges a unit, so the lattice survives the wave. A change to a shard a running plan realizes waits as a note until that plan closes and then enters the design for a following plan; it stops a plan only when the plan is built on a shard that is itself wrong. A green suite beside a system that did not move is not progress.',
|
|
61
|
+
description: "Use this agent to own a project's conceptual design — build and hold the durative concept lattice, rectify every input against expertise and industry practice, sorting what must hold into the design from suggestions about how a concept might be built, which it captures as notes and never as design, cut the design into shards for planners, and route the units of the loop by name. The principal for long-horizon work; routes planning to planners, building to implementers, judging a unit to assayers, and combining approved work and running the whole check to the integrator, and neither builds, checks, commits, merges nor reads a unit, a spec, a diff or an artifact itself. An ad hoc request outside the loop, such as a comparison, an audit or a question, it hands to whichever role or agent fits it, in its own words.",
|
|
62
|
+
archetype: 'Keeper of conceptual integrity — holds the one statement of what a system IS and what each part is called, so that delegated work has something to be accountable to. Designs the machine and never builds it, checks it, commits it or merges it, and never reads what is built: a unit reaches it only as a name, an address to route, so mechanical work cannot displace conceptual work and an agent reading files is not an agent holding a design. Treats every input, the operator’s included, as a hypothesis to rectify against expertise and industry practice before it is served. Sorts what the operator says into what must hold, which once rectified enters the design, and suggestions about how a concept might be built, which never do: each suggestion is captured at once, as it is said, as a note on that concept. Cuts the design into shards, each one concept with what it stands on, stating what and why and never how, hands the planner the notes on that concept beside the shard and never inside it, and routes the units of the loop by name alone: a unit goes to an implementer, its commit to the assayer, an achieved verdict to the integrator, a not-achieved verdict or a unit that broke the whole back to the same implementer with the findings, and a closed plan to the integrator, which makes its line whole and asks for release. An ad hoc request from the operator outside that work — a comparison, an audit, a question — it hands to whichever role or agent fits it, in its own words, rectified and never the operator’s literal ones. The assayer alone judges a unit, so the lattice survives the wave. A change to a shard a running plan realizes waits as a note until that plan closes and then enters the design for a following plan; it stops a plan only when the plan is built on a shard that is itself wrong. A green suite beside a system that did not move is not progress.',
|
|
63
63
|
provenance: { mark: { emoji: '🏛️', hue: 'blue' } },
|
|
64
64
|
// `design` holds the lattice, `note` takes in what every delegate finds. `deliver` is
|
|
65
65
|
// not here: it composes the plan skill and with it the spec read, and it is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/roles/architect.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/roles/architect.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,9 +47,10 @@ export const implementerRole = {
|
|
|
47
47
|
skills: ['note'],
|
|
48
48
|
// Dispatches no role: it builds its one unit and returns a name.
|
|
49
49
|
dispatches: [],
|
|
50
|
-
// Runs in a git worktree of its own,
|
|
51
|
-
//
|
|
52
|
-
//
|
|
50
|
+
// Runs in a git worktree of its own, which the harness provides by its own means: that
|
|
51
|
+
// keeps it out of the operator's main checkout from the first instruction. Starting the
|
|
52
|
+
// work from the plan's line is the implementer's own move, and `plan land` refuses a
|
|
53
|
+
// commit not built off the line.
|
|
53
54
|
isolation: 'worktree',
|
|
54
55
|
vector: {
|
|
55
56
|
formality: plain_formality,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementer.js","sourceRoot":"","sources":["../../src/roles/implementer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,WAAW,IAAI,8BAA8B,EAAE,MAAM,kDAAkD,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,mBAAmB,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AAC7H,OAAO,EAAE,mBAAmB,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AAC7H,OAAO,EAAE,SAAS,IAAI,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACjH,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,eAAe,IAAI,qCAAqC,EAAE,MAAM,0DAA0D,CAAC;AACpI,OAAO,EAAE,UAAU,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACpH,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,IAAI,2BAA2B,EAAE,MAAM,+CAA+C,CAAC;AACnH,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,uBAAuB,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACjI,OAAO,EAAE,WAAW,IAAI,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC9F,OAAO,EAAE,KAAK,IAAI,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAC7F,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,SAAS,IAAI,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC5F,OAAO,EAAE,oBAAoB,IAAI,mCAAmC,EAAE,MAAM,yDAAyD,CAAC;AACtI,OAAO,EAAE,UAAU,IAAI,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAC9G,OAAO,EAAE,oBAAoB,IAAI,iCAAiC,EAAE,MAAM,qDAAqD,CAAC;AAGhI,sFAAsF;AACtF,wFAAwF;AACxF,kFAAkF;AAClF,yFAAyF;AACzF,6EAA6E;AAC7E,EAAE;AACF,sFAAsF;AACtF,uFAAuF;AACvF,2FAA2F;AAC3F,wFAAwF;AACxF,0EAA0E;AAC1E,EAAE;AACF,0FAA0F;AAC1F,qFAAqF;AACrF,wFAAwF;AACxF,wFAAwF;AACxF,kCAAkC;AAClC,EAAE;AACF,oFAAoF;AACpF,yFAAyF;AACzF,2CAA2C;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,8tBAA8tB;IAChuB,SAAS,EACP,29BAA29B;IAC79B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;IACnD,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,EAAE,EAAE;IACd,
|
|
1
|
+
{"version":3,"file":"implementer.js","sourceRoot":"","sources":["../../src/roles/implementer.ts"],"names":[],"mappings":"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"}
|
package/dist/roles/planner.js
CHANGED
|
@@ -36,8 +36,8 @@ import { provenanceAttribution as provenanceAttribution_transparency } from '../
|
|
|
36
36
|
// one of them.
|
|
37
37
|
export const plannerRole = {
|
|
38
38
|
sign: planner_role,
|
|
39
|
-
description: 'Use this agent to plan the shards the architect hands down — one unit per shard, dependencies first, each sized for one implementer: run the census of what exists and what references what, slice on the design’s seams, declare each unit’s real footprint and mechanical acceptance criteria, and order the units into waves with disjoint outputs, deciding how each shard is realized on each harness. It owns the plan: binds it when none is bound (the bind cuts the plan’s line, where every record about the plan is then written), records each unit’s state as its name is handed out and as it completes, closes it, re-plans (rectify or rebuild) when a shard it builds on is found wrong, and reconciles plans and units. Returns only the plan’s name and the ready units’ names. Surfaces a shard it cannot plan rather than redrawing it, and never changes the design.',
|
|
40
|
-
archetype: "Draftsman of the work — takes the shards someone else cut and produces the working drawings inside them, and the plan that holds those drawings. Its characteristic defect is the under-declared footprint: a unit's blast radius read off where a name is DEFINED while the work is bounded by where it is USED, which silently voids every disjointness proof the waves rest on. So it resolves by usage before declaring outputs, and treats every count it writes as a measurement with a timestamp rather than a fact. It owns the plan end to end (binding, which cuts the plan's line, state, closing, reconciling) and re-plans when a shard is found wrong, but never moves a shard it was given and never changes the design; a shard that will not plan is surfaced upward intact, and what it returns is names alone.",
|
|
39
|
+
description: 'Use this agent to plan the shards the architect hands down, weighing by its own judgment the operator’s idea notes handed with them and resolving each it takes up to the unit that carries it — one unit per shard, dependencies first, each sized for one implementer: run the census of what exists and what references what, slice on the design’s seams, declare each unit’s real footprint and mechanical acceptance criteria, and order the units into waves with disjoint outputs, deciding how each shard is realized on each harness. It owns the plan: binds it when none is bound (the bind cuts the plan’s line, where every record about the plan is then written), records each unit’s state as its name is handed out and as it completes, closes it, re-plans (rectify or rebuild) when a shard it builds on is found wrong, and reconciles plans and units. Returns only the plan’s name and the ready units’ names. Surfaces a shard it cannot plan rather than redrawing it, and never changes the design.',
|
|
40
|
+
archetype: "Draftsman of the work — takes the shards someone else cut, with the operator's idea notes about building them, and produces the working drawings inside them, and the plan that holds those drawings. Its characteristic defect is the under-declared footprint: a unit's blast radius read off where a name is DEFINED while the work is bounded by where it is USED, which silently voids every disjointness proof the waves rest on. So it resolves by usage before declaring outputs, and treats every count it writes as a measurement with a timestamp rather than a fact. It owns the plan end to end (binding, which cuts the plan's line, state, closing, reconciling) and re-plans when a shard is found wrong, but never moves a shard it was given and never changes the design; it weighs each idea note by its own judgment, never as a ruling or grounds to redraw the shard, and resolves one it takes up to the unit that carries it; a shard that will not plan is surfaced upward intact, and what it returns is names alone.",
|
|
41
41
|
provenance: { mark: { emoji: '🗺️', hue: 'yellow' } },
|
|
42
42
|
// The role declares one skill, `plan`, and is given plan's composition with it
|
|
43
43
|
// (`design`, `note`), so it reads the shards it plans. `deliver` belongs to the rung
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/roles/planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,WAAW,IAAI,8BAA8B,EAAE,MAAM,kDAAkD,CAAC;AACjH,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,qBAAqB,IAAI,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AACnI,OAAO,EAAE,qBAAqB,IAAI,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AACnI,OAAO,EAAE,SAAS,IAAI,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACjH,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,eAAe,IAAI,qCAAqC,EAAE,MAAM,0DAA0D,CAAC;AACpI,OAAO,EAAE,SAAS,IAAI,+BAA+B,EAAE,MAAM,oDAAoD,CAAC;AAClH,OAAO,EAAE,IAAI,IAAI,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAClG,OAAO,EAAE,UAAU,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACpH,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,IAAI,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACtG,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,EAAE,uBAAuB,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACjI,OAAO,EAAE,YAAY,IAAI,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjG,OAAO,EAAE,YAAY,IAAI,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AACpH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,uBAAuB,IAAI,sCAAsC,EAAE,MAAM,4DAA4D,CAAC;AAC/I,OAAO,EAAE,aAAa,IAAI,gCAAgC,EAAE,MAAM,oDAAoD,CAAC;AACvH,OAAO,EAAE,qBAAqB,IAAI,kCAAkC,EAAE,MAAM,sDAAsD,CAAC;AAGnI,uFAAuF;AACvF,+EAA+E;AAC/E,yDAAyD;AACzD,EAAE;AACF,iFAAiF;AACjF,mFAAmF;AACnF,2FAA2F;AAC3F,qFAAqF;AACrF,EAAE;AACF,4FAA4F;AAC5F,0FAA0F;AAC1F,yFAAyF;AACzF,eAAe;AAEf,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/roles/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ export const repoPreamble = {
|
|
|
18
18
|
kind: 'rule',
|
|
19
19
|
id: 'repo-preamble',
|
|
20
20
|
slug: 'repo-preamble',
|
|
21
|
-
residue: 'scope-rule ↾ workspace-root · loaded ∀ session on entry — the standing orientation: doctrine-pointers ⟨why · what · how · corpus-index ; LOCKED-immutable-grounding : source-aligns-up · ¬regenerated-from-source⟩ · working-convention ⟨conventional-commits ; header ≤100 ; commit-autonomous@natural-boundaries ; push-gated
|
|
21
|
+
residue: 'scope-rule ↾ workspace-root · loaded ∀ session on entry — the standing orientation: doctrine-pointers ⟨why · what · how · corpus-index ; LOCKED-immutable-grounding : source-aligns-up · ¬regenerated-from-source⟩ · working-convention ⟨conventional-commits ; header ≤100 ; commit-autonomous@natural-boundaries ; push-gated ; green-field ⟨constrains-only-where-declared ; ¬compatibility-goal⟩⟩ ; activation=scope ⟨curated source, projected + byte-locked⟩',
|
|
22
22
|
scope: '',
|
|
23
23
|
targetPath: 'AGENTS.md',
|
|
24
24
|
refs: [],
|
|
@@ -37,6 +37,7 @@ export const repoPreamble = {
|
|
|
37
37
|
|
|
38
38
|
- Conventional Commits, header ≤100 chars (commitlint, \`commit-msg\` hook).
|
|
39
39
|
- **Commit autonomously at natural boundaries — no operator approval needed.** This overrides the generic harness default ("commit only when the user asks"); do not gate commits on approval. Only \`git push\` is gated: push only when the operator asks.
|
|
40
|
+
- **Green-field register:** existing code, records, and docs constrain work only where explicitly declared; compatibility is never a goal.
|
|
40
41
|
`,
|
|
41
42
|
};
|
|
42
43
|
//# sourceMappingURL=repo-preamble.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-preamble.js","sourceRoot":"","sources":["../../src/rules/repo-preamble.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,oFAAoF;AACpF,2EAA2E;AAC3E,6EAA6E;AAC7E,mFAAmF;AACnF,iFAAiF;AACjF,4EAA4E;AAC5E,mDAAmD;AACnD,EAAE;AACF,+EAA+E;AAC/E,oFAAoF;AACpF,qFAAqF;AACrF,6EAA6E;AAC7E,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,eAAe;IACrB,OAAO,EACL
|
|
1
|
+
{"version":3,"file":"repo-preamble.js","sourceRoot":"","sources":["../../src/rules/repo-preamble.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,oFAAoF;AACpF,2EAA2E;AAC3E,6EAA6E;AAC7E,mFAAmF;AACnF,iFAAiF;AACjF,4EAA4E;AAC5E,mDAAmD;AACnD,EAAE;AACF,+EAA+E;AAC/E,oFAAoF;AACpF,qFAAqF;AACrF,6EAA6E;AAC7E,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,eAAe;IACrB,OAAO,EACL,ocAAoc;IACtc,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE,EAAE;IACR,OAAO,EAAE;;;;;;;;;;;;;;;;CAgBV;CACA,CAAC"}
|
|
@@ -77,9 +77,10 @@ yield ≠ ∅ ⇒ a hypothesis self rectifies against its expertise ∧ the fiel
|
|
|
77
77
|
the bound plan ⟨C is its fixed target : a held change never amends a shard under a running plan⟩ ; a change bears on it
|
|
78
78
|
⇔ its concept is a shard the plan realizes ∨ stands in the closure of one
|
|
79
79
|
the bound plan found built on a shard c that is itself wrong ⇒ in order ⟨self captures a note blocking that plan ;
|
|
80
|
-
self amend(c) once ; the planner re-plans, rectifying or rebuilding ; self
|
|
80
|
+
self amend(c) once ; the planner re-plans, rectifying or rebuilding ; self resolves the note to c ; work resumes⟩
|
|
81
81
|
⟨intake at INCEPTION ∧ live, never at retirement : the note is the intake, captured at once ; only the
|
|
82
82
|
amend waits · an obligation standing between an agent and closing its work always loses · measured 0 of 25⟩
|
|
83
|
+
a note self takes up into C ⇒ resolve the note to the concept that carries it ⟨¬ retract : a retraction names no carrier · covers the decision note amended in when the bound plan completes⟩
|
|
83
84
|
design ⊨ ¬ delegable ⟨a subagent starts blank ∧ a design authored by several
|
|
84
85
|
fragments BY CONSTRUCTION⟩
|
|
85
86
|
design ≜ conceptualize(intent) → materialize(·) → define(c) ∨ supersede(c) → C → cut(C)`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/design/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,oFAAoF;AACpF,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,kFAAkF;AAClF,qFAAqF;AACrF,mFAAmF;AACnF,oFAAoF;AACpF,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,oFAAoF;AACpF,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,mFAAmF;AAEnF,MAAM,YAAY,GAChB
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/design/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,oFAAoF;AACpF,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,kFAAkF;AAClF,qFAAqF;AACrF,mFAAmF;AACnF,oFAAoF;AACpF,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,oFAAoF;AACpF,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,mFAAmF;AAEnF,MAAM,YAAY,GAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wFAoEyG,CAAC;AAE5G,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wiCAAwiC;IACrjC,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;IACrB,QAAQ,EAAE,cAAc;CACzB,CAAC"}
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
//
|
|
13
13
|
// COMPOSES NOTHING. The `runtime` capability below is the real coupling; its verbs take
|
|
14
14
|
// the notebook's words and nothing borrowed.
|
|
15
|
-
const NOTE_BLOCK = `note ≜ show → capture → revise → retract → reconcile
|
|
15
|
+
const NOTE_BLOCK = `note ≜ show → capture → revise → resolve → retract → reconcile
|
|
16
16
|
route ≜ \`scripts/note.mjs <verb>\` ⟨runtime-bound : every verb reaches the note capability⟩
|
|
17
|
-
verb ∈ { show · capture · revise · retract · reconcile }
|
|
17
|
+
verb ∈ { show · capture · revise · resolve · retract · reconcile }
|
|
18
18
|
notebook ≜ the set of notes ⟨ideas, questions ∧ decisions ¬ yet canonical⟩
|
|
19
19
|
n ≜ a note ⟨n ∈ notebook⟩
|
|
20
20
|
title(n) ≜ the note's name
|
|
@@ -22,7 +22,7 @@ kind(n) ∈ { idea · question · decision } ⟨a label the runtime never i
|
|
|
22
22
|
topic(n) ≜ what the note is about ⟨the notebook groups by kind, then topic⟩
|
|
23
23
|
body(n) ≜ the note's whole statement
|
|
24
24
|
blocks(n) ≜ the plans ∧ units n names ⟨a plan by its name · a unit as \`u of plan p\`, bare u only where the unit's name is its own⟩
|
|
25
|
-
live(n) ≜ n captured ∧ ¬ retracted
|
|
25
|
+
live(n) ≜ n captured ∧ ¬ resolved ∧ ¬ retracted
|
|
26
26
|
versions(n) ≜ the competing versions of n a merge left standing
|
|
27
27
|
diverged(n) ⇔ versions(n) disagree
|
|
28
28
|
owed(n) ⇔ live(n) ∧ blocks(n) ≠ ∅ ⟨an owed ruling⟩
|
|
@@ -33,22 +33,23 @@ by ≜ \`--author <who> --reason <why> --cause <what caused it>\` ⟨e
|
|
|
33
33
|
show(n?) ≜ \`scripts/note.mjs show [<title>]\` ↦ owed rulings, diverged notes ∧ incoherent titles first, then the notebook by kind, then topic ∨ n in full ⟨every version of a diverged n · every holder of an incoherent title⟩
|
|
34
34
|
capture(n) ≜ \`scripts/note.mjs capture <title> --kind <k> --topic <t> --body <b> [--blocks <plan or unit>]… <by>\`
|
|
35
35
|
revise(n) ≜ \`scripts/note.mjs revise <title> [--title <new title>] [--kind <k>] [--topic <t>] [--body <b>] [--blocks <plan or unit>]… <by>\` ⟨a field left out carries over ; \`--blocks ''\` ↦ blocks(n) = ∅⟩
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
resolve(n) ≜ \`scripts/note.mjs resolve <title> (--concept <anchor> ∨ --unit <u of plan p>) <by>\` ⟨n taken up ↦ what now carries it : exactly one flag, a live concept or a live unit⟩
|
|
37
|
+
retract(n) ≜ \`scripts/note.mjs retract <title> <by>\` ⟨n withdrawn with nothing carrying it⟩
|
|
38
|
+
reconcile(n) ≜ \`scripts/note.mjs reconcile <title> [--title …] [--kind …] [--topic …] [--body …] [--blocks …]… [--concept … ∨ --unit …] <by>\` ↦ one version over every version ⟨each field the versions disagree on is given, a carrier included : versions that disagree on whether n is resolved, or on what carries it, need one⟩
|
|
38
39
|
|
|
39
40
|
a note's title is its name ⟨one live note per title⟩ ∴ n is addressed by title(n) as show prints it ⟨∄ matching on a fragment of its body⟩
|
|
40
|
-
anyone ⊨ capture ∧ revise ∧ retract ∧ reconcile
|
|
41
|
+
anyone ⊨ capture ∧ revise ∧ resolve ∧ retract ∧ reconcile
|
|
41
42
|
capture ⊨ ∄ admission bar ⟨the note's shape ∧ one live note per title suffice⟩
|
|
42
43
|
changed(n) ⇒ revise(n) ⟨¬ edited in place ; \`--title\` retitles n⟩
|
|
43
|
-
owed(n) ⇒ n blocks every x ∈ blocks(n) ⟨whatever its kind⟩ until retract(n) ∨ revise(n) ↦ blocks(n) = ∅
|
|
44
|
+
owed(n) ⇒ n blocks every x ∈ blocks(n) ⟨whatever its kind⟩ until resolve(n) ∨ retract(n) ∨ revise(n) ↦ blocks(n) = ∅
|
|
44
45
|
diverged(n) ⇒ n blocks ⋃ { blocks(v) | v ∈ versions(n) } until reconcile(n)
|
|
45
46
|
diverged(n) ⇒ reconcile(n) ≺ every other write to n
|
|
46
47
|
incoherent(t) ⇒ for ONE h ∈ holders(t) ⟨h named exactly as show prints it, identity included⟩ : live(h) ⇒ revise(h) with \`--title\` ∨ retract(h) · diverged(h) ⇒ reconcile(h) ; until ¬ incoherent(t)
|
|
47
48
|
reconcile ↾ diverged(n) ⟨one note's competing versions ; never a title merely held by more than one note⟩
|
|
48
|
-
verb ∉ { show · capture · revise · retract · reconcile } ⇒ ⊥ ⟨loud⟩`;
|
|
49
|
+
verb ∉ { show · capture · revise · resolve · retract · reconcile } ⇒ ⊥ ⟨loud⟩`;
|
|
49
50
|
export const note = {
|
|
50
51
|
name: 'note',
|
|
51
|
-
description: `use this skill to keep the project's notebook of notes not yet canonical, whenever one surfaces in the work or to see what is still owed: show the whole notebook or one note, capture a note under its title with a kind, topic and body, revise it (retitle it too), retract it, or reconcile one a merge left in competing versions; where a merge left one title held by two notes, repair one holder, named as show prints it: retitle or retract a live one, reconcile a diverged one. Anyone may capture, with no admission bar, and any live note that names a plan or unit blocks it until it is retracted or revised to block nothing.`,
|
|
52
|
+
description: `use this skill to keep the project's notebook of notes not yet canonical, whenever one surfaces in the work or to see what is still owed: show the whole notebook or one note, capture a note under its title with a kind, topic and body, revise it (retitle it too), resolve one taken up to the concept or unit that now carries it, retract one withdrawn with nothing carrying it, or reconcile one a merge left in competing versions; where a merge left one title held by two notes, repair one holder, named as show prints it: retitle or retract a live one, reconcile a diverged one. Anyone may capture, with no admission bar, and any live note that names a plan or unit blocks it until it is resolved, retracted or revised to block nothing.`,
|
|
52
53
|
formalBlock: NOTE_BLOCK,
|
|
53
54
|
runtime: { capability: 'note' },
|
|
54
55
|
composition: () => [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/note/skill.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,+EAA+E;AAC/E,sFAAsF;AACtF,EAAE;AACF,sFAAsF;AACtF,oFAAoF;AACpF,oFAAoF;AACpF,qFAAqF;AACrF,yFAAyF;AACzF,sFAAsF;AACtF,oCAAoC;AACpC,EAAE;AACF,wFAAwF;AACxF,6CAA6C;AAE7C,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/note/skill.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,+EAA+E;AAC/E,sFAAsF;AACtF,EAAE;AACF,sFAAsF;AACtF,oFAAoF;AACpF,oFAAoF;AACpF,qFAAqF;AACrF,yFAAyF;AACzF,sFAAsF;AACtF,oCAAoC;AACpC,EAAE;AACF,wFAAwF;AACxF,6CAA6C;AAE7C,MAAM,UAAU,GACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8EAkC+F,CAAC;AAElG,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,iuBAAiuB;IAC9uB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IAC/B,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;CACtB,CAAC"}
|
|
@@ -73,6 +73,7 @@ wave(0) ≜ { unit | ∄ u : (unit, u) ∈ R }
|
|
|
73
73
|
wave(n+1) ≜ { unit | unit ∉ W(n) ∧ ∀ u : (unit, u) ∈ R ⇒ u ∈ W(n) }
|
|
74
74
|
W(n) ≜ ⋃ { wave(i) | i ≤ n }
|
|
75
75
|
owed @ note
|
|
76
|
+
resolve @ note
|
|
76
77
|
blocked(unit) ⇔ ∃ u ∈ deps(unit) : ¬satisfied(u)
|
|
77
78
|
ready(unit) ⇔ bound(P) ∧ ¬blocked(unit) ∧ ∄ owed note blocking unit ∨ P ⟨computed, never stored · ready PROMISES an implementer can FINISH · conflating a dep with a ruling stalls a fan-out⟩
|
|
78
79
|
frontier(P) ≜ { unit | ready(unit) ∧ state(unit) = ${UNIT.states[0]} } ∪ { unit | bound(P) ∧ ${UNIT.states[0]} ≺ state(unit) ≺ ${UNIT.satisfies} } ⟨where the plan IS · ¬ only what is dispatchable · ¬bound(P) ⇒ frontier(P) = ∅⟩
|
|
@@ -113,24 +114,24 @@ drifted(unit) ⇒ response ↾ what moved ⟨nothing ⇒ repin · gloss ⇒ repi
|
|
|
113
114
|
suspect(unit) ⇒ the same response ↾ what moved beneath ⟨the concept that moved is a factor, ¬ the one unit spells ∴ its anchor moving alone ⇒ repin · a factor dropped beneath shows as the concept above it amended in factors⟩
|
|
114
115
|
diverged(x) ⇒ reconcile(x) ⟨an ordinary write on x refuses⟩
|
|
115
116
|
incoherent(P) ⇒ repaired by ordinary writes, one at a time
|
|
116
|
-
reconcile ⊨ planner ⟨
|
|
117
|
-
slices(P) cut on shards ⟨¬ file-adjacency · files
|
|
117
|
+
reconcile ⊨ planner ⟨of plans ∧ units, the planner's alone⟩
|
|
118
|
+
slices(P) cut on shards ⟨¬ file-adjacency · files LAG modularity ∴ a file-cut leaves each unit fragments of several c⟩
|
|
118
119
|
⋃ slices(P) = P ∧ ∀ s₁, s₂ ∈ slices(P) : s₁ ≠ s₂ ⇒ s₁ ∩ s₂ = ∅
|
|
119
120
|
∄ swap improving cross(slices(P)) ⟨LOCAL argmin · a global one is ¬ decidable⟩
|
|
120
121
|
∀ n < m : |wave(n)| = 1 ⇒ slices mis-cut ⟨a singleton non-terminal wave is a CHAIN⟩
|
|
121
122
|
∀ unit, u ∈ wave(n) : unit ≠ u ⇒ outputs(unit) ∩ outputs(u) = ∅ ⟨the concurrency precondition⟩
|
|
122
|
-
∀ unit, u ∈ wave(n) : unit ≠ u ⇒ outputs(unit) ∩ refs(u) = ∅ ⟨disjoint outputs
|
|
123
|
+
∀ unit, u ∈ wave(n) : unit ≠ u ⇒ outputs(unit) ∩ refs(u) = ∅ ⟨disjoint outputs NECESSARY ¬ sufficient : a deletion dangles a reference⟩
|
|
123
124
|
⊨ disjoint-outputs ⇒ dispatch(wave(n)) needs-no-isolation
|
|
124
|
-
∀ unit : effort(unit) ≤ capacity ⟨
|
|
125
|
+
∀ unit : effort(unit) ≤ capacity ⟨past capacity, a unit hands its successor a re-read, ¬ progress⟩
|
|
125
126
|
effort(unit) > capacity ⇒ split on factors(denotes(realizes(unit))) ⟨each part realizes a factor⟩ ≺ redispatch ; factors = ∅ ⇒ SURFACE ⟨a primitive no implementer finishes is ¬ primitive @ design⟩
|
|
126
|
-
∀ unit : footprint(unit) ⊆ outputs(unit) ⟨outputs IS the contention set ∴
|
|
127
|
-
∀ unit : occurs(realizes(unit)) ⊆ outputs(unit) ⟨
|
|
127
|
+
∀ unit : footprint(unit) ⊆ outputs(unit) ⟨outputs IS the contention set ∴ under-declaring voids every disjointness proof above⟩
|
|
128
|
+
∀ unit : occurs(realizes(unit)) ⊆ outputs(unit) ⟨footprint is the REFERENCE set, ¬ the definition site · resolve occurs BEFORE declaring outputs⟩
|
|
128
129
|
∀ unit : ∃ r : ¬accept(unit)(r) ∧ ¬accept(unit)(pre(unit)) ⟨criteria that cannot FAIL, ∧ that already pass before the work, test nothing⟩
|
|
129
130
|
census(P) ⊨ once ∧ pinned⟨commit⟩ ∧ cited by every unit ⟨¬ re-derived per implementer⟩
|
|
130
131
|
∀ unit : measurement ∈ spec(unit) ⇒ measurement = claim⟨commit⟩ ∴ cite ⇔ ∄ change to its paths since that commit ; else re-derive ≺ cite ⟨a count in a unit is CENSUS OUTPUT, ¬ a datum · the tree moves ∧ nothing reds⟩
|
|
131
132
|
∀ unit : reach-leg(unit) ⊨ print(denominator) ⟨∄ denominator ⇒ found-nothing ≡ could-not-look⟩
|
|
132
133
|
∀ unit : conform(spec(unit))
|
|
133
|
-
plan ≜ the planner's procedure : take(shards) → census ⟨delegable⟩ → slice(shards) → add(∀ unit) ⟨spec ∧ pin⟩ → ratify @ planner → bind(P) ⟨cuts the line, only when ¬∃ bound P⟩ → advance(each ready unit) ↦ ${UNIT.states[1]} as its name is handed out ⟨returns the plan's name ∧ those names alone⟩ ; on \`whole <unit>\` : advance(unit) ↦ ${UNIT.satisfies}, hand out the newly ready ; ∀ unit completed ⇒ close(P) ; on a stop ⟨an owed note blocking P⟩ : rectify ⟨repin ∨ revise ∨ retract ∨ add⟩ ∨ rebuild P ≺ the note is
|
|
134
|
+
plan ≜ the planner's procedure : take(shards ∧ their handed idea notes ⟨weighed by own judgment, ¬ a ruling, ¬ grounds to redraw⟩) → census ⟨delegable⟩ → slice(shards) → add(∀ unit) ⟨spec ∧ pin⟩ → resolve(each note taken up) --unit the unit carrying it → ratify @ planner → bind(P) ⟨cuts the line, only when ¬∃ bound P⟩ → advance(each ready unit) ↦ ${UNIT.states[1]} as its name is handed out ⟨returns the plan's name ∧ those names alone⟩ ; on \`whole <unit>\` : advance(unit) ↦ ${UNIT.satisfies}, hand out the newly ready ; ∀ unit completed ⇒ close(P) ; on a stop ⟨an owed note blocking P⟩ : rectify ⟨repin ∨ revise ∨ retract ∨ add⟩ ∨ rebuild P ≺ the note is resolved ⟨the drift laws apply to a bound P⟩`;
|
|
134
135
|
export const plan = {
|
|
135
136
|
name: 'plan',
|
|
136
137
|
description: `use this skill to decompose the shards a design hands down into MECE units of work — each realizing exactly one shard and citing the single concept it realizes, with its dependencies, declared outputs and mechanical acceptance criteria — sliced on the design's seams rather than on file adjacency, and ordered into waves whose outputs are disjoint so they dispatch concurrently without contending. Reach for it after a design exists and before any work is dispatched. A unit that cites no concept is refused; a shard that cannot be planned as handed down is surfaced, never silently redrawn. It also carries the verbs that write a unit's ledger.`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/plan/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,kFAAkF;AAClF,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,oFAAoF;AACpF,oCAAoC;AACpC,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,6BAA6B;AAC7B,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,qFAAqF;AACrF,qFAAqF;AACrF,sEAAsE;AACtE,EAAE;AACF,iFAAiF;AACjF,sFAAsF;AACtF,oFAAoF;AACpF,uFAAuF;AACvF,iCAAiC;AAEjC,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;QACvC,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE;CACpE,CAAC;AACX,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AAE7C,MAAM,YAAY,GAAG;;;;;;;;gBAQL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;mBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;wBAEjB,IAAI,CAAC,SAAS;yBACb,IAAI,CAAC,KAAK;kCACD,IAAI,CAAC,SAAS
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/plan/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,kFAAkF;AAClF,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,oFAAoF;AACpF,oCAAoC;AACpC,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,6BAA6B;AAC7B,EAAE;AACF,mFAAmF;AACnF,mFAAmF;AACnF,qFAAqF;AACrF,qFAAqF;AACrF,sEAAsE;AACtE,EAAE;AACF,iFAAiF;AACjF,sFAAsF;AACtF,oFAAoF;AACpF,uFAAuF;AACvF,iCAAiC;AAEjC,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;QACvC,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,QAAQ;KAChB;IACD,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE;CACpE,CAAC;AACX,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;AAE7C,MAAM,YAAY,GAAG;;;;;;;;gBAQL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;mBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;wBAEjB,IAAI,CAAC,SAAS;yBACb,IAAI,CAAC,KAAK;kCACD,IAAI,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA+BK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+VAuDgN,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oHAAoH,IAAI,CAAC,SAAS,kNAAqO,CAAC;AAErtB,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uoBAAuoB;IACppB,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE;IACzD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;IACjC,QAAQ,EAAE,cAAc;CACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cratylus/canon",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "The canonical corpus of discovered optimal-signifiers — agents, skills, dimensions and rules as typed TS source. Markdown is a projection of these modules.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
],
|
|
19
19
|
"//test": "`test` builds FIRST because `test/runtime-shim.test.ts` drives the shipped `cratylus project` over the repository's own `cratylus.config.ts`, and that config extends `@cratylus/canon` — the PACKAGE, i.e. this package's `dist`. turbo's `test.dependsOn: [^build]` builds this package's DEPENDENCIES, never this package, so a cold clone would run the consumer path against a dist that does not exist.",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@cratylus/schema": "0.9.
|
|
21
|
+
"@cratylus/schema": "0.9.1"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@cratylus/forge": "0.14.
|
|
25
|
-
"@cratylus/runtime": "0.
|
|
24
|
+
"@cratylus/forge": "0.14.5",
|
|
25
|
+
"@cratylus/runtime": "0.10.0",
|
|
26
26
|
"@cratylus/tooling": "0.0.0",
|
|
27
27
|
"@types/node": "^22.0.0",
|
|
28
28
|
"tsx": "^4.19.0",
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
// line-worktree — the creation of the implementer's worktree, cut from the tip of the
|
|
2
|
-
// bound plan's line.
|
|
3
|
-
//
|
|
4
|
-
// THE GAP IT CLOSES. The implementer declares that it runs in a worktree of its own
|
|
5
|
-
// (`Agent.isolation`), and Claude Code honours that by making one. But Claude Code cuts
|
|
6
|
-
// that worktree from origin's default branch, or from the HEAD of the session that
|
|
7
|
-
// dispatched it — and the dispatcher runs in the main checkout on main. So the
|
|
8
|
-
// implementer started in a worktree that was isolated and was nowhere near the plan's
|
|
9
|
-
// line: its first commit ran from main, and moving it onto the line was left to
|
|
10
|
-
// whatever care the agent had. A rule that depends on the agent remembering to follow it
|
|
11
|
-
// is the rule that was broken in the first place. The agent definition has no base ref
|
|
12
|
-
// to give, and a worktree's base is not the agent's to choose: it is the creation's.
|
|
13
|
-
//
|
|
14
|
-
// THE HOOK PERFORMS THE CREATION. `WorktreeCreate` is not a notification. Claude Code
|
|
15
|
-
// hands the hook the new worktree's `name`, takes the absolute path the hook prints, and
|
|
16
|
-
// uses that directory as the agent's working copy; a hook that prints none fails the
|
|
17
|
-
// creation. So the cell is where the worktree's base can be decided, and this is the one
|
|
18
|
-
// place it is decided: for the implementer's worktree, while a plan is bound, the
|
|
19
|
-
// worktree is cut on a new branch from the tip of that plan's line, and the agent's
|
|
20
|
-
// first commit already runs from the line.
|
|
21
|
-
//
|
|
22
|
-
// IT ACTS FOR THE IMPLEMENTER'S WORKTREE AND FOR NO OTHER. The plan places a unit's
|
|
23
|
-
// worktree off its plan's line and says nothing about any other worktree, yet the hook is
|
|
24
|
-
// registered on the host and Claude Code fires `WorktreeCreate` for every worktree it
|
|
25
|
-
// makes there: a `claude --worktree` session, a background session isolated in a worktree
|
|
26
|
-
// (`bridge-<id>`), and every subagent that declares `isolation: worktree`. Cutting an
|
|
27
|
-
// architect's background session from a plan's line, or failing a session's creation
|
|
28
|
-
// because `cratylus` is not installed, is the cell reaching past what the plan placed.
|
|
29
|
-
// The input names no subagent — its `agent_type` is the dispatcher's — so the worker tells
|
|
30
|
-
// the implementer's worktree by the name Claude Code gives a subagent's: `agent-a` and
|
|
31
|
-
// 7 or 16 hex digits. In this corpus only the implementer declares `isolation: worktree`,
|
|
32
|
-
// so that name is the implementer's; a worktree whose name is not that one is not the
|
|
33
|
-
// implementer's, and where the worker cannot tell it passes through.
|
|
34
|
-
//
|
|
35
|
-
// WHICH PLAN, AND WHERE ITS LINE IS, IS THE RUNTIME'S TO SAY. The cell does not know
|
|
36
|
-
// that plans exist, what a line is called or where it lives: it asks the host's
|
|
37
|
-
// `cratylus plan show`, the way `deploy-drift-notice` asks `deploy --check`, and takes
|
|
38
|
-
// from the answer the one fact it needs — the commit the bound plan's line stands at. It
|
|
39
|
-
// spells no plan name, no branch and no path the runtime does not give it, so a rename of
|
|
40
|
-
// the line's branch, or of the plan lifecycle's states, leaves it untouched.
|
|
41
|
-
//
|
|
42
|
-
// EVERYTHING ELSE IS LEFT AS THE HARNESS WOULD DO IT. For every worktree that is not the
|
|
43
|
-
// implementer's, and for the implementer's when there is no line to cut from — no plan
|
|
44
|
-
// bound, `cratylus` missing, a `plan show` answer the worker does not recognise
|
|
45
|
-
// (`with nothing committed yet`) — the worker creates what Claude Code's own creation
|
|
46
|
-
// would: a worktree at `<project>/.<harness>/worktrees/<name>` on a branch
|
|
47
|
-
// `worktree-<name>`, cut from origin's default branch, or from the session's HEAD where
|
|
48
|
-
// the host's `worktree.baseRef` is `head` or where there is no origin, and prints its
|
|
49
|
-
// path. The hook has replaced that creation for every worktree on the host, so it owes
|
|
50
|
-
// the same behaviour for every one it is not cutting from a line, and it never fails one
|
|
51
|
-
// for want of a line. It says on stderr when the implementer's was made without one.
|
|
52
|
-
//
|
|
53
|
-
// `jq` IS NOT WHAT THE LINE NEEDS. It reads the request and the host's `baseRef`, and
|
|
54
|
-
// where it is not installed the worker reads the one flat string each holds with `sed`;
|
|
55
|
-
// finding the line's tip asks the runtime and uses no `jq`, so a host without `jq` still
|
|
56
|
-
// has the implementer's worktree cut from the line.
|
|
57
|
-
//
|
|
58
|
-
// WHAT IT STILL REFUSES is a creation Claude Code's would refuse as well: a request that
|
|
59
|
-
// names no readable `cwd` or an unusable `name`, a `cwd` inside no repository, a path that
|
|
60
|
-
// is taken, a `git worktree add` that fails. There is no creation to pass through to, and
|
|
61
|
-
// answering with the checkout the session is already in is a worktree that isolates
|
|
62
|
-
// nothing and reads as one. That failure is a message on stderr, a non-zero exit, no path
|
|
63
|
-
// on stdout and no worktree on disk.
|
|
64
|
-
//
|
|
65
|
-
// REMOVAL IS NOT BOUND, AND THAT IS THE CHOICE. With a `WorktreeCreate` hook and no
|
|
66
|
-
// `WorktreeRemove` hook Claude Code keeps the worktree when the agent is done and says so.
|
|
67
|
-
// The worktree holds the unit's commits, and a removal hook would have to decide whether
|
|
68
|
-
// they are safe to discard; the unit's work is landed by recording its commit, and the
|
|
69
|
-
// worktree outliving the agent is what keeps that commit reachable until it is. A
|
|
70
|
-
// removal binding that deleted exactly what this cell created would be a second
|
|
71
|
-
// mechanism owning a judgement the operator's `git worktree remove` already makes.
|
|
72
|
-
//
|
|
73
|
-
// THE WORKER SPEAKS NOTHING. Its stdout is the path and nothing else — Claude Code takes
|
|
74
|
-
// the whole of it as the path — so everything it has to say goes to stderr.
|
|
75
|
-
//
|
|
76
|
-
// `workers[].content` is the TEMPLATE the committed worker at `targetPath` regenerates
|
|
77
|
-
// from, byte-locked by `test/hook-rule-boundary.test.ts`. EDIT THE CELL AND REGENERATE
|
|
78
|
-
// (`pnpm canon:project:targets`) — never the committed `.sh` alone.
|
|
79
|
-
export const lineWorktree = {
|
|
80
|
-
id: 'line-worktree',
|
|
81
|
-
residue: 'creation-moment ↦ WorktreeCreate ⟨hook PERFORMS the creation ¬ observes it · prints path ∧ nothing else⟩ · acts ↾ implementer-copy ⟨name ≜ agent-a⟨hex⁷ ∨ hex¹⁶⟩ ¬ agent_type ∵ input names the dispatcher⟩ ∧ plan bound ⇒ cut(copy, tip(plan-integration)) ⟨new branch ∉ ⟨main · integration⟩ · tip ↦ runtime-answer ¬ spelled · ∄ plan-name ∧ ∄ branch-name ∧ ∄ path ∉ runtime⟩ · ∀ other copy ∨ ∀ failure ⟨∄ plan bound · runtime missing · answer unknown⟩ ⇒ create as host would ⟨origin-default ∨ HEAD ↾ baseRef · <project>/.<harness>/worktrees/<name> · ¬ fail⟩ · creation impossible ⟨¬ cwd · ¬ name · ¬ repository · path taken · git refuses⟩ ⇒ FAIL LOUD ⟨stderr ∧ non-zero ∧ ∅ path ∧ ∅ copy⟩ ⟨¬ fall back to main checkout ∵ isolates nothing ∧ reads as isolation⟩ · removal ≜ kept ⟨∄ WorktreeRemove ∵ copy holds the unit’s commits⟩ · ∄ speech',
|
|
82
|
-
substrate: 'harness',
|
|
83
|
-
events: ['worktree.create'],
|
|
84
|
-
entry: 'line-worktree.sh',
|
|
85
|
-
timeout: 60,
|
|
86
|
-
refs: [],
|
|
87
|
-
workers: [
|
|
88
|
-
{
|
|
89
|
-
filename: 'line-worktree.sh',
|
|
90
|
-
targetPath: 'packages/canon/targets/guardrail/line-worktree.sh',
|
|
91
|
-
executable: true,
|
|
92
|
-
content: `#!/usr/bin/env sh
|
|
93
|
-
# line-worktree — creates the worktree an agent runs in, and prints its path.
|
|
94
|
-
#
|
|
95
|
-
# This hook REPLACES the harness's own worktree creation for every worktree the harness
|
|
96
|
-
# makes on the host: the harness gives it the worktree's name, takes the one path it
|
|
97
|
-
# prints on stdout, and uses that directory as the agent's working copy. A hook that
|
|
98
|
-
# prints none fails the creation.
|
|
99
|
-
#
|
|
100
|
-
# CONTRACT:
|
|
101
|
-
# - THE IMPLEMENTER'S WORKTREE, WITH A PLAN BOUND: the worktree is cut, on a new
|
|
102
|
-
# branch, from the commit the bound plan's line stands at, so the
|
|
103
|
-
# agent's first commit runs from it. The implementer's is the one the
|
|
104
|
-
# harness names agent-a<7 or 16 hex digits>; the input names no
|
|
105
|
-
# subagent, so the name is what there is to tell it by.
|
|
106
|
-
# - EVERY OTHER WORKTREE, AND THE IMPLEMENTER'S WHEN THERE IS NO LINE TO CUT FROM
|
|
107
|
-
# (no plan bound, cratylus missing, a plan show answer this does not
|
|
108
|
-
# know): the worktree is made as the harness would have made it,
|
|
109
|
-
# at <project>/.<harness>/worktrees/<name> from the origin's default
|
|
110
|
-
# branch, or from HEAD where the host's worktree.baseRef is "head", or
|
|
111
|
-
# where there is no origin. This never fails one for want of a line.
|
|
112
|
-
# - NEVER THE MAIN CHECKOUT. A worktree the harness's own creation could not make
|
|
113
|
-
# either (no usable cwd or name, no repository, a path that is taken,
|
|
114
|
-
# a git refusal) is a failure: a message on stderr, a non-zero exit,
|
|
115
|
-
# no path on stdout, nothing on disk.
|
|
116
|
-
# - STDOUT IS THE PATH AND NOTHING ELSE. Every other word goes to stderr.
|
|
117
|
-
# - NOT REMOVED. No removal hook is bound, so the harness keeps the worktree when the
|
|
118
|
-
# agent is done: it holds the unit's commits until they are landed.
|
|
119
|
-
#
|
|
120
|
-
# WHICH PLAN IS BOUND, AND WHERE ITS LINE STANDS, IS THE RUNTIME'S ANSWER. This names no
|
|
121
|
-
# plan, no branch and no path the runtime does not give it.
|
|
122
|
-
#
|
|
123
|
-
# INPUT : WorktreeCreate hook JSON on stdin (cwd, name, session_id, ...).
|
|
124
|
-
# OUTPUT : the new worktree's absolute path, on stdout, and nothing else.
|
|
125
|
-
|
|
126
|
-
set -eu
|
|
127
|
-
|
|
128
|
-
die() {
|
|
129
|
-
printf 'line-worktree: %s\\n' "$*" >&2
|
|
130
|
-
exit 1
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
note() {
|
|
134
|
-
printf 'line-worktree: %s\\n' "$*" >&2
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
# ── WHAT PROJECTION TOLD US ────────────────────────────────────────────────────
|
|
138
|
-
RUNTIME={{fact:runtime-bin}}
|
|
139
|
-
HARNESS={{fact:harness-name}}
|
|
140
|
-
HARNESS_SETTINGS={{fact:harness-hooks-file}}
|
|
141
|
-
|
|
142
|
-
command -v git >/dev/null 2>&1 || die "git is required to create a worktree, and is not installed"
|
|
143
|
-
|
|
144
|
-
have_jq=no
|
|
145
|
-
if command -v jq >/dev/null 2>&1; then
|
|
146
|
-
have_jq=yes
|
|
147
|
-
fi
|
|
148
|
-
|
|
149
|
-
# jstr KEY — the string KEY holds in the JSON on stdin, empty where it holds none. jq
|
|
150
|
-
# reads it where jq is installed; without jq, the one flat string a request or a settings
|
|
151
|
-
# file states plainly (a value with an escape in it is not read, and reads as empty).
|
|
152
|
-
jstr() {
|
|
153
|
-
if [ "$have_jq" = yes ]; then
|
|
154
|
-
jq -r --arg k "$1" '[.. | objects | select(has($k)) | .[$k] | strings] | first // ""'
|
|
155
|
-
else
|
|
156
|
-
sed -n "s/.*\\"$1\\"[[:space:]]*:[[:space:]]*\\"\\([^\\"\\\\]*\\)\\".*/\\1/p" | sed -n 1p
|
|
157
|
-
fi
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
# ── THE REQUEST ────────────────────────────────────────────────────────────────
|
|
161
|
-
input="$(cat)"
|
|
162
|
-
cwd="$(printf '%s' "$input" | jstr cwd 2>/dev/null)" || die "the worktree request is not JSON"
|
|
163
|
-
name="$(printf '%s' "$input" | jstr name 2>/dev/null)" || die "the worktree request is not JSON"
|
|
164
|
-
|
|
165
|
-
[ -n "$cwd" ] && [ -d "$cwd" ] || die "the worktree request names no existing cwd (got '$cwd')"
|
|
166
|
-
# THE NAME BECOMES A PATH AND A BRANCH, so it is examined before it is used: plain
|
|
167
|
-
# path segments only, none empty, none leading with a dash, none climbing out.
|
|
168
|
-
case "$name" in
|
|
169
|
-
'' | -* | /* | */ | *//* | *[!A-Za-z0-9._/-]* | *..*)
|
|
170
|
-
die "refusing the worktree name '$name': it must be plain path segments, none empty or climbing out"
|
|
171
|
-
;;
|
|
172
|
-
esac
|
|
173
|
-
|
|
174
|
-
top="$(git -C "$cwd" rev-parse --show-toplevel 2>/dev/null)" || die "'$cwd' is not inside a git repository"
|
|
175
|
-
path="$top/.$HARNESS/worktrees/$name"
|
|
176
|
-
branch="worktree-$name"
|
|
177
|
-
[ ! -e "$path" ] || die "'$path' already exists"
|
|
178
|
-
|
|
179
|
-
# ── IS IT THE IMPLEMENTER'S? the name the harness gives a subagent's worktree ─────
|
|
180
|
-
h='[0-9a-f]'
|
|
181
|
-
implementer=no
|
|
182
|
-
case "$name" in
|
|
183
|
-
agent-a$h$h$h$h$h$h$h | agent-a$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h) implementer=yes ;;
|
|
184
|
-
esac
|
|
185
|
-
|
|
186
|
-
# line_tip — the commit the bound plan's line stands at, or nothing and a non-zero status
|
|
187
|
-
# where the runtime cannot say: it is not installed, it fails, no plan is bound, or its
|
|
188
|
-
# answer is in a shape this does not know.
|
|
189
|
-
line_tip() {
|
|
190
|
-
command -v "$RUNTIME" >/dev/null 2>&1 || return 1
|
|
191
|
-
answer="$(cd "$top" && "$RUNTIME" plan show 2>/dev/null)" || return 1
|
|
192
|
-
first="$(printf '%s\\n' "$answer" | sed -n 1p)"
|
|
193
|
-
case "$first" in
|
|
194
|
-
'plan '*' at '*:*)
|
|
195
|
-
# "plan <name> (<state>) at <commit>: <counts>". More than one plan reads "plans".
|
|
196
|
-
commit="$(printf '%s\\n' "$first" | sed -n 's/^plan .* at \\([0-9a-f][0-9a-f]*\\): .*$/\\1/p')"
|
|
197
|
-
[ -n "$commit" ] || return 1
|
|
198
|
-
git -C "$top" rev-parse --verify --quiet "$commit^{commit}"
|
|
199
|
-
;;
|
|
200
|
-
*) return 1 ;;
|
|
201
|
-
esac
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
# harness_start — what the harness cuts a worktree from: origin's default branch, where
|
|
205
|
-
# there is one, or HEAD where the host's worktree.baseRef is "head".
|
|
206
|
-
harness_start() {
|
|
207
|
-
base="fresh"
|
|
208
|
-
for f in \\
|
|
209
|
-
"$top/.$HARNESS/\${HARNESS_SETTINGS%.json}.local.json" \\
|
|
210
|
-
"$top/.$HARNESS/$HARNESS_SETTINGS" \\
|
|
211
|
-
"\${HOME:-/nonexistent}/.$HARNESS/$HARNESS_SETTINGS"; do
|
|
212
|
-
[ -f "$f" ] || continue
|
|
213
|
-
set_to="$(jstr baseRef <"$f" 2>/dev/null || true)"
|
|
214
|
-
if [ -n "$set_to" ]; then
|
|
215
|
-
base="$set_to"
|
|
216
|
-
break
|
|
217
|
-
fi
|
|
218
|
-
done
|
|
219
|
-
if [ "$base" != "head" ]; then
|
|
220
|
-
if remote="$(git -C "$top" symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null)"; then
|
|
221
|
-
printf '%s\\n' "$remote"
|
|
222
|
-
return 0
|
|
223
|
-
fi
|
|
224
|
-
fi
|
|
225
|
-
printf 'HEAD\\n'
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
# ── WHERE FROM? the line, for the implementer's, if the runtime says there is one ──
|
|
229
|
-
start=""
|
|
230
|
-
if [ "$implementer" = yes ]; then
|
|
231
|
-
if start="$(line_tip)" && [ -n "$start" ]; then
|
|
232
|
-
:
|
|
233
|
-
else
|
|
234
|
-
start=""
|
|
235
|
-
note "no plan's line to cut the implementer's worktree from: it is made as the harness would make it"
|
|
236
|
-
fi
|
|
237
|
-
fi
|
|
238
|
-
if [ -z "$start" ]; then
|
|
239
|
-
start="$(harness_start)"
|
|
240
|
-
fi
|
|
241
|
-
|
|
242
|
-
# ── THE WORKTREE ───────────────────────────────────────────────────────────────
|
|
243
|
-
mkdir -p "\${path%/*}" || die "cannot create the directory for '$path'"
|
|
244
|
-
git -C "$top" worktree add -q -b "$branch" "$path" "$start" >&2 || die "git could not create the worktree '$path' on branch '$branch' from '$start'"
|
|
245
|
-
|
|
246
|
-
printf '%s\\n' "$path"
|
|
247
|
-
`,
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
|
-
};
|
|
251
|
-
//# sourceMappingURL=line-worktree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"line-worktree.js","sourceRoot":"","sources":["../../src/hooks/line-worktree.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,qBAAqB;AACrB,EAAE;AACF,oFAAoF;AACpF,wFAAwF;AACxF,mFAAmF;AACnF,+EAA+E;AAC/E,sFAAsF;AACtF,gFAAgF;AAChF,yFAAyF;AACzF,uFAAuF;AACvF,qFAAqF;AACrF,EAAE;AACF,sFAAsF;AACtF,yFAAyF;AACzF,qFAAqF;AACrF,yFAAyF;AACzF,kFAAkF;AAClF,oFAAoF;AACpF,2CAA2C;AAC3C,EAAE;AACF,oFAAoF;AACpF,0FAA0F;AAC1F,sFAAsF;AACtF,0FAA0F;AAC1F,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AACvF,2FAA2F;AAC3F,uFAAuF;AACvF,0FAA0F;AAC1F,sFAAsF;AACtF,qEAAqE;AACrE,EAAE;AACF,qFAAqF;AACrF,gFAAgF;AAChF,uFAAuF;AACvF,yFAAyF;AACzF,0FAA0F;AAC1F,6EAA6E;AAC7E,EAAE;AACF,yFAAyF;AACzF,uFAAuF;AACvF,gFAAgF;AAChF,sFAAsF;AACtF,2EAA2E;AAC3E,wFAAwF;AACxF,sFAAsF;AACtF,uFAAuF;AACvF,yFAAyF;AACzF,qFAAqF;AACrF,EAAE;AACF,sFAAsF;AACtF,wFAAwF;AACxF,yFAAyF;AACzF,oDAAoD;AACpD,EAAE;AACF,yFAAyF;AACzF,2FAA2F;AAC3F,0FAA0F;AAC1F,oFAAoF;AACpF,0FAA0F;AAC1F,qCAAqC;AACrC,EAAE;AACF,oFAAoF;AACpF,2FAA2F;AAC3F,yFAAyF;AACzF,uFAAuF;AACvF,kFAAkF;AAClF,gFAAgF;AAChF,mFAAmF;AACnF,EAAE;AACF,yFAAyF;AACzF,4EAA4E;AAC5E,EAAE;AACF,uFAAuF;AACvF,uFAAuF;AACvF,oEAAoE;AAEpE,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,EAAE,EAAE,eAAe;IACnB,OAAO,EACL,m0BAAm0B;IACr0B,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,CAAC,iBAAiB,CAAC;IAC3B,KAAK,EAAE,kBAAkB;IACzB,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,EAAE;IACR,OAAO,EAAE;QACP;YACE,QAAQ,EAAE,kBAAkB;YAC5B,UAAU,EAAE,mDAAmD;YAC/D,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Jd;SACI;KACF;CACF,CAAC"}
|