@cratylus/canon 0.3.0 → 0.5.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.
Files changed (97) hide show
  1. package/dist/agents/architect.js +14 -108
  2. package/dist/agents/architect.js.map +1 -1
  3. package/dist/agents/assayer.d.ts +2 -0
  4. package/dist/agents/assayer.js +20 -0
  5. package/dist/agents/assayer.js.map +1 -0
  6. package/dist/agents/implementer.js +9 -69
  7. package/dist/agents/implementer.js.map +1 -1
  8. package/dist/agents/kino.js +24 -110
  9. package/dist/agents/kino.js.map +1 -1
  10. package/dist/agents/mav.js +43 -79
  11. package/dist/agents/mav.js.map +1 -1
  12. package/dist/agents/nico.js +34 -63
  13. package/dist/agents/nico.js.map +1 -1
  14. package/dist/agents/planner.js +8 -80
  15. package/dist/agents/planner.js.map +1 -1
  16. package/dist/dimensions/actions/file-ops.js +5 -1
  17. package/dist/dimensions/actions/file-ops.js.map +1 -1
  18. package/dist/dimensions/autonomy/human-on-the-loop.js +3 -2
  19. package/dist/dimensions/autonomy/human-on-the-loop.js.map +1 -1
  20. package/dist/dimensions/role/architect.js +19 -1
  21. package/dist/dimensions/role/architect.js.map +1 -1
  22. package/dist/dimensions/role/{build.d.ts → assayer.d.ts} +1 -1
  23. package/dist/dimensions/role/assayer.js +25 -0
  24. package/dist/dimensions/role/assayer.js.map +1 -0
  25. package/dist/dimensions/role/{diagnose.d.ts → implementer.d.ts} +1 -1
  26. package/dist/dimensions/role/implementer.js +12 -0
  27. package/dist/dimensions/role/implementer.js.map +1 -0
  28. package/dist/dimensions/role/{curate.d.ts → planner.d.ts} +1 -1
  29. package/dist/dimensions/role/planner.js +14 -0
  30. package/dist/dimensions/role/planner.js.map +1 -0
  31. package/dist/hooks/purview-guardrail.d.ts +2 -0
  32. package/dist/hooks/purview-guardrail.js +302 -0
  33. package/dist/hooks/purview-guardrail.js.map +1 -0
  34. package/dist/manifest.d.ts +1 -1
  35. package/dist/manifest.js +3 -1
  36. package/dist/manifest.js.map +1 -1
  37. package/dist/roles/architect.d.ts +2 -0
  38. package/dist/roles/architect.js +105 -0
  39. package/dist/roles/architect.js.map +1 -0
  40. package/dist/roles/assayer.d.ts +2 -0
  41. package/dist/roles/assayer.js +66 -0
  42. package/dist/roles/assayer.js.map +1 -0
  43. package/dist/roles/hold.d.ts +57 -0
  44. package/dist/roles/hold.js +105 -0
  45. package/dist/roles/hold.js.map +1 -0
  46. package/dist/roles/implementer.d.ts +2 -0
  47. package/dist/roles/implementer.js +62 -0
  48. package/dist/roles/implementer.js.map +1 -0
  49. package/dist/roles/planner.d.ts +2 -0
  50. package/dist/roles/planner.js +73 -0
  51. package/dist/roles/planner.js.map +1 -0
  52. package/dist/skills/deliver/skill.js +60 -20
  53. package/dist/skills/deliver/skill.js.map +1 -1
  54. package/dist/skills/design/skill.js +35 -28
  55. package/dist/skills/design/skill.js.map +1 -1
  56. package/dist/skills/note/skill.d.ts +2 -0
  57. package/dist/skills/note/skill.js +56 -0
  58. package/dist/skills/note/skill.js.map +1 -0
  59. package/dist/skills/plan/skill.js +75 -19
  60. package/dist/skills/plan/skill.js.map +1 -1
  61. package/package.json +4 -6
  62. package/dist/dimensions/role/build.js +0 -2
  63. package/dist/dimensions/role/build.js.map +0 -1
  64. package/dist/dimensions/role/converse.d.ts +0 -2
  65. package/dist/dimensions/role/converse.js +0 -2
  66. package/dist/dimensions/role/converse.js.map +0 -1
  67. package/dist/dimensions/role/curate.js +0 -2
  68. package/dist/dimensions/role/curate.js.map +0 -1
  69. package/dist/dimensions/role/diagnose.js +0 -2
  70. package/dist/dimensions/role/diagnose.js.map +0 -1
  71. package/dist/dimensions/role/document.d.ts +0 -2
  72. package/dist/dimensions/role/document.js +0 -2
  73. package/dist/dimensions/role/document.js.map +0 -1
  74. package/dist/dimensions/role/implement.d.ts +0 -2
  75. package/dist/dimensions/role/implement.js +0 -2
  76. package/dist/dimensions/role/implement.js.map +0 -1
  77. package/dist/dimensions/role/operate.d.ts +0 -2
  78. package/dist/dimensions/role/operate.js +0 -2
  79. package/dist/dimensions/role/operate.js.map +0 -1
  80. package/dist/dimensions/role/orchestrate.d.ts +0 -2
  81. package/dist/dimensions/role/orchestrate.js +0 -2
  82. package/dist/dimensions/role/orchestrate.js.map +0 -1
  83. package/dist/dimensions/role/plan.d.ts +0 -2
  84. package/dist/dimensions/role/plan.js +0 -2
  85. package/dist/dimensions/role/plan.js.map +0 -1
  86. package/dist/dimensions/role/research.d.ts +0 -2
  87. package/dist/dimensions/role/research.js +0 -2
  88. package/dist/dimensions/role/research.js.map +0 -1
  89. package/dist/dimensions/role/review.d.ts +0 -2
  90. package/dist/dimensions/role/review.js +0 -2
  91. package/dist/dimensions/role/review.js.map +0 -1
  92. package/dist/dimensions/role/test.d.ts +0 -2
  93. package/dist/dimensions/role/test.js +0 -2
  94. package/dist/dimensions/role/test.js.map +0 -1
  95. package/dist/plan-states.d.ts +0 -31
  96. package/dist/plan-states.js +0 -46
  97. package/dist/plan-states.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { PLAN_STATES } from '../../plan-states.js';
