@shardworks/astrolabe-apparatus 0.1.227 → 0.1.229

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@shardworks/astrolabe-apparatus`
2
2
 
3
- The Astrolabe transforms patron briefs into structured work specifications. It drives a multi-stage planning pipeline — inventory, analysis, patron review, and specification writing — using a sequence of clockwork engines and anima sessions. It sits between the Clerk (writ lifecycle) and the Spider (rig execution), contributing kit pieces to both.
3
+ The Astrolabe transforms patron briefs into structured work specifications and carries them through implementation. A single combined rig (`astrolabe.plan-and-ship`) runs the planning pipeline — inventory, analysis, optional Patron Anima pre-review, patron review, specification writing — and then continues into draft implement review → revise → seal on the same brief writ. The brief reaches `completed` only after the final seal engine finishes. It sits between the Clerk (writ lifecycle) and the Spider (rig execution), contributing kit pieces to both.
4
4
 
5
5
  ---
6
6
 
@@ -88,7 +88,8 @@ Add an `astrolabe` section to `guild.json` to configure behaviour:
88
88
  ```json
89
89
  {
90
90
  "astrolabe": {
91
- "generatedWritType": "mandate"
91
+ "generatedWritType": "mandate",
92
+ "patronRole": "my-plugin.patron"
92
93
  }
93
94
  }
94
95
  ```
@@ -96,6 +97,7 @@ Add an `astrolabe` section to `guild.json` to configure behaviour:
96
97
  | Field | Type | Default | Description |
97
98
  |---|---|---|---|
98
99
  | `generatedWritType` | `string` | `"mandate"` | Writ type posted by the spec-writer engine |
100
+ | `patronRole` | `string` | `""` (unset) | Qualified role name of the Patron Anima consulted before decision-review. When unset or empty, the `patron-anima` engine no-ops and decision-review behaves exactly as it did before the engine existed. |
99
101
 
100
102
  ## Support Kit
101
103
 
@@ -128,34 +130,39 @@ The Astrolabe declares one book in Stacks:
128
130
  |---|---|
129
131
  | `astrolabe.plan-init` | Creates a PlanDoc from the brief writ; validates codex presence |
130
132
  | `astrolabe.inventory-check` | Validates that the reader produced a non-empty inventory |
131
- | `astrolabe.decision-review` | Two-pass engine: blocks for patron review, then reconciles answers. Decisions with `selected` already pre-set by the analyst are auto-accepted they are excluded from the InputRequestDoc, and if nothing remains reviewable the engine fast-paths to `writing` without opening the gate. |
132
- | `astrolabe.spec-publish` | Publishes the generated specification as a new writ. Posts the spec body verbatim any `<task-manifest>` block is preserved and is not fanned out into child `piece` writs. |
133
+ | `astrolabe.patron-anima` | Consults a configured Patron Anima to pre-fill decisions on behalf of the patron. Reads the plan's reviewable decisions (those without `selected` already set), launches the configured `patronRole` via an anima session, parses a single structured emission, and applies each valid verdict to `Decision.selected` (plus records the full verdict — confirm/override/fill-in with selection, confidence, rationale — on `Decision.patron`). No-ops when `astrolabe.patronRole` is unset or empty, or when no reviewable decisions remain. Unparseable output or invalid verdicts are silently skipped — decision-review surfaces the remainder to the patron. |
134
+ | `astrolabe.decision-review` | Two-pass engine: blocks for patron review, then reconciles answers. Decisions with `selected` already pre-set by the analyst or the patron anima are auto-accepted they are excluded from the InputRequestDoc, and if nothing remains reviewable the engine fast-paths to `writing` without opening the gate. |
135
+ | `astrolabe.plan-finalize` | Transitions the plan to `completed` and yields the written `spec` downstream. Does not post any writ. Used inside `plan-and-ship` to hand the spec off to the implement engine on the same brief rig. |
136
+ | `astrolabe.spec-publish` | Publishes the generated specification as a new mandate writ. Used only by the legacy two-phase / three-phase rigs that split planning from implementation across two writs. |
133
137
 
134
138
  ### Rig Templates (contributed to Spider)
135
139
 
136
140
  | Template | Mapped Writ Type | Engines |
137
141
  |---|---|---|
138
- | `astrolabe.two-phase-planning` | `brief` (default) | plan-init → draft → reader-analyst → inventory-check → decision-review → spec-writer → spec-publish → seal |
139
- | `astrolabe.three-phase-planning` | — | plan-init → draft → reader → inventory-check → analyst → decision-review → spec-writer → spec-publish → seal |
142
+ | `astrolabe.plan-and-ship` | `brief` (default) | plan-init → draft → reader-analyst → inventory-check → patron-anima → decision-review → spec-writer → plan-finalizeimplement → review → revise → seal |
143
+ | `astrolabe.two-phase-planning` | — (opt-in) | plan-init → draft → reader-analyst → inventory-check → decision-review → spec-writer → spec-publish → seal |
144
+ | `astrolabe.three-phase-planning` | — (opt-in) | plan-init → draft → reader → inventory-check → analyst → decision-review → spec-writer → spec-publish → seal |
140
145
 
141
- The `resolutionEngine` is `spec-writer` for both templates the rig's completion summary comes from the specification writer session.
146
+ The `resolutionEngine` is `seal` for `plan-and-ship` (brief completes when implementation seals) and `spec-writer` for the two legacy planning-only templates (where the brief's rig terminates at spec-writer and a follow-up mandate writ carries the implementation separately).
142
147
 
143
148
  #### Rig Template Selection
144
149
 
145
- The `brief` writ type maps to `astrolabe.two-phase-planning` by default. The two-phase template merges the reader and analyst into a single `reader-analyst` anima session that produces inventory, scope, decisions, and observations in one pass.
150
+ The `brief` writ type maps to `astrolabe.plan-and-ship` by default. This single combined rig carries the brief through planning and implementation on one writ — the `plan-finalize` engine hands the written spec directly to the downstream `implement` engine via `${yields.plan-finalize.spec}`, and no separate mandate writ is posted. The optional `patron-anima` stage between `inventory-check` and `decision-review` can pre-fill decisions on the patron's behalf when `astrolabe.patronRole` is configured, letting decision-review fast-path past any pre-decided items. The brief reaches `completed` only when the final seal engine completes.
146
151
 
147
- To use the three-phase template instead (separate reader and analyst sessions), add a rig template mapping override in `guild.json`:
152
+ To use a legacy planning-only template (which posts a separate mandate writ and ends the brief's lifecycle at spec-writer), add a rig template mapping override in `guild.json`:
148
153
 
149
154
  ```json
