@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
@@ -0,0 +1,105 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // A ROLE, AND THE FOLD THAT RESOLVES ONE.
3
+ //
4
+ // A role is a BUNDLE OF EXPECTED ASPECTS. In the world, naming someone an architect
5
+ // tells you how they reason, what they are accountable for, what they may decide and
6
+ // what they must delegate; the corpus adopts that account because it is what the word
7
+ // already means, and a corpus whose roles mean what roles mean needs no second
8
+ // vocabulary for it.
9
+ //
10
+ // Before this module, `role` was a scalar dimension over bare tokens, so the corpus
11
+ // could NAME a role and could not STATE one. Everything the name should have carried
12
+ // was retyped on every holder — `kino` and `architect` agreed on 19 of 22 dimensions
13
+ // by copying — and the duplication bought nothing, because what must be FULL is the
14
+ // TARGET (a harness reads a flat declaration, never a resolution chain) and the fold
15
+ // below runs at `select`, before `compose`. The emitted Target is exactly as flat as
16
+ // it was when every value was retyped by hand.
17
+ //
18
+ // A ROLE IS NOT A DIMENSION, AND IT IS NOT A BASE CLASS. It is made OF dimension
19
+ // values, so it cannot be one of them; and there is no lineage here — `architect` is
20
+ // a thin holder of the architect role exactly as `kino` is, with no parent pointer, no
21
+ // abstract cell nobody dispatches, and no chain to resolve. Two operands, one
22
+ // precedence rule, no ordering question.
23
+ //
24
+ // SINGULAR ARITY IS THE POINT, not a simplification. A role is the CONTRACT A PEER
25
+ // DISPATCHES AGAINST: when an architect hands a cut piece to a planner it reasons about
26
+ // the planner's role to know what comes back. A union of roles is a contract no
27
+ // dispatcher can reason about, and it would readmit role conflict — incompatible
28
+ // demands between two positions held at once — which singular arity deletes outright.
29
+ // The situational switch (the same practitioner architects here and implements there)
30
+ // is modelled by DISPATCH: the situation selects which agent runs.
31
+ //
32
+ // WHAT A HOLDER MAY NOT ESCAPE is exactly one thing: the role's own contract, the
33
+ // `role` dimension value stating ⟨reads, writes⟩ and everything that follows from the
34
+ // pair. It is inviolable BY CONSTRUCTION rather than by a marking — `Declared` omits
35
+ // the key, so there is no field to override and no rule to enforce. Every other aspect
36
+ // a role supplies is a DEFAULT: a scalar the holder may override, a set the holder may
37
+ // extend. A general constitutive/default marking was considered and rejected: with the
38
+ // contract folded into the role's own value, no second aspect needed protecting, and a
39
+ // mechanism with no live subject is structure that carries no load.
40
+ // ─────────────────────────────────────────────────────────────────────────────
41
+ import { kebabToCamel } from '@cratylus/schema';
42
+ import { DIMENSION_NAMES, MANIFEST } from '../manifest.js';
43
+ /**
44
+ * `select(a) = hold(a) ⊕ declare(a)` — the two-operand fold, run at authoring time so
45
+ * the projected Target stays flat.
46
+ *
47
+ * `⊕` reads the manifest's own `arity`, so the precedence rule is stated once and
48
+ * cannot disagree with itself:
49
+ *
50
+ * · set → role members first, then the holder's own — EXTEND. A role-supplied
51
+ * member therefore survives every holder, which is why a set needs no
52
+ * inviolability marking: union already guarantees it.
53
+ * · scalar → the holder's value when the KEY IS PRESENT, else the role's — OVERRIDE.
54
+ * Present-with-`null` is an explicit suppression and is honoured as one;
55
+ * absent means "whatever the position says", which is the common case.
56
+ *
57
+ * A dimension neither operand states is `null` — omit-to-inherit, exactly as a
58
+ * hand-written vector spells it.
59
+ *
60
+ * `provenance.mark` NEVER folds: it is instance-bound, minted per agent at
61
+ * `create-agent`, and two agents sharing a mark are indistinguishable in the one place
62
+ * an operator reads them. It arrives on `declared` and leaves untouched.
63
+ */
64
+ export function holds(role, declared) {
65
+ const resolved = {
66
+ name: declared.name,
67
+ description: declared.description,
68
+ archetype: declared.archetype,
69
+ provenance: declared.provenance,
70
+ };
71
+ if (declared.preamble !== undefined) {
72
+ resolved.preamble = declared.preamble;
73
+ }
74
+ const skills = [
75
+ ...(role.skills ?? []),
76
+ ...(declared.skills ?? []).filter((s) => !(role.skills ?? []).includes(s)),
77
+ ];
78
+ if (skills.length > 0) {
79
+ resolved.skills = skills;
80
+ }
81
+ const roleVector = role.vector;
82
+ const declaredVector = declared;
83
+ for (const dimension of DIMENSION_NAMES) {
84
+ const field = kebabToCamel(dimension);
85
+ if (dimension === 'role') {
86
+ resolved[field] = role.sign;
87
+ continue;
88
+ }
89
+ const fromRole = roleVector[field];
90
+ const stated = field in declaredVector ? declaredVector[field] : undefined;
91
+ if (MANIFEST[dimension].arity === 'set') {
92
+ const base = Array.isArray(fromRole) ? fromRole : [];
93
+ const extension = Array.isArray(stated) ? stated : [];
94
+ const union = [...base, ...extension.filter((v) => !base.includes(v))];
95
+ resolved[field] = union.length > 0 ? union : null;
96
+ continue;
97
+ }
98
+ resolved[field] =
99
+ field in declaredVector ? (stated ?? null) : (fromRole ?? null);
100
+ }
101
+ // The ONE cast, and it is structural rather than hopeful: the loop is driven by
102
+ // `DIMENSION_NAMES`, so every dimension field of `Agent` is assigned exactly once.
103
+ return resolved;
104
+ }
105
+ //# sourceMappingURL=hold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hold.js","sourceRoot":"","sources":["../../src/roles/hold.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,EAAE;AACF,oFAAoF;AACpF,qFAAqF;AACrF,sFAAsF;AACtF,+EAA+E;AAC/E,qBAAqB;AACrB,EAAE;AACF,oFAAoF;AACpF,qFAAqF;AACrF,qFAAqF;AACrF,oFAAoF;AACpF,qFAAqF;AACrF,qFAAqF;AACrF,+CAA+C;AAC/C,EAAE;AACF,iFAAiF;AACjF,qFAAqF;AACrF,uFAAuF;AACvF,8EAA8E;AAC9E,yCAAyC;AACzC,EAAE;AACF,mFAAmF;AACnF,wFAAwF;AACxF,gFAAgF;AAChF,iFAAiF;AACjF,sFAAsF;AACtF,sFAAsF;AACtF,mEAAmE;AACnE,EAAE;AACF,kFAAkF;AAClF,sFAAsF;AACtF,qFAAqF;AACrF,uFAAuF;AACvF,uFAAuF;AACvF,uFAAuF;AACvF,uFAAuF;AACvF,oEAAoE;AACpE,gFAAgF;AAMhF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuC3D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,KAAK,CAAC,IAAc,EAAE,QAAkB;IACtD,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC;IACF,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACxC,CAAC;IACD,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3E,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAiC,CAAC;IAC1D,MAAM,cAAc,GAAG,QAA8C,CAAC;IAEtE,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC;YACb,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,gFAAgF;IAChF,mFAAmF;IACnF,OAAO,QAA4B,CAAC;AACtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RoleCell } from './hold.js';
2
+ export declare const implementerRole: RoleCell;
@@ -0,0 +1,62 @@
1
+ import { fileOps as fileOps_actions } from '../dimensions/actions/file-ops.js';
2
+ import { maintenance as maintenance_audienceAdaptation } from '../dimensions/audience-adaptation/maintenance.js';
3
+ import { handoff as handoff_autonomy } from '../dimensions/autonomy/handoff.js';
4
+ import { missionCommand } from '../dimensions/autonomy/mission-command.js';
5
+ import { softwareEngineering as softwareEngineering_capabilities } from '../dimensions/capabilities/software-engineering.js';
6
+ import { verificationTesting as verificationTesting_capabilities } from '../dimensions/capabilities/verification-testing.js';
7
+ import { cratylism as cratylism_engineeringPrinciples } from '../dimensions/engineering-principles/cratylism.js';
8
+ import { dry as dry_engineeringPrinciples } from '../dimensions/engineering-principles/dry.js';
9
+ import { firstPrinciples as firstPrinciples_engineeringPrinciples } from '../dimensions/engineering-principles/first-principles.js';
10
+ import { simplicity as simplicity_engineeringPrinciples } from '../dimensions/engineering-principles/simplicity.js';
11
+ import { plain as plain_formality } from '../dimensions/formality/plain.js';
12
+ import { correctnessOriented as correctnessOriented_framing } from '../dimensions/framing/correctness-oriented.js';
13
+ import { honesty as honesty_guardrails } from '../dimensions/guardrails/honesty.js';
14
+ import { correctionConsolidation as correctionConsolidation_learning } from '../dimensions/learning/correction-consolidation.js';
15
+ import { correctness as correctness_objective } from '../dimensions/objective/correctness.js';
16
+ import { react as react_reasoningStrategy } from '../dimensions/reasoning-strategy/react.js';
17
+ import { implementer as implementer_role } from '../dimensions/role/implementer.js';
18
+ import { satisfice as satisfice_satisficing } from '../dimensions/satisficing/satisfice.js';
19
+ import { executableTestOracle as executableTestOracle_selfEvaluation } from '../dimensions/self-evaluation/executable-test-oracle.js';
20
+ import { perception as perception_situationAwareness } from '../dimensions/situation-awareness/perception.js';
21
+ import { limitationDisclosure as limitationDisclosure_transparency } from '../dimensions/transparency/limitation-disclosure.js';
22
+ // THE BOTTOM RUNG, and the only one whose write layer is the substrate. It carries no
23
+ // workflow skill by design: a skill guides an agent through decisions it must make, and
24
+ // this position's decisions were made for it. It needs a unit of work, tools, and the
25
+ // discipline to stay inside the boundary.
26
+ export const implementerRole = {
27
+ sign: implementer_role,
28
+ vector: {
29
+ formality: plain_formality,
30
+ audienceAdaptation: maintenance_audienceAdaptation,
31
+ // `limitation-disclosure`: this position's entire value to the layer above is an
32
+ // honest account of what it could NOT establish. A clean report that hides an
33
+ // unproven leg is worse than a failure, because it is acted on.
34
+ transparency: limitationDisclosure_transparency,
35
+ autonomy: [missionCommand, handoff_autonomy],
36
+ objective: correctness_objective,
37
+ engineeringPrinciples: [
38
+ cratylism_engineeringPrinciples,
39
+ firstPrinciples_engineeringPrinciples,
40
+ simplicity_engineeringPrinciples,
41
+ dry_engineeringPrinciples,
42
+ ],
43
+ guardrails: [honesty_guardrails],
44
+ capabilities: [
45
+ softwareEngineering_capabilities,
46
+ verificationTesting_capabilities,
47
+ ],
48
+ actions: [fileOps_actions],
49
+ learning: correctionConsolidation_learning,
50
+ situationAwareness: perception_situationAwareness,
51
+ framing: correctnessOriented_framing,
52
+ reasoningStrategy: react_reasoningStrategy,
53
+ // `satisfice`, and it is the one aspect that must not be `optimize` here.
54
+ // Optimising past the spec IS the exceeding failure the contract names: this
55
+ // position builds to the contract and stops.
56
+ satisficing: satisfice_satisficing,
57
+ // The oracle is the spec's own criteria, executed. That is verification, and it is
58
+ // exactly right at this rung — it is only wrong when mistaken for validation.
59
+ selfEvaluation: executableTestOracle_selfEvaluation,
60
+ },
61
+ };
62
+ //# sourceMappingURL=implementer.js.map
@@ -0,0 +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,OAAO,IAAI,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAChF,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,sFAAsF;AACtF,0CAA0C;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE;QACN,SAAS,EAAE,eAAe;QAC1B,kBAAkB,EAAE,8BAA8B;QAClD,iFAAiF;QACjF,8EAA8E;QAC9E,gEAAgE;QAChE,YAAY,EAAE,iCAAiC;QAC/C,QAAQ,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;QAC5C,SAAS,EAAE,qBAAqB;QAChC,qBAAqB,EAAE;YACrB,+BAA+B;YAC/B,qCAAqC;YACrC,gCAAgC;YAChC,yBAAyB;SAC1B;QACD,UAAU,EAAE,CAAC,kBAAkB,CAAC;QAChC,YAAY,EAAE;YACZ,gCAAgC;YAChC,gCAAgC;SACjC;QACD,OAAO,EAAE,CAAC,eAAe,CAAC;QAC1B,QAAQ,EAAE,gCAAgC;QAC1C,kBAAkB,EAAE,6BAA6B;QACjD,OAAO,EAAE,2BAA2B;QACpC,iBAAiB,EAAE,uBAAuB;QAC1C,0EAA0E;QAC1E,6EAA6E;QAC7E,6CAA6C;QAC7C,WAAW,EAAE,qBAAqB;QAClC,mFAAmF;QACnF,8EAA8E;QAC9E,cAAc,EAAE,mCAAmC;KACpD;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RoleCell } from './hold.js';
2
+ export declare const plannerRole: RoleCell;
@@ -0,0 +1,73 @@
1
+ import { fileOps as fileOps_actions } from '../dimensions/actions/file-ops.js';
2
+ import { maintenance as maintenance_audienceAdaptation } from '../dimensions/audience-adaptation/maintenance.js';
3
+ import { handoff as handoff_autonomy } from '../dimensions/autonomy/handoff.js';
4
+ import { missionCommand } from '../dimensions/autonomy/mission-command.js';
5
+ import { planningDecomposition as planningDecomposition_capabilities } from '../dimensions/capabilities/planning-decomposition.js';
6
+ import { researchInvestigation as researchInvestigation_capabilities } from '../dimensions/capabilities/research-investigation.js';
7
+ import { cratylism as cratylism_engineeringPrinciples } from '../dimensions/engineering-principles/cratylism.js';
8
+ import { dry as dry_engineeringPrinciples } from '../dimensions/engineering-principles/dry.js';
9
+ import { firstPrinciples as firstPrinciples_engineeringPrinciples } from '../dimensions/engineering-principles/first-principles.js';
10
+ import { llmNative as llmNative_engineeringPrinciples } from '../dimensions/engineering-principles/llm-native.js';
11
+ import { mece as mece_engineeringPrinciples } from '../dimensions/engineering-principles/mece.js';
12
+ import { simplicity as simplicity_engineeringPrinciples } from '../dimensions/engineering-principles/simplicity.js';
13
+ import { plain as plain_formality } from '../dimensions/formality/plain.js';
14
+ import { decompositional as decompositional_framing } from '../dimensions/framing/decompositional.js';
15
+ import { honesty as honesty_guardrails } from '../dimensions/guardrails/honesty.js';
16
+ import { correctionConsolidation as correctionConsolidation_learning } from '../dimensions/learning/correction-consolidation.js';
17
+ import { thoroughness as thoroughness_objective } from '../dimensions/objective/thoroughness.js';
18
+ import { planAndSolve as planAndSolve_reasoningStrategy } from '../dimensions/reasoning-strategy/plan-and-solve.js';
19
+ import { planner as planner_role } from '../dimensions/role/planner.js';
20
+ import { optimize as optimize_satisficing } from '../dimensions/satisficing/optimize.js';
21
+ import { acceptanceCriteriaCheck as acceptanceCriteriaCheck_selfEvaluation } from '../dimensions/self-evaluation/acceptance-criteria-check.js';
22
+ import { comprehension as comprehension_situationAwareness } from '../dimensions/situation-awareness/comprehension.js';
23
+ import { provenanceAttribution as provenanceAttribution_transparency } from '../dimensions/transparency/provenance-attribution.js';
24
+ // THE MIDDLE RUNG. Holds `mission-command` and `handoff` but NOT `principal-self`: the
25
+ // boundary was drawn above it, and the contract's `⊄ writes C` is what makes that
26
+ // refusal structural rather than a matter of discipline.
27
+ //
28
+ // `system-design` is absent alongside `software-engineering` — this position neither
29
+ // designs nor builds. What it owns is the census and the cut-into-units.
30
+ export const plannerRole = {
31
+ sign: planner_role,
32
+ // The role declares one skill, `plan`, and is given plan's composition with it
33
+ // (`design`, `note`), so it reads the boundary it plans inside. `deliver` belongs
34
+ // to the rung ABOVE, which draws that boundary; the rung BELOW declares none at
35
+ // all, because an implementer's decisions are made for it by its spec.
36
+ skills: ['plan'],
37
+ vector: {
38
+ formality: plain_formality,
39
+ audienceAdaptation: maintenance_audienceAdaptation,
40
+ // `provenance-attribution`: a census is only worth what its sourcing is worth, and
41
+ // a count quoted without its denominator is indistinguishable from not having
42
+ // looked. Every finding carries where it came from and whether it was observed or
43
+ // inferred.
44
+ transparency: provenanceAttribution_transparency,
45
+ autonomy: [missionCommand, handoff_autonomy],
46
+ // `thoroughness`, not `delivery`: this position ships no artifact a user sees, and
47
+ // its failure mode is an incomplete census rather than a slow one.
48
+ objective: thoroughness_objective,
49
+ engineeringPrinciples: [
50
+ cratylism_engineeringPrinciples,
51
+ llmNative_engineeringPrinciples,
52
+ firstPrinciples_engineeringPrinciples,
53
+ simplicity_engineeringPrinciples,
54
+ dry_engineeringPrinciples,
55
+ mece_engineeringPrinciples,
56
+ ],
57
+ guardrails: [honesty_guardrails],
58
+ capabilities: [
59
+ planningDecomposition_capabilities,
60
+ researchInvestigation_capabilities,
61
+ ],
62
+ learning: correctionConsolidation_learning,
63
+ // `comprehension`, where the architect holds `projection`: this position's job is
64
+ // to establish what IS, exhaustively, not to anticipate what follows.
65
+ situationAwareness: comprehension_situationAwareness,
66
+ framing: decompositional_framing,
67
+ reasoningStrategy: planAndSolve_reasoningStrategy,
68
+ satisficing: optimize_satisficing,
69
+ actions: [fileOps_actions],
70
+ selfEvaluation: acceptanceCriteriaCheck_selfEvaluation,
71
+ },
72
+ };
73
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/roles/planner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { design } from '../design/skill.js';
2
+ import { note } from '../note/skill.js';
2
3
  import { plan } from '../plan/skill.js';