2
1
  import { design } from '../design/skill.js';
2
+ import { note } from '../note/skill.js';
3
3
  // SUPERSEDES `praxis`, which carried three activities with three different ends —
4
4
  // capturing understanding, specifying work, and governing execution — and no seam
5
5
  // between them. An agent asked to switch telos three times with nothing marking the
@@ -11,22 +11,50 @@ import { design } from '../design/skill.js';
11
11
  // the plan's own lifecycle. Understanding moved to `design`; dispatch, judgement and
12
12
  // triage moved to `deliver`.
13
13
  //
14
+ // THE LIFECYCLE STATES LIVE HERE AND NOWHERE ELSE. They are meaning, so the corpus
15
+ // holds them; the `plan` capability receives them as the configuration this cell's
16
+ // runtime face carries, which deploy emits into the host runtime config, and acts on
17
+ // the roles it names (which plan state at most one plan holds, which is final, which
18
+ // unit state satisfies a dependency), never on a spelling of its own.
19
+ //
14
20
  // The laws carried forward are the ones that were PAID FOR. The output-array law and
15
21
  // its measurement survive verbatim because the defect it names — a footprint read off
16
22
  // where a sign is DEFINED while the work is bounded by where it is USED — recurred six
17
23
  // times in one plan and voids every disjointness proof above it when it recurs.