150
155
  {
151
156
  "spider": {
152
157
  "rigTemplateMappings": {
153
- "brief": "astrolabe.three-phase-planning"
158
+ "brief": "astrolabe.two-phase-planning"
154
159
  }
155
160
  }
156
161
  }
157
162
  ```
158
163
 
164
+ Substitute `astrolabe.three-phase-planning` for the split reader / analyst variant.
165
+
159
166
  ### Tools
160
167
 
161
168
  | Tool | Permission | Description |
@@ -1 +1 @@
1
- {"version":3,"file":"astrolabe.d.ts","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AAQrE,OAAO,KAAK,EAEV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAcpB,iBAAS,sBAAsB,IAAI,eAAe,CAEjD;AAID,wBAAgB,eAAe,IAAI,MAAM,CA+QxC;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"astrolabe.d.ts","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AAQrE,OAAO,KAAK,EAEV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAiBpB,iBAAS,sBAAsB,IAAI,eAAe,CAEjD;AAID,wBAAgB,eAAe,IAAI,MAAM,CAoRxC;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
package/dist/astrolabe.js CHANGED
@@ -10,9 +10,10 @@
10
10
  import { guild } from '@shardworks/nexus-core';
11
11
  import { tool } from '@shardworks/tools-apparatus';
12
12
  import { z } from 'zod';
13
- import { createPlanInitEngine, createInventoryCheckEngine, createDecisionReviewEngine, createSpecPublishEngine, } from "./engines/index.js";
13
+ import { createPlanInitEngine, createInventoryCheckEngine, createPatronAnimaEngine, createDecisionReviewEngine, createSpecPublishEngine, createPlanFinalizeEngine, } from "./engines/index.js";
14
14
  import { twoPhaseRigTemplate } from "./two-phase-planning.js";
15
15
  import { threePhaseRigTemplate } from "./three-phase-planning.js";
16
+ import { planAndShipRigTemplate } from "./plan-and-ship.js";
16
17
  // ── Config resolver ──────────────────────────────────────────────────
17
18
  function resolveAstrolabeConfig() {
18
19
  return guild().guildConfig().astrolabe ?? {};
@@ -23,8 +24,10 @@ export function createAstrolabe() {
23
24
  // ── Engines ────────────────────────────────────────────────────
24
25
  const planInitEngine = createPlanInitEngine(() => plansBook);
25
26
  const inventoryCheckEngine = createInventoryCheckEngine(() => plansBook);
27
+ const patronAnimaEngine = createPatronAnimaEngine(() => plansBook);
26
28
  const decisionReviewEngine = createDecisionReviewEngine(() => plansBook);
27
29
  const specPublishEngine = createSpecPublishEngine(() => plansBook);
30
+ const planFinalizeEngine = createPlanFinalizeEngine(() => plansBook);
28
31
  // ── API ────────────────────────────────────────────────────────
29
32
  const api = {
30
33
  async show(planId) {
@@ -192,7 +195,7 @@ export function createAstrolabe() {
192
195
  return {
193
196
  apparatus: {
194
197
  requires: ['stacks', 'clerk'],
195
- recommends: ['spider', 'loom', 'fabricator', 'oculus', 'ratchet'],
198
+ recommends: ['spider', 'loom', 'fabricator', 'oculus', 'ratchet', 'animator'],
196
199
  supportKit: {
197
200
  books: {
198
201
  plans: { indexes: ['status', 'codex', 'createdAt'] },
@@ -226,15 +229,18 @@ export function createAstrolabe() {
226
229
  engines: {
227
230
  'astrolabe.plan-init': planInitEngine,
228
231
  'astrolabe.inventory-check': inventoryCheckEngine,
232
+ 'astrolabe.patron-anima': patronAnimaEngine,
229
233
  'astrolabe.decision-review': decisionReviewEngine,
230
234
  'astrolabe.spec-publish': specPublishEngine,
235
+ 'astrolabe.plan-finalize': planFinalizeEngine,
231
236
  },
232
237
  rigTemplates: {
233
238
  'two-phase-planning': twoPhaseRigTemplate,
234
239
  'three-phase-planning': threePhaseRigTemplate,
240
+ 'plan-and-ship': planAndShipRigTemplate,
235
241
  },
236
242
  rigTemplateMappings: {
237
- brief: 'astrolabe.two-phase-planning',
243
+ brief: 'astrolabe.plan-and-ship',
238
244
  },
239
245
  tools: [
240
246
  planShowTool,
@@ -1 +1 @@
1
- {"version":3,"file":"astrolabe.js","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astrolabe.js","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export { createPlanInitEngine } from './plan-init.ts';
2
2
  export { createInventoryCheckEngine } from './inventory-check.ts';
3
+ export { createPatronAnimaEngine } from './patron-anima.ts';
3
4
  export { createDecisionReviewEngine } from './decision-review.ts';
4
5
  export { createSpecPublishEngine } from './spec-publish.ts';
6
+ export { createPlanFinalizeEngine } from './plan-finalize.ts';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,7 @@
1
1
  export { createPlanInitEngine } from "./plan-init.js";
2
2
  export { createInventoryCheckEngine } from "./inventory-check.js";
3
+ export { createPatronAnimaEngine } from "./patron-anima.js";
3
4
  export { createDecisionReviewEngine } from "./decision-review.js";
4
5
  export { createSpecPublishEngine } from "./spec-publish.js";
6
+ export { createPlanFinalizeEngine } from "./plan-finalize.js";
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * patron-anima clockwork engine.
3
+ *
4
+ * Between `inventory-check` and `decision-review`, consults a configured
5
+ * Patron Anima to pre-fill decisions on behalf of the patron. Any decision
6
+ * the anima can confidently resolve is set on the PlanDoc with its
7
+ * `selected` value — `decision-review` then auto-skips it via the existing
8
+ * "analyst pre-decides → patron-input omitted" semantics.
9
+ *
10
+ * Config:
11
+ * guild.json["astrolabe"]["patronRole"]
12
+ * Qualified role name for the Patron Anima (e.g. 'guild.patron').
13
+ * When unset or empty, this engine no-ops — the pipeline proceeds
14
+ * exactly as it did before the engine existed.
15
+ *
16
+ * Run → Collect protocol:
17
+ * run() → loads the plan; builds a single prompt covering all
18
+ * reviewable decisions; launches an anima session via
19
+ * `animator.summon()`. Returns
20
+ * `{ status: 'launched', sessionId }`.
21
+ * collect() → reads the session's `output` from Stacks, parses the
22
+ * emitted JSON verdict array, applies verdicts to the
23
+ * PlanDoc, and records each verdict as `Decision.patron`.
24
+ *
25
+ * Output contract (the anima is asked for):
26
+ * The session's final message must be a single fenced JSON block
27
+ * containing an array of verdict objects. Each object:
28
+ * - `id` — the decision id
29
+ * - `verdict` — 'confirm' | 'override' | 'fill-in'
30
+ * - `selection` — one of the decision's offered option keys
31
+ * - `confidence` — 'low' | 'med' | 'high'
32
+ * - `rationale` — short free-text note (optional)
33
+ *
34
+ * Exhaustiveness:
35
+ * Single pass. Any decision not carrying a well-formed verdict —
36
+ * because the anima omitted it, emitted malformed JSON, picked an
37
+ * unknown option, or the session failed entirely — is left unfilled
38
+ * on the PlanDoc and flows to `decision-review` in the normal flow.
39
+ * The engine does not retry.
40
+ *
41
+ * Self-uncertainty:
42
+ * A `confirm` at `confidence: 'low'` is the expected encoding for
43
+ * "anima doesn't know patron well enough on this surface." It still
44
+ * applies the analyst's recommendation; the high-confirm / low-
45
+ * confidence signal is the diagnostic substrate for override-rate
46
+ * × confidence, not an escalation trigger.
47
+ */
48
+ import type { EngineDesign } from '@shardworks/fabricator-apparatus';
49
+ import type { Book } from '@shardworks/stacks-apparatus';
50
+ import type { Decision, PatronEmission, PlanDoc } from '../types.ts';
51
+ /**
52
+ * Assemble the patron prompt from the reviewable decisions. Each decision
53
+ * is rendered with its question, optional context, options, and optional
54
+ * analyst recommendation / rationale. The anima is instructed to return a
55
+ * single fenced JSON block with one verdict per decision.
56
+ */
57
+ export declare function buildPatronPrompt(decisions: Decision[]): string;
58
+ /** Extract the last fenced JSON block from an anima's output. Returns null if none. */
59
+ export declare function extractJsonBlock(output: string): string | null;
60
+ export interface RawVerdict {
61
+ id?: unknown;
62
+ verdict?: unknown;
63
+ selection?: unknown;
64
+ confidence?: unknown;
65
+ rationale?: unknown;
66
+ }
67
+ /**
68
+ * Parse the anima's JSON emission into a map keyed by decision id. Invalid
69
+ * entries are dropped silently — the engine treats missing verdicts as
70
+ * "leave the decision unfilled" and relies on `decision-review` to catch
71
+ * them in the normal flow.
72
+ */
73
+ export declare function parseEmission(output: string, decisions: Decision[]): Map<string, PatronEmission>;
74
+ export declare function createPatronAnimaEngine(getPlansBook: () => Book<PlanDoc>): EngineDesign;
75
+ //# sourceMappingURL=patron-anima.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patron-anima.d.ts","sourceRoot":"","sources":["../../src/engines/patron-anima.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,kCAAkC,CAAC;AACxG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAKzD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AASrE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA2E/D;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa9D;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,EAAE,GACpB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA8E7B;AAID,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CA2GvF"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * patron-anima clockwork engine.
3
+ *
4
+ * Between `inventory-check` and `decision-review`, consults a configured
5
+ * Patron Anima to pre-fill decisions on behalf of the patron. Any decision
6
+ * the anima can confidently resolve is set on the PlanDoc with its
7
+ * `selected` value — `decision-review` then auto-skips it via the existing
8
+ * "analyst pre-decides → patron-input omitted" semantics.
9
+ *
10
+ * Config:
11
+ * guild.json["astrolabe"]["patronRole"]
12
+ * Qualified role name for the Patron Anima (e.g. 'guild.patron').
13
+ * When unset or empty, this engine no-ops — the pipeline proceeds
14
+ * exactly as it did before the engine existed.
15
+ *
16
+ * Run → Collect protocol:
17
+ * run() → loads the plan; builds a single prompt covering all
18
+ * reviewable decisions; launches an anima session via
19
+ * `animator.summon()`. Returns
20
+ * `{ status: 'launched', sessionId }`.
21
+ * collect() → reads the session's `output` from Stacks, parses the
22
+ * emitted JSON verdict array, applies verdicts to the
23
+ * PlanDoc, and records each verdict as `Decision.patron`.
24
+ *
25
+ * Output contract (the anima is asked for):
26
+ * The session's final message must be a single fenced JSON block
27
+ * containing an array of verdict objects. Each object:
28
+ * - `id` — the decision id
29
+ * - `verdict` — 'confirm' | 'override' | 'fill-in'
30
+ * - `selection` — one of the decision's offered option keys
31
+ * - `confidence` — 'low' | 'med' | 'high'
32
+ * - `rationale` — short free-text note (optional)
33
+ *
34
+ * Exhaustiveness:
35
+ * Single pass. Any decision not carrying a well-formed verdict —
36
+ * because the anima omitted it, emitted malformed JSON, picked an
37
+ * unknown option, or the session failed entirely — is left unfilled
38
+ * on the PlanDoc and flows to `decision-review` in the normal flow.
39
+ * The engine does not retry.
40
+ *
41
+ * Self-uncertainty:
42
+ * A `confirm` at `confidence: 'low'` is the expected encoding for
43
+ * "anima doesn't know patron well enough on this surface." It still
44
+ * applies the analyst's recommendation; the high-confirm / low-
45
+ * confidence signal is the diagnostic substrate for override-rate
46
+ * × confidence, not an escalation trigger.
47
+ */
48
+ import { guild } from '@shardworks/nexus-core';
49
+ import { resolveAstrolabeConfig } from "../astrolabe.js";
50
+ // ── Helpers ──────────────────────────────────────────────────────────
51
+ /** Reviewable = not yet pre-decided by the analyst. Mirrors decision-review. */
52
+ function reviewableDecisions(plan) {
53
+ return (plan.decisions ?? []).filter(d => d.selected === undefined);
54
+ }
55
+ /**
56
+ * Assemble the patron prompt from the reviewable decisions. Each decision
57
+ * is rendered with its question, optional context, options, and optional
58
+ * analyst recommendation / rationale. The anima is instructed to return a
59
+ * single fenced JSON block with one verdict per decision.
60
+ */
61
+ export function buildPatronPrompt(decisions) {
62
+ const parts = [
63
+ '# Patron Decision Review',
64
+ '',
65
+ 'You are the patron anima. The analyst has surfaced the following',
66
+ 'decisions. For each one, emit a structured verdict in the patron\'s',
67
+ 'voice so the planning pipeline can proceed without a human block.',
68
+ '',
69
+ '## Decisions',
70
+ '',
71
+ ];
72
+ for (const decision of decisions) {
73
+ parts.push(`### ${decision.id}: ${decision.question}`);
74
+ if (decision.context) {
75
+ parts.push('');
76
+ parts.push(`Context: ${decision.context}`);
77
+ }
78
+ parts.push('');
79
+ parts.push('Options:');
80
+ for (const [key, label] of Object.entries(decision.options)) {
81
+ parts.push(`- \`${key}\` — ${label}`);
82
+ }
83
+ if (decision.recommendation) {
84
+ parts.push('');
85
+ const recLabel = decision.options[decision.recommendation] ?? decision.recommendation;
86
+ parts.push(`Analyst recommendation: \`${decision.recommendation}\` (${recLabel})`);
87
+ if (decision.rationale) {
88
+ parts.push(`Analyst rationale: ${decision.rationale}`);
89
+ }
90
+ }
91
+ else {
92
+ parts.push('');
93
+ parts.push('Analyst recommendation: (none — you must fill in)');
94
+ }
95
+ parts.push('');
96
+ }
97
+ parts.push('## Output contract');
98
+ parts.push('');
99
+ parts.push('Respond with a single fenced JSON block containing an array of', 'verdict objects — one per decision, keyed by decision id. Do not', 'emit prose outside the fenced block; anything outside is ignored.', '', 'Each verdict object MUST have these fields:', '', '- `id` — the decision id (copy from above)', '- `verdict` — one of `confirm` | `override` | `fill-in`', ' - `confirm` — you accept the analyst\'s recommendation', ' - `override` — you pick a different option than the recommendation', ' - `fill-in` — no analyst recommendation existed; you supply one', '- `selection` — the option key you are selecting (MUST be one of the', ' offered option keys above — no custom / free-text answers)', '- `confidence` — one of `low` | `med` | `high`, calibrated against the', ' patron role\'s principles list:', ' - `high` — exactly one principle applies cleanly', ' - `med` — multiple principles conflict (note the conflict in rationale)', ' - `low` — no principle applies (default to `confirm` at `low` rather', ' than abstaining or improvising — leaving decisions unfilled is the', ' fallback path when you genuinely cannot answer)', '- `rationale` — short free-text note (≤ 1 sentence) citing which', ' principle (or conflict) produced this verdict', '', 'Example:', '', '```json', '[', ' { "id": "D1", "verdict": "confirm", "selection": "A", "confidence": "high", "rationale": "Matches simplicity principle." }', ']', '```');
100
+ return parts.join('\n');
101
+ }
102
+ /** Extract the last fenced JSON block from an anima's output. Returns null if none. */
103
+ export function extractJsonBlock(output) {
104
+ // Prefer ```json ... ``` fenced blocks; fall back to plain ``` ... ```.
105
+ const jsonFence = /```(?:json)?\s*([\s\S]*?)```/gi;
106
+ let match;
107
+ let last = null;
108
+ while ((match = jsonFence.exec(output)) !== null) {
109
+ last = match[1].trim();
110
+ }
111
+ if (last !== null)
112
+ return last;
113
+ // Last-ditch: try the output verbatim if it starts with `[` or `{`.
114
+ const trimmed = output.trim();
115
+ if (trimmed.startsWith('[') || trimmed.startsWith('{'))
116
+ return trimmed;
117
+ return null;
118
+ }
119
+ /**
120
+ * Parse the anima's JSON emission into a map keyed by decision id. Invalid
121
+ * entries are dropped silently — the engine treats missing verdicts as
122
+ * "leave the decision unfilled" and relies on `decision-review` to catch
123
+ * them in the normal flow.
124
+ */
125
+ export function parseEmission(output, decisions) {
126
+ const result = new Map();
127
+ const block = extractJsonBlock(output);
128
+ if (block === null)
129
+ return result;
130
+ let parsed;
131
+ try {
132
+ parsed = JSON.parse(block);
133
+ }
134
+ catch {
135
+ return result;
136
+ }
137
+ // Accept either a bare array or an object with an `emissions` / `verdicts`
138
+ // array field — be lenient about the outer shape so small model quirks
139
+ // don't cost a whole round.
140
+ let entries;
141
+ if (Array.isArray(parsed)) {
142
+ entries = parsed;
143
+ }
144
+ else if (parsed && typeof parsed === 'object') {
145
+ const obj = parsed;
146
+ const maybe = obj.emissions ?? obj.verdicts ?? obj.decisions;
147
+ entries = Array.isArray(maybe) ? maybe : [];
148
+ }
149
+ else {
150
+ return result;
151
+ }
152
+ const decisionById = new Map(decisions.map(d => [d.id, d]));
153
+ for (const rawEntry of entries) {
154
+ if (!rawEntry || typeof rawEntry !== 'object')
155
+ continue;
156
+ const raw = rawEntry;
157
+ if (typeof raw.id !== 'string')
158
+ continue;
159
+ const decision = decisionById.get(raw.id);
160
+ if (!decision)
161
+ continue;
162
+ const verdict = raw.verdict;
163
+ if (verdict !== 'confirm' && verdict !== 'override' && verdict !== 'fill-in')
164
+ continue;
165
+ if (typeof raw.selection !== 'string')
166
+ continue;
167
+ if (!(raw.selection in decision.options))
168
+ continue;
169
+ const confidence = raw.confidence;
170
+ if (confidence !== 'low' && confidence !== 'med' && confidence !== 'high')
171
+ continue;
172
+ // `confirm` must agree with the analyst's recommendation. If it doesn't,
173
+ // treat the verdict as malformed — don't silently relabel it. Defends
174
+ // against a model that says "confirm" but picks a different option.
175
+ if (verdict === 'confirm') {
176
+ if (!decision.recommendation || decision.recommendation !== raw.selection) {
177
+ continue;
178
+ }
179
+ }
180
+ // `fill-in` requires there was no analyst recommendation.
181
+ if (verdict === 'fill-in' && decision.recommendation) {
182
+ // Accept but only if the selection genuinely differs — otherwise
183
+ // relabelling a confirm as fill-in is a model quirk we tolerate.
184
+ // (Either way the `selected` resolution is the same.)
185
+ }
186
+ // `override` requires a recommendation existed and differs from selection.
187
+ if (verdict === 'override') {
188
+ if (!decision.recommendation)
189
+ continue;
190
+ if (decision.recommendation === raw.selection)
191
+ continue;
192
+ }
193
+ const emission = {
194
+ verdict,
195
+ selection: raw.selection,
196
+ confidence,
197
+ };
198
+ if (typeof raw.rationale === 'string' && raw.rationale.length > 0) {
199
+ emission.rationale = raw.rationale;
200
+ }
201
+ result.set(decision.id, emission);
202
+ }
203
+ return result;
204
+ }
205
+ // ── Engine factory ───────────────────────────────────────────────────
206
+ export function createPatronAnimaEngine(getPlansBook) {
207
+ return {
208
+ id: 'astrolabe.patron-anima',
209
+ async run(givens, context) {
210
+ const planId = givens.planId;
211
+ if (typeof planId !== 'string' || planId.length === 0) {
212
+ throw new Error('patron-anima engine requires a non-empty string "planId" given.');
213
+ }
214
+ const book = getPlansBook();
215
+ const plan = await book.get(planId);
216
+ if (!plan) {
217
+ throw new Error(`Plan "${planId}" not found.`);
218
+ }
219
+ // Skip-when-unset: no configured patron → no-op, decision-review
220
+ // proceeds as it does today.
221
+ const config = resolveAstrolabeConfig();
222
+ const role = typeof config.patronRole === 'string' ? config.patronRole.trim() : '';
223
+ if (role.length === 0) {
224
+ return { status: 'completed', yields: {} };
225
+ }
226
+ // Fast-path: nothing is reviewable → no-op. The analyst has already
227
+ // pre-decided everything; there's nothing for the anima to weigh in on.
228
+ const reviewable = reviewableDecisions(plan);
229
+ if (reviewable.length === 0) {
230
+ return { status: 'completed', yields: {} };
231
+ }
232
+ const animator = guild().apparatus('animator');
233
+ const writ = givens.writ;
234
+ const cwd = typeof givens.cwd === 'string' && givens.cwd.length > 0
235
+ ? givens.cwd
236
+ : process.cwd();
237
+ const prompt = buildPatronPrompt(reviewable);
238
+ const handle = animator.summon({
239
+ role,
240
+ prompt,
241
+ cwd,
242
+ environment: writ ? { GIT_AUTHOR_EMAIL: `${writ.id}@nexus.local` } : {},
243
+ metadata: {
244
+ engineId: context.engineId,
245
+ planId,
246
+ ...(writ ? { writId: writ.id } : {}),
247
+ },
248
+ });
249
+ return { status: 'launched', sessionId: handle.sessionId };
250
+ },
251
+ async collect(sessionId, givens, _context) {
252
+ const planId = givens.planId;
253
+ if (typeof planId !== 'string' || planId.length === 0) {
254
+ throw new Error('patron-anima collect requires a non-empty string "planId" given.');
255
+ }
256
+ const book = getPlansBook();
257
+ const plan = await book.get(planId);
258
+ if (!plan) {
259
+ throw new Error(`Plan "${planId}" not found.`);
260
+ }
261
+ const stacks = guild().apparatus('stacks');
262
+ const sessionsBook = stacks.readBook('animator', 'sessions');
263
+ const session = await sessionsBook.get(sessionId);
264
+ const output = session?.output ?? '';
265
+ const reviewable = reviewableDecisions(plan);
266
+ const emissionsByDecisionId = parseEmission(output, reviewable);
267
+ // Apply verdicts to each touched decision. Untouched decisions are
268
+ // left unfilled — decision-review will surface them to the human.
269
+ const touched = [];
270
+ const decisions = (plan.decisions ?? []).map(d => ({ ...d }));
271
+ for (const decision of decisions) {
272
+ const emission = emissionsByDecisionId.get(decision.id);
273
+ if (!emission)
274
+ continue;
275
+ decision.patron = emission;
276
+ decision.selected = emission.selection;
277
+ delete decision.patronOverride;
278
+ touched.push(decision.id);
279
+ }
280
+ await book.patch(planId, {
281
+ decisions,
282
+ updatedAt: new Date().toISOString(),
283
+ });
284
+ return {
285
+ sessionId,
286
+ touchedDecisionIds: touched,
287
+ totalReviewable: reviewable.length,
288
+ };
289
+ },
290
+ };
291
+ }
292
+ //# sourceMappingURL=patron-anima.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patron-anima.js","sourceRoot":"","sources":["../../src/engines/patron-anima.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * plan-finalize clockwork engine.
3
+ *
4
+ * Planning-phase terminator for the combined plan-and-ship rig. Unlike
5
+ * `spec-publish`, this engine does NOT post a mandate writ and does NOT
6
+ * create any clerk links. It merely validates that the spec-writer stage
7
+ * produced a spec, yields the spec verbatim for downstream engines
8
+ * (specifically the `implement` engine, whose `prompt` given is wired to
9
+ * `${yields.plan-finalize.spec}`), and transitions the plan's status from
10
+ * `writing` to `completed`.
11
+ *
12
+ * Preconditions:
13
+ * - plan.status must be 'writing'
14
+ * - plan.spec must be a non-empty string
15
+ */
16
+ import type { EngineDesign } from '@shardworks/fabricator-apparatus';
17
+ import type { Book } from '@shardworks/stacks-apparatus';
18
+ import type { PlanDoc } from '../types.ts';
19
+ export declare function createPlanFinalizeEngine(getPlansBook: () => Book<PlanDoc>): EngineDesign;
20
+ //# sourceMappingURL=plan-finalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-finalize.d.ts","sourceRoot":"","sources":["../../src/engines/plan-finalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,kCAAkC,CAAC;AACxG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CA+CxF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * plan-finalize clockwork engine.
3
+ *
4
+ * Planning-phase terminator for the combined plan-and-ship rig. Unlike
5
+ * `spec-publish`, this engine does NOT post a mandate writ and does NOT
6
+ * create any clerk links. It merely validates that the spec-writer stage
7
+ * produced a spec, yields the spec verbatim for downstream engines
8
+ * (specifically the `implement` engine, whose `prompt` given is wired to
9
+ * `${yields.plan-finalize.spec}`), and transitions the plan's status from
10
+ * `writing` to `completed`.
11
+ *
12
+ * Preconditions:
13
+ * - plan.status must be 'writing'
14
+ * - plan.spec must be a non-empty string
15
+ */
16
+ export function createPlanFinalizeEngine(getPlansBook) {
17
+ return {
18
+ id: 'astrolabe.plan-finalize',
19
+ async run(givens, _context) {
20
+ const planId = givens.planId;
21
+ const book = getPlansBook();
22
+ const plan = await book.get(planId);
23
+ if (!plan) {
24
+ throw new Error(`Plan "${planId}" not found.`);
25
+ }
26
+ // Validate status
27
+ if (plan.status !== 'writing') {
28
+ throw new Error(`plan-finalize: expected plan status "writing" but got "${plan.status}" for plan "${planId}".`);
29
+ }
30
+ // Validate spec exists
31
+ if (typeof plan.spec !== 'string' || plan.spec.length === 0) {
32
+ throw new Error(`Plan "${planId}" has no spec — spec-writer stage did not produce output.`);
33
+ }
34
+ const spec = plan.spec;
35
+ // Mark the plan completed. The combined rig still has implementation
36
+ // work to do downstream of this engine, but from Astrolabe's POV the
37
+ // planning phase is done the moment the spec is ready for handoff.
38
+ const now = new Date().toISOString();
39
+ await book.patch(planId, {
40
+ status: 'completed',
41
+ updatedAt: now,
42
+ });
43
+ return {
44
+ status: 'completed',
45
+ yields: { spec },
46
+ };
47
+ },
48
+ };
49
+ }
50
+ //# sourceMappingURL=plan-finalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-finalize.js","sourceRoot":"","sources":["../../src/engines/plan-finalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,UAAU,wBAAwB,CAAC,YAAiC;IACxE,OAAO;QACL,EAAE,EAAE,yBAAyB;QAE7B,KAAK,CAAC,GAAG,CACP,MAA+B,EAC/B,QAA0B;YAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;YACvC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;YAE5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,cAAc,CAAC,CAAC;YACjD,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,0DAA0D,IAAI,CAAC,MAAM,eAAe,MAAM,IAAI,CAC/F,CAAC;YACJ,CAAC;YAED,uBAAuB;YACvB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CACb,SAAS,MAAM,2DAA2D,CAC3E,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,qEAAqE;YACrE,qEAAqE;YACrE,mEAAmE;YACnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACvB,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,EAAE,IAAI,EAAE;aACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * See: docs/architecture/apparatus/astrolabe.md
9
9
  */