3
4
  // WHERE THE TRUST DEFECT IS CLOSED. Acceptance keyed to a unit's own criteria is a
4
5
  // closed loop: the author writes the unit, writes its criteria, and checks the return
@@ -16,8 +17,27 @@ import { plan } from '../plan/skill.js';
16
17
  // rather than convenient: a check costing more than redoing the work is skipped, and
17
18
  // no instruction survives that gradient. Naming discipline is what buys the cheapness —
18
19
  // if the artifact spells its concept, two of the three are reading a name.
20
+ //
21
+ // WHERE THE READ GOES, AND WHY THE VERDICT DOES NOT FOLLOW IT. `validate ⊨ artifact` is
22
+ // right and it has a cost: reading artifacts is reading files — paths, identifiers, call
23
+ // sites — which is exactly the mechanical work the architect's contract calls a descent.
24
+ // Left there, the skill obliges the design-holder to descend on every wave, and by the
25
+ // third wave the design-holder is a code reviewer holding a lattice it can no longer
26
+ // carry. So `validate` is two operations under one name and they separate cleanly: the
27
+ // ASSAY (read the landed artifact, re-derive which concepts it realizes) is mechanical,
28
+ // substrate-bound and DELEGABLE; the JUDGMENT (what an unachieved concept means —
29
+ // rejection, an `amend(C)` because execution established a yield, or a design that was
30
+ // wrong) is keyed to C and is NOT.
31
+ //
32
+ // A THIRD PARTY DOES NOT REOPEN THE DEFECT THIS CELL CLOSES. The law forbids accepting
33
+ // on a claim from the party that BUILT the thing: one description, a closed loop. There
34
+ // are still two descriptions here and they are still held by different parties — the
35
+ // executor holds the spec and not the design, the assayer holds the design and not the
36
+ // spec. The artifact read the law demands still happens; it happens at the one site in
37
+ // the loop where reading substrate is the work rather than a descent, and what reaches
38
+ // the principal is in the only vocabulary the principal can check without descending.
19
39
  const FORMAL_BLOCK = `C @ design
20
- c ≜ a concept ⟨c ∈ C⟩
40
+ c @ design
21
41
  anchor @ design
22
42
  gloss @ design
23
43
  factors @ design
@@ -25,74 +45,94 @@ denotes @ design
25
45
  amend @ design
26
46
  yield ≜ what execution established ∧ ¬ derivable from C
27
47
  P @ plan
28
- unit ≜ a unit of work
48
+ unit @ plan
29
49
  wave @ plan
30
50
  frontier @ plan
31
51
  realizes @ plan
52
+ advance, bind, close, bound, ready @ plan
53
+ show ⟨C⟩ @ design
54
+ show ⟨P ∧ unit⟩ @ plan
32
55
  accept @ plan ⟨the MECHANICAL half⟩
33
56
  outputs @ plan
34
57
  artifact : P → ℘(path) ⟨what landed · the EVIDENCE⟩
35
58
  r ≜ an executor's return
36
59
  conform @ signify
37
60
  executor : P ⇀ agent
38
- self ≜ the principal ⟨the design-holder⟩
61
+ self @ design
62
+ capture @ note
39
63
  spells : path × anchor → 𝔹 ⟨identifiers · path · public surface bear the sign⟩
40
64
  covers : path × ℘(C) → 𝔹 ⟨observable behaviour ≅ the factorization · nothing missing
41
65
  ∧ nothing extra⟩
42
66
  sole : path × anchor → 𝔹 ⟨∄ other artifact realizing the same concept⟩
43
67
  verify : P × return → 𝔹 ⟨the EXECUTOR's · built-it-right, against spec⟩
44
68
  validate : P → 𝔹 ⟨the PRINCIPAL's · built-the-right-thing, against C⟩
69
+ assay : artifact → ℘(C) ⟨which concepts the artifact ACTUALLY realizes · the REVERSE of plan⟩
70
+ assayer : unit ⇀ agent ⟨role = assayer · holds C ∧ ¬ holds spec(unit)⟩
71
+ achieved : unit → 𝔹 ⟨the three questions, answered against the assay⟩
72
+ unachieved : unit → ℘(⟨c, uncovered-factor, locus⟩) ⟨what crosses UPWARD⟩
45
73
  defect ≜ ⟨symptom, locus, provenance⟩
46
74
  impedes : defect × P → 𝔹
47
75
  cost : act → effort
48
- bound : P → 𝔹 ⟨plan-level commitment · persists across sessions⟩
76
+ file(d) ≜ capture(d) ⟨its topic names the unit as \`u of plan p\` · beside the path ∴ it blocks nothing⟩
49
77
  electable ≜ { P | ¬terminal(P) ∧ ¬occupied(P) }
50
78
  terminal : P → 𝔹
51
- commit @ design
52
- accepts @ design
53
79
 
54
80
  ∀ unit, r : ¬conform(r) ⇒ ¬accept(unit)(r)
55
- validate(unit) ⇔ spells(artifact(unit), realizes(unit))
81
+ achieved(unit) ⇔ realizes(unit) ∈ assay(artifact(unit))
82
+ ∧ spells(artifact(unit), realizes(unit))
56
83
  ∧ covers(artifact(unit), factors(denotes(realizes(unit))))
57
84
  ∧ sole(artifact(unit), realizes(unit))
85
+ unachieved(unit) = ∅ ⇔ achieved(unit)
86
+ unachieved ⊨ C-typed ⟨it crosses in C's OWN vocabulary · mechanism-prose ⟨naming · structure ·
87
+ test-quality⟩ ⇒ REFUSE ∵ it descends the principal it was dispatched to spare⟩
88
+ locus ⊨ ROUTED ∧ ¬ read ⟨an ADDRESS so the redispatch has one · a citation is substrate, and
89
+ handing the principal substrate is the same defect in smaller pieces⟩
90
+ assay ⊨ artifact ⟨the ASSAYER reads the files · the ONE site in the loop where
91
+ substrate-reading is ¬ a descent⟩
92
+ assayer ⊥ executor ⟨TWO descriptions, two witnesses : executor holds spec ∧ ¬ holds C ·
93
+ assayer holds C ∧ ¬ holds spec⟩
94
+ validate(unit) ≜ unachieved(unit) = ∅ ⟨the principal JUDGES the assay ∧ ¬ re-reads the
95
+ artifact · the READ is delegable · the VERDICT is ¬ delegable ∵ keyed to C, which the
96
+ principal alone amends⟩
58
97
  validate ⊨ artifact ⟨NEVER r · a summary is a CLAIM ∧ the file is EVIDENCE ·
59
98
  an acceptance that read only the return has accepted nothing⟩
60
99
  validate ⊨ self ⟨¬ delegable · the executor cannot judge its own conformance ∵ it
61
100
  holds the spec ∧ ¬ the design⟩
62
101
  verify ⊥ validate ⟨two checks, two witnesses · neither substitutes ; an executor's
63
102
  green suite proves the EXECUTOR's own assertion ∧ nothing about the design⟩
64
- judge(unit) ≜ verify(unit, r) ∧ validate(unit) ⇒ advance(unit) ; ¬ ⇒ r rejected back to
65
- executor(unit) ∧ state(unit) stays active
103
+ judge(unit) ≜ verify(unit, r) ∧ validate(unit) ⇒ advance(unit) ⟨the acceptance⟩ ; ¬ ⇒ r rejected
104
+ back to executor(unit) ∧ ¬advance(unit)
66
105
  ⟨r lands VERBATIM ≺ any verdict on it · the loss mode is read-reason-discard,
67
106
  and it takes everything when a run dies mid-judgement⟩
68
107
  ⟨fan-in is as order-sensitive as fan-out : ∀ unit dispatched, confirm executor(unit)
69
108
  RETURNED · outputs(unit) exist ≠ executor(unit) returned⟩
109
+ ¬validate(unit) ⇒ redispatch(executor(unit), unachieved(unit)) ⟨the flaw handed down is
110
+ CONCEPTUAL ∧ ¬ a review⟩
70
111
  cost(validate) < cost(rebuild) ⟨else the gradient points at skipping · the cheapness
71
112
  is BOUGHT by conform(anchor) ∴ naming discipline is the verification budget⟩
72
113
  ¬spells ⇒ REFUSE ≺ any behavioural read ⟨the traceability arrow breaks at the cheapest
73
114
  place it will ever be visible⟩
74
115
  ¬covers ∧ extra ⇒ a second concept smuggled in unnamed ⇒ amend(C) ∨ REFUSE
75
116
  ¬sole ⇒ duplication ⟨the observable signature of a vision that fragmented⟩
76
- dispatch(P) ≜ ∀ unit ∈ frontier(P) ⟨state(unit) = ready⟩ concurrently ⟨state(unit) := active ∧
117
+ dispatch(P) ≜ ∀ unit ∈ frontier(P) ⟨ready(unit)⟩ concurrently ⟨advance(unit) ∧
77
118
  executor(unit) runs spec(unit)⟩ ; pre bound(P) ∧ ⊨ disjoint-outputs
78
- yield ≠ ∅ ⇒ amend(C) @ design ⟨LIVE, ¬ at retirement⟩
79
- ∀ k : amends(k, c) ⇒ ¬accepts(k) ⟨the amendment and the acceptance motivating it are
80
- two commits · fused, the agent adjusts the concept its artifact failed ∧ declares
81
- success ⟨evidence MANUFACTURED⟩⟩
119
+ ∀ c : ∄ unit ⟨realizes(unit) = anchor(c)⟩ ⇒ SURFACE ⟨a concept nothing builds is design agreed ∧
120
+ unbuilt · the reverse orphan is plan's⟩
82
121
  impedes(d, unit) ⇔ d standing ⇒ ∄ r : accept(unit)(r)
83
122
  impedes(d, unit) ⇒ fix(d) ⟨a regression in the path is repaired, ¬ surfaced⟩
84
123
  ¬impedes(d, unit) ⇒ file(d) ∧ ¬fix(d) ⟨a defect BESIDE the path is filed, ¬ chased⟩
85
124
  cost(file) < cost(fix) ⟨else the gradient points at chasing · the load-bearing law⟩
86
- ∃ P : ¬terminal(P) ⇒ ∃! P : bound(P) ⟨WIP = 1 · finish before starting⟩
125
+ ∃ P : ¬terminal(P) ⇒ ∃ P : bound(P) ⟨WIP = 1, held by bind : it returns the plan bound before ·
126
+ finish before starting⟩
87
127
  elect ≜ in-flight ≻ gating ≻ operator-intent ⟨lexicographic⟩
88
- terminal(P) ⇒ retire(P) ⟨obligation ¬ permission · an unretired terminal plan is WIP
89
- that is not work⟩ ; C persists ⟨plans come ∧ go ABOVE the design⟩
90
- deliver ≜ bind → dispatch(wave) → verify ⟨executor⟩ → validate ⟨self, on artifact⟩ →
91
- judge → amend(C) ⇔ yield → advance → retire`;
128
+ terminal(P) ⇒ close(P) ⟨obligation ¬ permission · an unclosed terminal plan is WIP
129
+ that is not work · a closed plan stays readable⟩ ; C persists ⟨plans come ∧ go ABOVE the design⟩
130
+ deliver ≜ bind → dispatch(wave) → verify ⟨executor⟩ → assay ⟨assayer, on artifact⟩ →
131
+ validate ⟨self, on the assay⟩ → judge → amend(C) ⇔ yield → advance → close`;
92
132
  export const deliver = {
93
133
  name: 'deliver',
94
134
  description: `use this skill to execute a plan and ACCEPT its results — dispatch a wave of units to executors, then validate each landed artifact against the design rather than against the executor's report, and integrate. Reach for it whenever delegated work comes back. Validation is three cheap questions — does the artifact spell its concept's name, does its behaviour cover that concept's factorization exactly, and does anything else already realize it — read off the files themselves, never off a summary. It also carries the conduct of the work: one plan bound at a time, finish before starting, repair what blocks the path and merely file what sits beside it.`,