24
+ const LIFECYCLE = {
25
+ plan: {
26
+ states: ['proposed', 'bound', 'closed'],
27
+ exclusive: 'bound',
28
+ final: 'closed',
29
+ },
30
+ unit: { states: ['pending', 'active', 'completed'], satisfies: 'completed' },
31
+ };
32
+ const { plan: PLAN, unit: UNIT } = LIFECYCLE;
18
33
  const FORMAL_BLOCK = `s ≜ a cut piece ⟨closed · handed down · ¬ redrawable here⟩ @ design
34
+ c @ design
19
35
  anchor @ design
20
36
  closure @ design
21
- pin @ design
22
- digest @ design
37
+ withdrawn @ design
38
+ self @ design
23
39
  P ≜ a plan : the units cutting s into work
24
- unit ≜ a unit of work ⟨unit ∈ P⟩
25
- States ≜ { ${PLAN_STATES.join(', ')} }
26
- state : P → States
40
+ unit ≜ a unit of work ⟨unit ∈ P⟩
41
+ name(x) ≜ the label x is addressed by ⟨x a P ∨ a unit · revisable⟩
42
+ States(P) ≜ { ${PLAN.states.join(', ')} } ⟨in lifecycle order⟩
43
+ States(unit) ≜ { ${UNIT.states.join(', ')} } ⟨in lifecycle order⟩
44
+ state : P → States(P) ∧ unit → States(unit)
45
+ bound(P) ⇔ state(P) = ${PLAN.exclusive}
46
+ closed(P) ⇔ state(P) = ${PLAN.final}
47
+ satisfied(unit) ⇔ state(unit) ≽ ${UNIT.satisfies} ⟨reached completion ∨ moved past it⟩
48
+ settled(x) ⇔ x has exactly one current version ⟨x a P ∨ a unit⟩
49
+ live(x) ⇔ settled(x) ∧ that version ¬ a retraction
50
+ diverged(x) ⇔ ¬settled(x) ⟨concurrent sessions wrote x differently ∧ merged · state, ¬ error⟩
51
+ incoherent(P) ⇔ a law below broken across plans ∨ units by a merge ∧ kept on each branch
27
52
  R ⊆ P × P ⟨dependency⟩
28
53
  deps(unit) ≜ { u | (unit, u) ∈ R }
29
- realizes : P → anchor ⟨TOTAL⟩
54
+ realizes : P → ℘(anchor) ∧ unit → anchor ⟨TOTAL⟩
55
+ pin : unit → the version of denotes(realizes(unit)) the unit was authored against
56
+ drifted(unit) ⇔ pin(unit) ≠ the one current version of denotes(realizes(unit)) ⟨amended · withdrawn · split into competing versions⟩
57
+ suspect(unit) ⇔ ¬drifted(unit) ∧ ∃ c ∈ closure(denotes(realizes(unit))) : c has more than one current version ∨ withdrawn(c) ∨ c has a version newer than pin(unit)
30
58
  static : P → ℘(path)
31
59
  refs : P → ℘(path) ⟨what unit's outputs compile against⟩
32
60
  outputs : P → ℘(path)
@@ -41,19 +69,49 @@ cross(S) ≜ |R ∩ ⋃ { sᵢ × sⱼ | sᵢ, sⱼ ∈ S ∧ i ≠ j }|
41
69
  wave(0) ≜ { unit | ∄ u : (unit, u) ∈ R }
42
70
  wave(n+1) ≜ { unit | unit ∉ W(n) ∧ ∀ u : (unit, u) ∈ R ⇒ u ∈ W(n) }
43
71
  W(n) ≜ ⋃ { wave(i) | i ≤ n }
44
- frontier(P) ≜ { unit | state(unit) ∈ { ready, active } } ⟨where the plan IS · ¬ only
45
- what is dispatchable⟩
46
- blocked(unit) ⇔ ∃ u : (unit, u) ∈ R ∧ state(u) ≠ completed
47
- ruling-owed(unit) ⇔ a decision nobody has taken stands between unit and acceptance
48
- mirror : (state, R, spec) → document
72
+ owed @ note
73
+ blocked(unit) ⇔ ∃ u ∈ deps(unit) : ¬satisfied(u)
74
+ ready(unit) ⇔ bound(P) ∧ ¬blocked(unit) ∧ ∄ owed note blocking unit ∨ P ⟨computed, never stored · ready
75
+ PROMISES an executor can FINISH · conflating a dep with a ruling stalls a fan-out⟩
76
+ frontier(P) ≜ { unit | ready(unit) ∧ state(unit) = ${UNIT.states[0]} } ∪ { unit | bound(P) ∧ ${UNIT.states[0]} ≺ state(unit) ≺ ${UNIT.satisfies} } ⟨where
77
+ the plan IS · ¬ only what is dispatchable · ¬bound(P) ⇒ frontier(P) = ∅⟩
49
78
  planner ≜ the planner ⟨bounded to s⟩
50
79
  conform @ signify
80
+ show(P) ≜ \`scripts/plan.mjs show [<plan>]\` ↦ the bound P in wave order ∨ any P named, whole
81
+ show(unit) ≜ \`scripts/plan.mjs show <unit> --plan <p>\` ↦ one unit in full
82
+ add(unit) ≜ \`scripts/plan.mjs add <unit> --plan <p> --realizes <concept> --intent <i> [--static <path>]… [--deps <unit>]… [--outputs <path>]… [--accept <criterion>]… [--plan-realizes <concept>]…\` ⟨pin(unit) taken · the first add naming an absent P proposes it, realizing each --plan-realizes⟩
83
+ advance(unit) ≜ \`scripts/plan.mjs advance <unit> --plan <p> --to <state>\`
84
+ retract(unit) ≜ \`scripts/plan.mjs retract <unit> --plan <p>\`
85
+ revise(unit) ≜ \`scripts/plan.mjs revise <unit> --plan <p> [--intent <i>] [--static <path>]… [--deps <unit>]… [--outputs <path>]… [--accept <criterion>]…\` ⟨spec(unit) · pin(unit) kept⟩
86
+ revise(P) ≜ \`scripts/plan.mjs revise <plan> [--name <n>] [--realizes <concept>]…\` ⟨name(P) ∨ realizes(P)⟩
87
+ bind(P) ≜ \`scripts/plan.mjs bind <plan>\` ⟨bound(P) ∧ the P bound before returns to ${PLAN.states[0]}⟩
88
+ close(P) ≜ \`scripts/plan.mjs close <plan>\` ⟨closed(P)⟩
89
+ reconcile(x) ≜ \`scripts/plan.mjs reconcile <unit> --plan <p> [--name <n>] [--realizes <concept>] [--intent <i>] [--static <path>]… [--deps <unit>]… [--outputs <path>]… [--accept <criterion>]… [--state <state>] [--repin]\` ∨ \`scripts/plan.mjs reconcile <plan> [--name <n>] [--realizes <concept>]… [--state <state>]\` ↦ one version superseding every current version of x ⟨each field the versions disagree on is given · a unit whose versions pin differently takes --repin⟩
51
90
 
91
+ ∀ add ∨ advance ∨ retract ∨ revise ∨ bind ∨ close ∨ reconcile : \`--author <who> --reason <why> --cause <what caused it>\` ⟨a set-valued flag repeats, one member each⟩
52
92
  ∀ unit : realizes(unit) ∈ { anchor(c) | c ∈ s } ⟨TOTALITY is the gate · a unit citing no
53
93
  concept is work whose purpose cannot be stated ∴ REFUSED at authoring, ¬ warned⟩
54
94
  ∀ unit : closure(denotes(realizes(unit))) ⊆ s ⟨a unit reaching outside its piece is a
55
95
  BOUNDARY finding · SURFACE it ; the planner may ¬ redraw the cut⟩
56
- pin(s) ≠ digest(s) ⇒ REFUSE ⟨the design moved under the plan · drift, ¬ staleness⟩
96
+ ∀ unit : realizes(unit) = the concept pin(unit) names ∧ realizes(unit) ∈ realizes(P) ⟨a merge
97
+ breaking it is incoherent(P), reported like the others⟩
98
+ |{ P | bound(P) }| ≤ 1 ⟨held by bind(P), which returns the P bound before⟩
99
+ ∀ n : |{ P | live(P) ∧ name(P) = n }| ≤ 1 ∧ ∀ P : |{ unit ∈ P | live(unit) ∧ name(unit) = n }| ≤ 1
100
+ closed(P) ⇒ name(P) kept ∧ ∄ write to P ∨ any unit ∈ P ⟨closed is final · readable forever⟩
101
+ ¬closed(P) ⇒ revise(P) admitted ⟨its name ∧ its concepts, never its state⟩
102
+ state(P) moves by bind(P) ∨ close(P) alone
103
+ revise routes to revise(unit) ∨ revise(P) by the name it is given ⟨--plan puts a unit's P in view⟩
104
+ ∃ u : live(u) ∧ unit ∈ deps(u) ⇒ ¬ retract(unit)
105
+ advance(unit) ⊨ bound(P) ∧ one step forward in States(unit) ⟨a skip ∨ a step back refuses · a unit of an unbound P is authored ∧ revised, ¬ worked⟩
106
+ ∀ unit : R acyclic ∧ ∀ u ∈ deps(unit) : live(u) ∧ u ∈ P
107
+ an owed note blocking P ⇒ ¬ bind(P) ∧ ∀ unit ∈ P : ¬ready(unit)
108
+ add(unit) ⊨ ∀ c ∈ closure(denotes(realizes(unit))) : c has exactly one current version ∧ ¬withdrawn(c) ⟨a pin is taken on settled ground alone⟩
109
+ pin(unit) retaken ⇔ \`scripts/plan.mjs revise <unit> --plan <p> --repin --reason <why>\` ⟨the ONLY way · never a side effect of editing spec(unit)⟩
110
+ withdrawn(denotes(realizes(unit))) ⇒ drifted(unit) ∧ ¬ incoherent(P) ⟨a retraction in the design never breaks a plan law⟩
111
+ drifted(unit) ∨ suspect(unit) ⇒ SURFACE ⟨the design moved under the plan · drift, ¬ staleness⟩
112
+ diverged(x) ⇒ reconcile(x) ⟨an ordinary write on x refuses⟩
113
+ incoherent(P) ⇒ repaired by ordinary writes, one at a time
114
+ reconcile ⊨ self ⟨reconciliation of plans ∧ units is the architect's alone⟩
57
115
  slices(P) cut on s ⟨¬ file-adjacency · files are a LAGGING proxy for modularity ∴
58
116
  file-cut ⇒ ∀ unit ⊇ fragments of several c ⇒ executor finishes ∧ system incoherent⟩
59
117
  ⋃ slices(P) = P ∧ ∀ s₁, s₂ ∈ slices(P) : s₁ ≠ s₂ ⇒ s₁ ∩ s₂ = ∅
@@ -75,15 +133,13 @@ slices(P) cut on s ⟨¬ file-adjacency · files are a LAGGING proxy for modular
75
133
  ∀ unit : measurement ∈ spec(unit) ⇒ measurement = claim⟨timestamp⟩ ∴ re-derive ≺ cite
76
134
  ⟨a count in a unit is CENSUS OUTPUT, ¬ a datum · the tree moves ∧ nothing reds⟩
77
135
  ∀ unit : reach-leg(unit) ⊨ print(denominator) ⟨∄ denominator ⇒ found-nothing ≡ could-not-look⟩
78
- state(unit) = ready ⇒ ¬blocked(unit) ∧ ¬ruling-owed(unit) ⟨ready PROMISES an executor can
79
- FINISH · conflating a dep with a ruling stalls a fan-out on one unanswered question⟩
80
136
  ∀ unit : conform(spec(unit))
81
- advance ⊨ mirror ⟨state moves ∴ the document moves · drift is ¬ a later chore⟩
82
- plan ≜ take(s) → census ⟨delegable⟩ → slice(s) → author spec(∀ unit) → mirror → ratify @ planner`;
137
+ plan ≜ take(s) → census ⟨delegable⟩ → slice(s) → add(∀ unit) ⟨spec ∧ pin⟩ → ratify @ planner → advance`;
83
138
  export const plan = {
84
139
  name: 'plan',
85
- description: `use this skill to decompose ONE cut piece of a design into MECE units of work — each citing the single concept it realizes, with its inputs, 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 piece that cannot be planned as handed down is surfaced, never silently redrawn.`,
140
+ description: `use this skill to decompose ONE cut piece of a design into MECE units of work — each citing the single concept it realizes, with its inputs, 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 piece that cannot be planned as handed down is surfaced, never silently redrawn. Its verbs show a plan or a unit, add, advance, retract and revise units, revise, bind and close a plan, and reconcile either.`,
86
141
  formalBlock: FORMAL_BLOCK,
87
- composition: () => [design],
142
+ runtime: { capability: 'plan', configuration: LIFECYCLE },
143
+ composition: () => [design, note],
88
144
  };
89
145
  //# sourceMappingURL=skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/plan/skill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,kFAAkF;AAClF,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,oFAAoF;AACpF,oCAAoC;AACpC,EAAE;AACF,mFAAmF;AACnF,qFAAqF;AACrF,6BAA6B;AAC7B,EAAE;AACF,qFAAqF;AACrF,sFAAsF;AACtF,uFAAuF;AACvF,gFAAgF;AAEhF,MAAM,YAAY,GAChB;;;;;;;aAOW,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAyDiF,CAAC;AAErH,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,ojBAAojB;IACjkB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;CAC5B,CAAC"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/plan/skill.ts"],"names":[],"mappings":"AAEA,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,qFAAqF;AACrF,sFAAsF;AACtF,uFAAuF;AACvF,gFAAgF;AAEhF,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,GAChB;;;;;;;;;gBASc,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA6BK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,SAAS;;;;;;;;;;;uFAWxD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uGAkDqB,CAAC;AAE3H,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,krBAAkrB;IAC/rB,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;CAClC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratylus/canon",
3
- "version": "0.3.0",
3
+ "version": "0.5.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.2.0"
21
+ "@cratylus/schema": "0.3.0"
22
22
  },
23
23
  "devDependencies": {
24
- "@cratylus/forge": "0.6.0",
25
- "@cratylus/runtime": "0.2.0",
24
+ "@cratylus/forge": "0.7.0",
25
+ "@cratylus/runtime": "0.3.0",
26
26
  "@cratylus/tooling": "0.0.0",
27
27
  "@types/node": "^22.0.0",
28
28
  "tsx": "^4.19.0",
@@ -57,8 +57,6 @@
57
57
  "clean": "rm -rf dist",
58
58
  "dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput",
59
59
  "pack:smoke": "tsx tooling/pack-smoke/pack-smoke-cli.ts",
60
- "plan-set": "tsx tooling/plan-set-cli.ts",
61
- "plan": "sh tooling/plan-set/plan-set.sh",
62
60
  "project:targets": "tsx tooling/project-targets-cli.ts",
63
61
  "scaffold": "tsx tooling/scaffold-cli.ts",
64
62
  "stance-guard:test": "sh test/support/guardrail/test-stance-guardrail.sh",
@@ -1,2 +0,0 @@
1
- export const build = `build ≜ ⟨conceive design produce deliver⟩`;
2
- //# sourceMappingURL=build.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/dimensions/role/build.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAS,2CAA2C,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const converse: Role;
@@ -1,2 +0,0 @@
1
- export const converse = `converse ≜ dialogue ⟨the-deliverable⟩`;
2
- //# sourceMappingURL=converse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"converse.js","sourceRoot":"","sources":["../../../src/dimensions/role/converse.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS,uCAAuC,CAAC"}
@@ -1,2 +0,0 @@
1
- export const curate = `curate ≜ ⟨canonical-corpus⟩`;
2
- //# sourceMappingURL=curate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"curate.js","sourceRoot":"","sources":["../../../src/dimensions/role/curate.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS,6BAA6B,CAAC"}
@@ -1,2 +0,0 @@
1
- export const diagnose = `diagnose`;
2
- //# sourceMappingURL=diagnose.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../../src/dimensions/role/diagnose.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS,UAAU,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const document: Role;
@@ -1,2 +0,0 @@
1
- export const document = `document ≜ ⟨reader-facing explanatory⟩`;
2
- //# sourceMappingURL=document.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/dimensions/role/document.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS,wCAAwC,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const implement: Role;
@@ -1,2 +0,0 @@
1
- export const implement = `implement`;
2
- //# sourceMappingURL=implement.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../../src/dimensions/role/implement.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAS,WAAW,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const operate: Role;
@@ -1,2 +0,0 @@
1
- export const operate = `operate ≜ live-system ⟨steady-state⟩`;
2
- //# sourceMappingURL=operate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operate.js","sourceRoot":"","sources":["../../../src/dimensions/role/operate.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAS,sCAAsC,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const orchestrate: Role;
@@ -1,2 +0,0 @@
1
- export const orchestrate = `orchestrate`;
2
- //# sourceMappingURL=orchestrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../src/dimensions/role/orchestrate.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAS,aAAa,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const plan: Role;
@@ -1,2 +0,0 @@
1
- export const plan = `plan ≜ ⟨decompose sequence⟩`;
2
- //# sourceMappingURL=plan.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/dimensions/role/plan.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAS,6BAA6B,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const research: Role;
@@ -1,2 +0,0 @@
1
- export const research = `research`;
2
- //# sourceMappingURL=research.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"research.js","sourceRoot":"","sources":["../../../src/dimensions/role/research.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAS,UAAU,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const review: Role;
@@ -1,2 +0,0 @@
1
- export const review = `review`;
2
- //# sourceMappingURL=review.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/dimensions/role/review.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAS,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { Role } from '../../manifest.js';
2
- export declare const test: Role;
@@ -1,2 +0,0 @@
1
- export const test = `test ≜ ⟨exercise pass-fail-evidence⟩`;
2
- //# sourceMappingURL=test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/dimensions/role/test.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAS,sCAAsC,CAAC"}
@@ -1,31 +0,0 @@
1
- /** The plan-layout state folders, in task-file lifecycle order. */
2
- export declare const PLAN_STATES: readonly ["pending", "ready", "active", "completed"];
3
- /** `frontier(P)` — the states a shard sits in when the plan is workable AT it
4
- * (`{ t | state(t) ∈ { ready, active } }`, where the plan IS, not merely
5
- * what is dispatchable). A subset of {@link PLAN_STATES} and not derivable from
6
- * their ORDER: `pending` is open too, and is not frontier. */
7
- export declare const PLAN_FRONTIER: readonly ["ready", "active"];
8
- /**
9
- * The plan-tier dotfile MARKERS whose only home is here.
10
- *
11
- * A relation with no on-disk carrier is not readable — the reading `plan-set.sh`
12
- * states in its own words when it explains why `.landed` exists ("exactly parallel
13
- * to `.superseded-by`"). These are the two markers a reader of the plan set needs
14
- * that have no other TypeScript home: `.superseded-by` already has one
15
- * (`plan-set.ts`'s `SUPERSEDED_MARKER`) and is deliberately not restated.
16
- *
17
- * `.ruling-owed` is the third carrier this corpus has minted on that reading, and
18
- * it carries the concept the corpus ALREADY signifies as a ruling owed — "a
19
- * decision nobody has taken", which the retired praxis cell distinguished from a
20
- * dependency ("a dep waits itself out, a ruling needs a human"). At the SHARD tier
21
- * that concept is `ruling-owed(t)`, and it gates `ready`; at the
22
- * PLAN tier it had no carrier at all, so a fork the principal cannot resolve —
23
- * irreversible, or above its competence — was unreadable from disk however loudly
24
- * it had been surfaced. Its content is the fork as it was put to the operator.
25
- */
26
- export declare const PLAN_MARKERS: {
27
- /** `bound(P)` — the plan-level commitment; exactly one plan carries it (WIP=1). */
28
- readonly bound: ".bound";
29
- /** `fork⊥(P)` — a fork surfaced to the operator, whose ruling nobody has taken. */
30
- readonly rulingOwed: ".ruling-owed";
31
- };
@@ -1,46 +0,0 @@
1
- // plan-states.ts — the CANON home of the sharded-plan-layout state folders, in
2
- // lifecycle order. ONE home, two consumers (DRY): the `plan` skill's formal block
3
- // (`../skills/plan/skill.ts`, whose `States ≜ {…}` set derives from here) and the
4
- // canon project template (`./project-template.ts`, whose `planStates` is this). It
5
- // lives here — not as a second export on the plan skill module — because a skill
6
- // module carries exactly one export (its `Skill`); this is the plan cell's canon,
7
- // factored out to a sibling both can source.
8
- //
9
- // The consumer was `praxis` until that cell was superseded by the design/plan/deliver
10
- // trio: praxis carried understanding, specification and governance in one place, and
11
- // the state set belongs to the middle term alone.
12
- /** The plan-layout state folders, in task-file lifecycle order. */
13
- export const PLAN_STATES = ['pending', 'ready', 'active', 'completed'];
14
- /** `frontier(P)` — the states a shard sits in when the plan is workable AT it
15
- * (`{ t | state(t) ∈ { ready, active } }`, where the plan IS, not merely
16
- * what is dispatchable). A subset of {@link PLAN_STATES} and not derivable from
17
- * their ORDER: `pending` is open too, and is not frontier. */
18
- export const PLAN_FRONTIER = [
19
- 'ready',
20
- 'active',
21
- ];
22
- /**
23
- * The plan-tier dotfile MARKERS whose only home is here.
24
- *
25
- * A relation with no on-disk carrier is not readable — the reading `plan-set.sh`
26
- * states in its own words when it explains why `.landed` exists ("exactly parallel
27
- * to `.superseded-by`"). These are the two markers a reader of the plan set needs
28
- * that have no other TypeScript home: `.superseded-by` already has one
29
- * (`plan-set.ts`'s `SUPERSEDED_MARKER`) and is deliberately not restated.
30
- *
31
- * `.ruling-owed` is the third carrier this corpus has minted on that reading, and
32
- * it carries the concept the corpus ALREADY signifies as a ruling owed — "a
33
- * decision nobody has taken", which the retired praxis cell distinguished from a
34
- * dependency ("a dep waits itself out, a ruling needs a human"). At the SHARD tier
35
- * that concept is `ruling-owed(t)`, and it gates `ready`; at the
36
- * PLAN tier it had no carrier at all, so a fork the principal cannot resolve —
37
- * irreversible, or above its competence — was unreadable from disk however loudly
38
- * it had been surfaced. Its content is the fork as it was put to the operator.
39
- */
40
- export const PLAN_MARKERS = {
41
- /** `bound(P)` — the plan-level commitment; exactly one plan carries it (WIP=1). */
42
- bound: '.bound',
43
- /** `fork⊥(P)` — a fork surfaced to the operator, whose ruling nobody has taken. */
44
- rulingOwed: '.ruling-owed',
45
- };
46
- //# sourceMappingURL=plan-states.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-states.js","sourceRoot":"","sources":["../src/plan-states.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kFAAkF;AAClF,kFAAkF;AAClF,mFAAmF;AACnF,iFAAiF;AACjF,kFAAkF;AAClF,6CAA6C;AAC7C,EAAE;AACF,sFAAsF;AACtF,qFAAqF;AACrF,kDAAkD;AAElD,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAEhF;;;+DAG+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO;IACP,QAAQ;CACkD,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,mFAAmF;IACnF,KAAK,EAAE,QAAQ;IACf,mFAAmF;IACnF,UAAU,EAAE,cAAc;CAClB,CAAC"}