10
- export type { PlanDoc, ScopeItem, Decision, PlanStatus, PlanFilters, AstrolabeConfig, AstrolabeApi, } from './types.ts';
10
+ export type { PlanDoc, ScopeItem, Decision, PatronEmission, PlanStatus, PlanFilters, AstrolabeConfig, AstrolabeApi, } from './types.ts';
11
11
  export { createAstrolabe } from './astrolabe.ts';
12
12
  declare const _default: import("@shardworks/nexus-core").Plugin;
13
13
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,YAAY,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;;AAKjD,wBAAiC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,YAAY,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;;AAKjD,wBAAiC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,yEAAyE;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,eAAe,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,yEAAyE;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,eAAe,eAAe,EAAE,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Plan-and-ship rig template (`astrolabe.plan-and-ship`).
3
+ *
4
+ * Combined planning + implementation rig. Carries a single brief writ
5
+ * through the full pipeline — plan, decision review, spec drafting,
6
+ * implementation, review, revise, seal — without posting an intermediate
7
+ * mandate writ. The brief writ itself reaches `completed` only after the
8
+ * implementation seal succeeds, which restores correct blocked_by
9
+ * dependency gating for downstream writs.
10
+ *
11
+ * Stages: plan-init → draft → reader-analyst → inventory-check →
12
+ * patron-anima → decision-review → spec-writer → plan-finalize →
13
+ * implement → review → revise → seal.
14
+ *
15
+ * `patron-anima` consults a configured Patron Anima to pre-fill
16
+ * decisions on behalf of the patron. When `astrolabe.patronRole` is
17
+ * unset or empty, the engine no-ops and `decision-review` proceeds as
18
+ * it did before the engine existed. The `cwd` given is the shared draft
19
+ * worktree so the anima can inspect the codebase if its role instructions
20
+ * allow it.
21
+ *
22
+ * The `draft` engine is shared across both phases (D6 in the commission
23
+ * spec): every downstream engine reads the same `upstream['draft']`
24
+ * worktree. The `seal` engine runs without `abandon: true` — the seal is
25
+ * real. `implement.givens.prompt` is wired to `${yields.plan-finalize.spec}`
26
+ * so the implementing anima works from the planning spec instead of the
27
+ * brief's raw body (the old path through spec-publish posting a mandate is
28
+ * not used here).
29
+ */
30
+ import type { RigTemplate } from '@shardworks/spider-apparatus';
31
+ export declare const planAndShipRigTemplate: RigTemplate;
32
+ //# sourceMappingURL=plan-and-ship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-and-ship.d.ts","sourceRoot":"","sources":["../src/plan-and-ship.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,eAAO,MAAM,sBAAsB,EAAE,WAuGpC,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Plan-and-ship rig template (`astrolabe.plan-and-ship`).
3
+ *
4
+ * Combined planning + implementation rig. Carries a single brief writ
5
+ * through the full pipeline — plan, decision review, spec drafting,
6
+ * implementation, review, revise, seal — without posting an intermediate
7
+ * mandate writ. The brief writ itself reaches `completed` only after the
8
+ * implementation seal succeeds, which restores correct blocked_by
9
+ * dependency gating for downstream writs.
10
+ *
11
+ * Stages: plan-init → draft → reader-analyst → inventory-check →
12
+ * patron-anima → decision-review → spec-writer → plan-finalize →
13
+ * implement → review → revise → seal.
14
+ *
15
+ * `patron-anima` consults a configured Patron Anima to pre-fill
16
+ * decisions on behalf of the patron. When `astrolabe.patronRole` is
17
+ * unset or empty, the engine no-ops and `decision-review` proceeds as
18
+ * it did before the engine existed. The `cwd` given is the shared draft
19
+ * worktree so the anima can inspect the codebase if its role instructions
20
+ * allow it.
21
+ *
22
+ * The `draft` engine is shared across both phases (D6 in the commission
23
+ * spec): every downstream engine reads the same `upstream['draft']`
24
+ * worktree. The `seal` engine runs without `abandon: true` — the seal is
25
+ * real. `implement.givens.prompt` is wired to `${yields.plan-finalize.spec}`
26
+ * so the implementing anima works from the planning spec instead of the
27
+ * brief's raw body (the old path through spec-publish posting a mandate is
28
+ * not used here).
29
+ */
30
+ export const planAndShipRigTemplate = {
31
+ engines: [
32
+ {
33
+ id: 'plan-init',
34
+ designId: 'astrolabe.plan-init',
35
+ upstream: [],
36
+ givens: { writ: '${writ}' },
37
+ },
38
+ {
39
+ id: 'draft',
40
+ designId: 'draft',
41
+ upstream: ['plan-init'],
42
+ givens: { writ: '${writ}' },
43
+ },
44
+ {
45
+ id: 'reader-analyst',
46
+ designId: 'anima-session',
47
+ upstream: ['draft'],
48
+ givens: {
49
+ role: 'astrolabe.sage-reading-analyst',
50
+ prompt: 'Plan ID: ${yields.plan-init.planId}',
51
+ cwd: '${yields.draft.path}',
52
+ writ: '${writ}',
53
+ metadata: { engineId: 'reader-analyst' },
54
+ },
55
+ },
56
+ {
57
+ id: 'inventory-check',
58
+ designId: 'astrolabe.inventory-check',
59
+ upstream: ['reader-analyst'],
60
+ givens: { planId: '${yields.plan-init.planId}' },
61
+ },
62
+ {
63
+ id: 'patron-anima',
64
+ designId: 'astrolabe.patron-anima',
65
+ upstream: ['inventory-check'],
66
+ givens: {
67
+ planId: '${yields.plan-init.planId}',
68
+ cwd: '${yields.draft.path}',
69
+ writ: '${writ}',
70
+ },
71
+ },
72
+ {
73
+ id: 'decision-review',
74
+ designId: 'astrolabe.decision-review',
75
+ upstream: ['patron-anima'],
76
+ givens: { planId: '${yields.plan-init.planId}' },
77
+ },
78
+ {
79
+ id: 'spec-writer',
80
+ designId: 'anima-session',
81
+ upstream: ['decision-review'],
82
+ givens: {
83
+ role: 'astrolabe.sage-writer',
84
+ prompt: 'Plan ID: ${yields.plan-init.planId}\n\n' +
85
+ 'Decision summary:\n${yields.decision-review.decisionSummary}',
86
+ cwd: '${yields.draft.path}',
87
+ writ: '${writ}',
88
+ metadata: { engineId: 'spec-writer' },
89
+ },
90
+ },
91
+ {
92
+ id: 'plan-finalize',
93
+ designId: 'astrolabe.plan-finalize',
94
+ upstream: ['spec-writer'],
95
+ givens: { planId: '${yields.plan-init.planId}' },
96
+ },
97
+ {
98
+ id: 'implement',
99
+ designId: 'implement',
100
+ upstream: ['plan-finalize'],
101
+ givens: {
102
+ writ: '${writ}',
103
+ role: '${vars.role}',
104
+ prompt: '${yields.plan-finalize.spec}',
105
+ },
106
+ },
107
+ {
108
+ id: 'review',
109
+ designId: 'review',
110
+ upstream: ['implement'],
111
+ givens: {
112
+ writ: '${writ}',
113
+ role: 'reviewer',
114
+ buildCommand: '${vars.buildCommand}',
115
+ testCommand: '${vars.testCommand}',
116
+ },
117
+ },
118
+ {
119
+ id: 'revise',
120
+ designId: 'revise',
121
+ upstream: ['review'],
122
+ givens: { writ: '${writ}', role: '${vars.role}' },
123
+ },
124
+ {
125
+ id: 'seal',
126
+ designId: 'seal',
127
+ upstream: ['revise'],
128
+ givens: {},
129
+ },
130
+ ],
131
+ resolutionEngine: 'seal',
132
+ };
133
+ //# sourceMappingURL=plan-and-ship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-and-ship.js","sourceRoot":"","sources":["../src/plan-and-ship.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -44,6 +44,40 @@ export interface Decision {
44
44
  rationale?: string;