95
135
  formalBlock: FORMAL_BLOCK,
96
- composition: () => [design, plan],
136
+ composition: () => [design, plan, note],
97
137
  };
98
138
  //# sourceMappingURL=skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/deliver/skill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,mFAAmF;AACnF,sFAAsF;AACtF,uFAAuF;AACvF,qFAAqF;AACrF,iFAAiF;AACjF,sFAAsF;AACtF,mFAAmF;AACnF,EAAE;AACF,sFAAsF;AACtF,oFAAoF;AACpF,kEAAkE;AAClE,EAAE;AACF,qFAAqF;AACrF,qFAAqF;AACrF,wFAAwF;AACxF,2EAA2E;AAE3E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAwE8C,CAAC;AAEpE,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,gpBAAgpB;IAC7pB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;CAClC,CAAC"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/deliver/skill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,mFAAmF;AACnF,sFAAsF;AACtF,uFAAuF;AACvF,qFAAqF;AACrF,iFAAiF;AACjF,sFAAsF;AACtF,mFAAmF;AACnF,EAAE;AACF,sFAAsF;AACtF,oFAAoF;AACpF,kEAAkE;AAClE,EAAE;AACF,qFAAqF;AACrF,qFAAqF;AACrF,wFAAwF;AACxF,2EAA2E;AAC3E,EAAE;AACF,wFAAwF;AACxF,yFAAyF;AACzF,yFAAyF;AACzF,uFAAuF;AACvF,qFAAqF;AACrF,uFAAuF;AACvF,wFAAwF;AACxF,kFAAkF;AAClF,uFAAuF;AACvF,mCAAmC;AACnC,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,qFAAqF;AACrF,uFAAuF;AACvF,uFAAuF;AACvF,uFAAuF;AACvF,sFAAsF;AAEtF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+EA4F6E,CAAC;AAEnG,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,gpBAAgpB;IAC7pB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;CACxC,CAAC"}
@@ -1,5 +1,5 @@
1
- // THE DURATIVE HALF. `plan` and `deliver` are per-effort and disposable; this cell
2
- // is the one that persists, and that asymmetry is the whole point of the trio.
1
+ // THE DURATIVE HALF. `plan` and `deliver` are per-effort; this cell is the one that
2
+ // persists across every effort, and that asymmetry is the whole point of the trio.
3
3
  //
4
4
  // It exists because the corpus could DO long-horizon work and could only THINK in
5
5
  // single sittings: every conceptual cell (conceptualize · signify · materialize ·
@@ -16,7 +16,7 @@
16
16
  // operation rather than a re-reading of the claim. That statement is this lattice.
17
17
  const FORMAL_BLOCK = `anchor ≜ a concept's canonical sign @ signify
18
18
  gloss ≜ what a concept IS ⟨one line · reconstruction-grade⟩
19
- C ≜ the concept lattice ⟨the project's durative record⟩
19
+ C ≜ the concept lattice ⟨the project's durative model⟩
20
20
  c ≜ a concept ⟨c ∈ C⟩
21
21
  concept ≜ ⟨ anchor(c) , gloss(c) , factors(c) ⟩
22
22
  factors : C → ℘(C) ⟨what c decomposes into⟩
@@ -28,52 +28,59 @@ denotes : anchor ⇀ C
28
28
  conform @ signify
29
29
  Piece ≜ a cut piece ⟨what a planner is handed⟩
30
30
  cut : C → ℘(℘(C))
31
- digest : ℘(C) → hash ⟨content address of a piece⟩
32
- pin : Piece ⇀ hash ⟨the digest a piece was DERIVED from · carried with it⟩
33
- Phase ≜ { live, superseded }
34
- phase : C → Phase
35
- supersededBy : C ⇀ C
36
- commit ≜ a VCS commit ⟨the append-only carrier · attribution ∧ order⟩
37
- amends : commit × C → 𝔹
38
- accepts : commit → 𝔹 ⟨the commit carries an acceptance @ deliver⟩
39
- realizes : unit ⇀ anchor @ plan
31
+ history(c) ≜ every version ∧ retraction of c, in order ⟨resident · ¬ deleted⟩
32
+ settled(c) ⇔ c has exactly one current version
33
+ live(c) ⇔ settled(c) ∧ that version ¬ a retraction
34
+ withdrawn(c) ⇔ settled(c) ∧ c retracted
35
+ diverged(c) ⇔ ¬settled(c) ⟨concurrent sessions wrote c differently ∧ merged · state, ¬ error⟩
36
+ incoherent(C) ⇔ a law below broken across concepts by a merge ∧ kept on each branch
40
37
  yield ≜ what execution established ∧ ¬ derivable from C @ deliver
41
- self ≜ the principal ⟨the design-holder · ¬ delegable⟩
38
+ self ≜ the principal ⟨the architect · the design-holder · ¬ delegable⟩
42
39
  author : C ⇀ self
40
+ show(C) ≜ \`scripts/design.mjs show [<concept>]\` ↦ C root to primitive ∨ one c in full
41
+ define(c) ≜ \`scripts/design.mjs define <anchor> --gloss <g> [--factors <anchor>]…\`
42
+ supersede(c) ≜ \`scripts/design.mjs amend <concept> [--anchor <a>] [--gloss <g>] [--factors <anchor>]…\` ⟨a new version of the SAME c · amending a withdrawn c reinstates it⟩
43
+ retract(c) ≜ \`scripts/design.mjs retract <concept>\` ⟨c withdrawn · no successor version⟩
44
+ reconcile(c) ≜ \`scripts/design.mjs reconcile <concept> [--anchor <a>] [--gloss <g>] [--factors <anchor>]…\` ⟨one version superseding every current version of c⟩
45
+ trace(c) ≜ \`scripts/design.mjs trace <concept>\` ↦ ⟨history(c), closure(c), blast(c)⟩ ⟨how c came to be · what it stands on · what stands on it⟩
43
46
 
44
- ∀ c : ∃! anchor(c) ∧ ∀ a ∈ dom(denotes) : ∃! denotes(a) ⟨one name ⇔ one concept⟩
47
+ ∀ define ∨ supersede ∨ retract ∨ reconcile : \`--author <who> --reason <why> --cause <what caused it>\` ⟨a set-valued flag repeats, one member each⟩
48
+ ∀ c : ∃! anchor(c) ∧ ∀ a ∈ dom(denotes) : ∃! denotes(a) ⟨one live concept per anchor⟩
49
+ withdrawn(c) ⇒ anchor(c) held until supersede(c) reinstates it
45
50
  ∀ c : conform(anchor(c)) ∧ gloss(c) ≠ ∅
46
- ∀ c : closure(c) finite ⟨factors acyclic ∴ a lattice, ¬ a graph⟩
51
+ ∀ c : closure(c) finite ⟨factors acyclic ∴ a lattice, ¬ a graph⟩ ∧ ∀ f ∈ factors(c) : live(f)
52
+ ∃ d : live(d) ∧ c ∈ factors(d) ⇒ ¬ retract(c) ⟨what live concepts factor on cannot be withdrawn⟩
47
53
  amend(C) ≜ supersede ⟨∄ overwrite ; a live c is NEVER edited in place⟩
48
54
  ⟨the protection is ¬ a rule about honesty : an editable lattice lets the agent
49
55
  adjust the concept its artifact failed, ∴ acceptance-against-C goes CIRCULAR
50
56
  with one extra step ∧ the loop manufactures its own evidence⟩
51
- supersede(c, c') ⇒ phase(c) := superseded ∧ supersededBy(c) = c' ∧ c ∈ C
52
- ⟨residence, ¬ deletion : a reader of the CURRENT state sees the history without
53
- a VCS query ∴ the lattice is self-describing⟩
54
- ∀ k : amends(k, c) ⇒ ¬ accepts(k) ⟨THE separation · an amendment and an acceptance
55
- it bears on are two acts ; fused, the second witness collapses into the first⟩
56
- ∀ k : amends(k, c) ⇒ reason(k) ≠ ∅ ⟨attribution ∧ order are what make retroactive
57
- justification DETECTABLE : the amendment postdates the artifact it excuses⟩
57
+ supersede(c) ⇒ the prior version stays in history(c) ⟨residence, ¬ deletion : trace(c) reads
58
+ the history without a VCS query ∴ the lattice is self-describing⟩
59
+ c becomes another concept ⇒ retract(c) ∧ define(c') ⟨¬ supersede : a new version is the SAME concept⟩
60
+ ∀ define ∨ supersede ∨ retract ∨ reconcile : reason ≠ ∅ ⟨attribution ∧ order are what make
61
+ retroactive justification DETECTABLE : the amendment postdates the artifact it excuses⟩
62
+ reconcile ⊨ amend(C) ∧ ¬ an acceptance ⟨THE separation · a reconciliation never shares a write
63
+ with an acceptance it bears on ; fused, the second witness collapses into the first⟩
64
+ diverged(c) ⇒ reconcile(c) ⟨an ordinary write on c refuses⟩
65
+ incoherent(C) ⇒ repaired by ordinary writes, one at a time
66
+ reconcile ⊨ self ⟨reconciliation of the design is the architect's alone⟩
67
+ planner ∨ implementer ∨ assayer ⊨ diverged ∨ incoherent ⇒ report ∧ ¬ resolve
58
68
  blast(c) ≜ { d ∈ C | c ∈ closure(d) } ⟨DERIVED, ¬ guessed · what the normal form buys⟩
59
69
  churn(primitive) high ⇒ conceptualization wrong ⟨primitives near-stable · composites move⟩
60
70
  ⋃ cut(C) = C ∧ ∀ s₁, s₂ ∈ cut(C) : s₁ ≠ s₂ ⇒ s₁ ∩ s₂ = ∅
61
71
  ∀ s ∈ cut(C) : ∀ c ∈ s : closure(c) ⊆ s ⟨a piece is CLOSED ∴ plannable alone⟩
62
72
  cut ⊨ self ⟨the ASSIGNMENT of concepts to pieces is the design-holder's ; a planner
63
73
  receiving a piece may ¬ redraw it · a boundary it cannot plan is SURFACED⟩
64
- ∀ s ∈ cut(C) : pin(s) = digest(s) ⟨a piece carries the digest it was derived from ∴
65
- an amendment mid-flight surfaces as DRIFT, ¬ executes silently⟩
66
74
  yield ≠ ∅ ⇒ amend(C) ⟨intake at INCEPTION ∧ live, never at retirement : an obligation
67
75
  standing between an agent and closing its work always loses · measured 0 of 25⟩
68
- ∀ c : ∄ unit ⟨realizes(unit) = anchor(c)⟩ ⇒ SURFACE ⟨a concept nothing builds is design agreed ∧
69
- unbuilt · the reverse orphan is plan's⟩
70
76
  design ⊨ ¬ delegable ⟨a subagent starts blank ∧ a design authored by several
71
77
  fragments BY CONSTRUCTION⟩
72
- design ≜ conceptualize(intent) → signify(·) → materialize(·) → C ⟨bind⟩ → cut(C)`;
78
+ design ≜ conceptualize(intent) → signify(·) → materialize(·) → define(c) ∨ supersede(c) → C → cut(C)`;
73
79
  export const design = {
74
80
  name: 'design',
75
- description: `use this skill to build and hold a project's DURATIVE conceptual model — the one artifact that outlives every plan: each concept's anchor, gloss and factorization, amended only by append-only supersession, and cut into closed pieces a planner can take. Reach for it FIRST on any long-horizon effort, before any work is decomposed, and again whenever execution establishes something the model does not yet hold. It is what acceptance is judged against, so without it verification has no referent and degrades into re-reading the executor's own claim.`,
81
+ description: `use this skill to build and hold a project's DURATIVE conceptual model — the one artifact that outlives every plan: each concept's anchor, gloss and factorization, amended only by append-only supersession, and cut into closed pieces a planner can take. Its verbs show the design or one concept, define, amend, retract and reconcile a concept, and trace how one came to be, what it stands on and what stands on it. Reach for it FIRST on any long-horizon effort, before any work is decomposed, and again whenever execution establishes something the model does not yet hold. It is what acceptance is judged against, so without it verification has no referent and degrades into re-reading the executor's own claim.`,
76
82
  formalBlock: FORMAL_BLOCK,