45
45
  selected?: string;
46
46
  patronOverride?: string;
47
+ /**
48
+ * Patron Anima emission for this decision, if the patron-anima engine
49
+ * touched it. Records the anima's verdict, selection, confidence, and
50
+ * short rationale. Kept distinct from analyst fields so override-rate ×
51
+ * confidence can be measured as a first-class planner-quality signal.
52
+ */
53
+ patron?: PatronEmission;
54
+ }
55
+ /**
56
+ * A Patron Anima's emission for a single decision.
57
+ *
58
+ * - `verdict: 'confirm'` — the anima accepts the analyst's recommendation.
59
+ * - `verdict: 'override'` — the anima picks a different option than the
60
+ * recommendation.
61
+ * - `verdict: 'fill-in'` — no analyst recommendation existed; the anima
62
+ * supplies one.
63
+ *
64
+ * `selection` must be one of the decision's offered option keys — the
65
+ * anima cannot emit custom / free-text selections. (The human patron
66
+ * retains that escape hatch via `decision-review`'s `allowCustom` input.)
67
+ *
68
+ * `confidence` is calibrated structurally against the patron role's
69
+ * principles list: one principle applies cleanly → `'high'`; multiple
70
+ * principles conflict → `'med'`; no principle applies → `'low'`.
71
+ *
72
+ * `rationale` is a short free-text note — which principle (or conflict)
73
+ * produced the verdict. Optional so the engine can accept minimal well-
74
+ * formed emissions.
75
+ */
76
+ export interface PatronEmission {
77
+ verdict: 'confirm' | 'override' | 'fill-in';
78
+ selection: string;
79
+ confidence: 'low' | 'med' | 'high';
80
+ rationale?: string;
47
81
  }