83
+ runtime: { capability: 'design' },
77
84
  composition: () => [],
78
85
  };
79
86
  //# sourceMappingURL=skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/design/skill.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,kFAAkF;AAClF,qFAAqF;AACrF,mFAAmF;AACnF,oFAAoF;AACpF,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,oFAAoF;AACpF,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AAEnF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iFAuD+E,CAAC;AAErG,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uiBAAuiB;IACpjB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;CACtB,CAAC"}
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/skills/design/skill.ts"],"names":[],"mappings":"AAEA,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,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AAEnF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qGA6DmG,CAAC;AAEzH,MAAM,CAAC,MAAM,MAAM,GAAU;IAC3B,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,wsBAAwsB;IACrtB,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Skill } from '../../manifest.js';
2
+ export declare const note: Skill;
@@ -0,0 +1,56 @@
1
+ // THE NOTEBOOK'S OWN RULES, and no one else's. This cell routes the reader's notebook
2
+ // intents to the `note` capability and is the one home of the three kinds: the
3
+ // runtime carries a kind as a label it never interprets, so nothing else spells them.
4
+ //
5
+ // It rectifies an earlier ledger skill kept outside this corpus. That one addressed a
6
+ // note by a sequential number, grew a note in place by appending "derived" material
7
+ // beside a frozen definition, treated a withdrawal as one more kind, and taught its
8
+ // reader the mechanics of how the ledger was stored. Here a note is addressed by its
9
+ // title, every change is a whole new version, withdrawal is a verb, and the reader meets
10
+ // only notes. No kind is privileged to block: any live note that names a plan or unit
11
+ // owes a ruling, whatever its kind.
12
+ //
13
+ // COMPOSES NOTHING. The `runtime` capability below is the real coupling; its verbs take
14
+ // the notebook's words and nothing borrowed.
15
+ const NOTE_BLOCK = `note ≜ show → capture → revise → retract → reconcile
16
+ route ≜ \`scripts/note.mjs <verb>\` ⟨runtime-bound : every verb reaches the note capability⟩
17
+ verb ∈ { show · capture · revise · retract · reconcile }
18
+ notebook ≜ the set of notes ⟨ideas, questions ∧ decisions ¬ yet canonical⟩
19
+ n ≜ a note ⟨n ∈ notebook⟩
20
+ title(n) ≜ the note's name
21
+ kind(n) ∈ { idea · question · decision } ⟨a label the runtime never interprets⟩
22
+ topic(n) ≜ what the note is about ⟨the notebook groups by kind, then topic⟩
23
+ body(n) ≜ the note's whole statement
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
26
+ versions(n) ≜ the competing versions of n a merge left standing
27
+ diverged(n) ⇔ versions(n) disagree
28
+ owed(n) ⇔ live(n) ∧ blocks(n) ≠ ∅ ⟨an owed ruling⟩
29
+ holders(t) ≜ { n | live(n) ∧ title(n) = t } ∪ { n | diverged(n) ∧ ∃ v ∈ versions(n) : title(v) = t }
30
+ incoherent(t) ⇔ |holders(t)| > 1 ⟨a merge left title t held by more than one note ; show prints each holder with its identity beside t⟩
31
+ by ≜ \`--author <who> --reason <why> --cause <what caused it>\` ⟨every write carries it⟩
32
+
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
+ capture(n) ≜ \`scripts/note.mjs capture <title> --kind <k> --topic <t> --body <b> [--blocks <plan or unit>]… <by>\`
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
+ retract(n) ≜ \`scripts/note.mjs retract <title> <by>\`
37
+ reconcile(n) ≜ \`scripts/note.mjs reconcile <title> [--title …] [--kind …] [--topic …] [--body …] [--blocks …]… <by>\` ↦ one version over every version ⟨each field the versions disagree on is given⟩
38
+
39
+ 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
+ capture ⊨ ∄ admission bar ⟨the note's shape ∧ one live note per title suffice⟩
42
+ 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
+ diverged(n) ⇒ n blocks ⋃ { blocks(v) | v ∈ versions(n) } until reconcile(n)
45
+ diverged(n) ⇒ reconcile(n) ≺ every other write to n
46
+ 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
+ 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
+ export const note = {
50
+ 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
+ formalBlock: NOTE_BLOCK,
53
+ runtime: { capability: 'note' },
54
+ composition: () => [],
55
+ };
56
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +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,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAiCoE,CAAC;AAExF,MAAM,CAAC,MAAM,IAAI,GAAU;IACzB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,knBAAknB;IAC/nB,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IAC/B,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;CACtB,CAAC"}