48
82
  export interface PlanFilters {
49
83
  /** Filter by status. */
@@ -58,6 +92,15 @@ export interface PlanFilters {
58
92
  export interface AstrolabeConfig {
59
93
  /** The writ type posted by the spec-writer engine. Default: 'mandate'. */
60
94
  generatedWritType?: string;
95
+ /**
96
+ * Qualified role name of the Patron Anima consulted by the
97
+ * `astrolabe.patron-anima` engine before `decision-review`. When unset
98
+ * or empty, the engine no-ops and `decision-review` proceeds as it
99
+ * does without the anima stage. There is no framework default — every
100
+ * patron's taste is unique, so a shared default would represent no
101
+ * patron's taste.
102
+ */
103
+ patronRole?: string;
61
104
  }
62
105
  declare module '@shardworks/nexus-core' {
63
106
  interface GuildConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAIpG,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,MAAM,EAAE,UAAU,CAAC;IAGnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,mDAAmD;IACnD,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IAGvB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,WAAW;QACnB,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;CACF;AAID,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,kFAAkF;IAClF,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/E"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shardworks/astrolabe-apparatus",
3
- "version": "0.1.227",
3
+ "version": "0.1.229",
4
4
  "license": "ISC",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,16 +20,17 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "zod": "4.3.6",
23
- "@shardworks/clerk-apparatus": "0.1.227",
24
- "@shardworks/spider-apparatus": "0.1.227",
25
- "@shardworks/fabricator-apparatus": "0.1.227",
26
- "@shardworks/loom-apparatus": "0.1.227",
27
- "@shardworks/stacks-apparatus": "0.1.227",
28
- "@shardworks/tools-apparatus": "0.1.227"
23
+ "@shardworks/stacks-apparatus": "0.1.229",
24
+ "@shardworks/tools-apparatus": "0.1.229",
25
+ "@shardworks/clerk-apparatus": "0.1.229",
26
+ "@shardworks/fabricator-apparatus": "0.1.229",
27
+ "@shardworks/spider-apparatus": "0.1.229",
28
+ "@shardworks/loom-apparatus": "0.1.229",
29
+ "@shardworks/animator-apparatus": "0.1.229"
29
30
  },
30
31
  "devDependencies": {
31
32
  "@types/node": "25.5.0",
32
- "@shardworks/nexus-core": "0.1.227"
33
+ "@shardworks/nexus-core": "0.1.229"
33
34
  },
34
35
  "files": [
35
36
  "dist",