@shardworks/astrolabe-apparatus 0.1.228 → 0.1.230
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 +8 -5
- package/dist/astrolabe.d.ts.map +1 -1
- package/dist/astrolabe.js +4 -2
- package/dist/astrolabe.js.map +1 -1
- package/dist/engines/index.d.ts +1 -0
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js +1 -0
- package/dist/engines/index.js.map +1 -1
- package/dist/engines/patron-anima.d.ts +75 -0
- package/dist/engines/patron-anima.d.ts.map +1 -0
- package/dist/engines/patron-anima.js +292 -0
- package/dist/engines/patron-anima.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plan-and-ship.d.ts +9 -2
- package/dist/plan-and-ship.d.ts.map +1 -1
- package/dist/plan-and-ship.js +20 -3
- package/dist/plan-and-ship.js.map +1 -1
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -9
- package/pages/astrolabe/astrolabe.js +2 -2
- package/pages/astrolabe/astrolabe.test.js +37 -0
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 and carries them through implementation. A single combined rig (`astrolabe.plan-and-ship`) runs the planning pipeline — inventory, analysis, 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.
|
|
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,7 +130,8 @@ 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.
|
|
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. |
|
|
132
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. |
|
|
133
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. |
|
|
134
137
|
|
|
@@ -136,7 +139,7 @@ The Astrolabe declares one book in Stacks:
|
|
|
136
139
|
|
|
137
140
|
| Template | Mapped Writ Type | Engines |
|
|
138
141
|
|---|---|---|
|
|
139
|
-
| `astrolabe.plan-and-ship` | `brief` (default) | plan-init → draft → reader-analyst → inventory-check → decision-review → spec-writer → plan-finalize → implement → review → revise → seal |
|
|
142
|
+
| `astrolabe.plan-and-ship` | `brief` (default) | plan-init → draft → reader-analyst → inventory-check → patron-anima → decision-review → spec-writer → plan-finalize → implement → review → revise → seal |
|
|
140
143
|
| `astrolabe.two-phase-planning` | — (opt-in) | plan-init → draft → reader-analyst → inventory-check → decision-review → spec-writer → spec-publish → seal |
|
|
141
144
|
| `astrolabe.three-phase-planning` | — (opt-in) | plan-init → draft → reader → inventory-check → analyst → decision-review → spec-writer → spec-publish → seal |
|
|
142
145
|
|
|
@@ -144,7 +147,7 @@ The `resolutionEngine` is `seal` for `plan-and-ship` (brief completes when imple
|
|
|
144
147
|
|
|
145
148
|
#### Rig Template Selection
|
|
146
149
|
|
|
147
|
-
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 brief reaches `completed` only when the final seal engine completes.
|
|
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.
|
|
148
151
|
|
|
149
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`:
|
|
150
153
|
|
package/dist/astrolabe.d.ts.map
CHANGED
|
@@ -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;
|
|
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,7 +10,7 @@
|
|
|
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, createPlanFinalizeEngine, } 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
16
|
import { planAndShipRigTemplate } from "./plan-and-ship.js";
|
|
@@ -24,6 +24,7 @@ export function createAstrolabe() {
|
|
|
24
24
|
// ── Engines ────────────────────────────────────────────────────
|
|
25
25
|
const planInitEngine = createPlanInitEngine(() => plansBook);
|
|
26
26
|
const inventoryCheckEngine = createInventoryCheckEngine(() => plansBook);
|
|
27
|
+
const patronAnimaEngine = createPatronAnimaEngine(() => plansBook);
|
|
27
28
|
const decisionReviewEngine = createDecisionReviewEngine(() => plansBook);
|
|
28
29
|
const specPublishEngine = createSpecPublishEngine(() => plansBook);
|
|
29
30
|
const planFinalizeEngine = createPlanFinalizeEngine(() => plansBook);
|
|
@@ -194,7 +195,7 @@ export function createAstrolabe() {
|
|
|
194
195
|
return {
|
|
195
196
|
apparatus: {
|
|
196
197
|
requires: ['stacks', 'clerk'],
|
|
197
|
-
recommends: ['spider', 'loom', 'fabricator', 'oculus', 'ratchet'],
|
|
198
|
+
recommends: ['spider', 'loom', 'fabricator', 'oculus', 'ratchet', 'animator'],
|
|
198
199
|
supportKit: {
|
|
199
200
|
books: {
|
|
200
201
|
plans: { indexes: ['status', 'codex', 'createdAt'] },
|
|
@@ -228,6 +229,7 @@ export function createAstrolabe() {
|
|
|
228
229
|
engines: {
|
|
229
230
|
'astrolabe.plan-init': planInitEngine,
|
|
230
231
|
'astrolabe.inventory-check': inventoryCheckEngine,
|
|
232
|
+
'astrolabe.patron-anima': patronAnimaEngine,
|
|
231
233
|
'astrolabe.decision-review': decisionReviewEngine,
|
|
232
234
|
'astrolabe.spec-publish': specPublishEngine,
|
|
233
235
|
'astrolabe.plan-finalize': planFinalizeEngine,
|
package/dist/astrolabe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astrolabe.js","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAInD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wEAAwE;AAExE,SAAS,sBAAsB;IAC7B,OAAO,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,eAAe;IAC7B,IAAI,SAAwB,CAAC;IAE7B,kEAAkE;IAElE,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAErE,kEAAkE;IAElE,MAAM,GAAG,GAAiB;QACxB,KAAK,CAAC,IAAI,CAAC,MAAc;YACvB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,cAAc,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAqB;YAC9B,MAAM,UAAU,GAAgB,EAAE,CAAC;YACnC,IAAI,OAAO,EAAE,MAAM;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtE,IAAI,OAAO,EAAE,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;YAE/B,OAAO,SAAS,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBACrD,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC9B,KAAK;gBACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,MAAoC;YAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;IAEF,kEAAkE;IAElE,MAAM,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EACV,4EAA4E;YAC5E,iEAAiE;QACnE,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SACnE;QACD,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,cAAc,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EACV,yEAAyE;YACzE,8CAA8C;QAChD,MAAM,EAAE;YACN,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;iBAC7E,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SACpE;QACD,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,KAAK,GAAgB,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,SAAS,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC3C,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yCAAyC;QACtD,YAAY,EACV,gFAAgF;YAChF,+EAA+E;QACjF,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC/D;QACD,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;YACvC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,CAAC;QAC1B,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,6CAA6C;QAC1D,YAAY,EACV,kFAAkF;YAClF,oBAAoB;QACtB,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;gBACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gBACrB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;aACtB,CAAC,CACH;iBACA,QAAQ,CAAC,aAAa,CAAC;SAC3B;QACD,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YACnC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;QAC9B,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,2CAA2C;QACxD,YAAY,EACV,wFAAwF;YACxF,wDAAwD;QAC1D,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,CAAC;iBACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;gBACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACtC,CAAC,CACH;iBACA,QAAQ,CAAC,gBAAgB,CAAC;SAC9B;QACD,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;YACvC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC;QACjC,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,YAAY,EACV,mFAAmF;YACnF,oEAAoE;QACtE,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACrE;QACD,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;YAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8CAA8C;QAC3D,YAAY,EACV,4EAA4E;YAC5E,8CAA8C;QAChD,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAC9D;QACD,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;YAClC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;KACF,CAAC,CAAC;IAEH,kEAAkE;IAElE,OAAO;QACL,SAAS,EAAE;YACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"astrolabe.js","sourceRoot":"","sources":["../src/astrolabe.ts"],"names":[],"mappings":"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"}
|
package/dist/engines/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
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';
|
|
5
6
|
export { createPlanFinalizeEngine } from './plan-finalize.ts';
|
|
@@ -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;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,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"}
|
package/dist/engines/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
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";
|
|
5
6
|
export { createPlanFinalizeEngine } from "./plan-finalize.js";
|
|
@@ -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;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,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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"}
|
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;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/plan-and-ship.d.ts
CHANGED
|
@@ -9,8 +9,15 @@
|
|
|
9
9
|
* dependency gating for downstream writs.
|
|
10
10
|
*
|
|
11
11
|
* Stages: plan-init → draft → reader-analyst → inventory-check →
|
|
12
|
-
* decision-review → spec-writer → plan-finalize →
|
|
13
|
-
* review → revise → seal.
|
|
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.
|
|
14
21
|
*
|
|
15
22
|
* The `draft` engine is shared across both phases (D6 in the commission
|
|
16
23
|
* spec): every downstream engine reads the same `upstream['draft']`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-and-ship.d.ts","sourceRoot":"","sources":["../src/plan-and-ship.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/dist/plan-and-ship.js
CHANGED
|
@@ -9,8 +9,15 @@
|
|
|
9
9
|
* dependency gating for downstream writs.
|
|
10
10
|
*
|
|
11
11
|
* Stages: plan-init → draft → reader-analyst → inventory-check →
|
|
12
|
-
* decision-review → spec-writer → plan-finalize →
|
|
13
|
-
* review → revise → seal.
|
|
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.
|
|
14
21
|
*
|
|
15
22
|
* The `draft` engine is shared across both phases (D6 in the commission
|
|
16
23
|
* spec): every downstream engine reads the same `upstream['draft']`
|
|
@@ -52,10 +59,20 @@ export const planAndShipRigTemplate = {
|
|
|
52
59
|
upstream: ['reader-analyst'],
|
|
53
60
|
givens: { planId: '${yields.plan-init.planId}' },
|
|
54
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
|
+
},
|
|
55
72
|
{
|
|
56
73
|
id: 'decision-review',
|
|
57
74
|
designId: 'astrolabe.decision-review',
|
|
58
|
-
upstream: ['
|
|
75
|
+
upstream: ['patron-anima'],
|
|
59
76
|
givens: { planId: '${yields.plan-init.planId}' },
|
|
60
77
|
},
|
|
61
78
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-and-ship.js","sourceRoot":"","sources":["../src/plan-and-ship.ts"],"names":[],"mappings":"AAAA
|
|
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 {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
3
|
+
"version": "0.1.230",
|
|
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/
|
|
24
|
-
"@shardworks/clerk-apparatus": "0.1.
|
|
25
|
-
"@shardworks/
|
|
26
|
-
"@shardworks/spider-apparatus": "0.1.
|
|
27
|
-
"@shardworks/
|
|
28
|
-
"@shardworks/
|
|
23
|
+
"@shardworks/stacks-apparatus": "0.1.230",
|
|
24
|
+
"@shardworks/clerk-apparatus": "0.1.230",
|
|
25
|
+
"@shardworks/tools-apparatus": "0.1.230",
|
|
26
|
+
"@shardworks/spider-apparatus": "0.1.230",
|
|
27
|
+
"@shardworks/fabricator-apparatus": "0.1.230",
|
|
28
|
+
"@shardworks/loom-apparatus": "0.1.230",
|
|
29
|
+
"@shardworks/animator-apparatus": "0.1.230"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@types/node": "25.5.0",
|
|
32
|
-
"@shardworks/nexus-core": "0.1.
|
|
33
|
+
"@shardworks/nexus-core": "0.1.230"
|
|
33
34
|
},
|
|
34
35
|
"files": [
|
|
35
36
|
"dist",
|
|
@@ -41,7 +42,7 @@
|
|
|
41
42
|
],
|
|
42
43
|
"scripts": {
|
|
43
44
|
"build": "tsc",
|
|
44
|
-
"test": "node --disable-warning=ExperimentalWarning --experimental-transform-types --test 'src/**/*.test.ts'",
|
|
45
|
+
"test": "node --disable-warning=ExperimentalWarning --experimental-transform-types --test 'src/**/*.test.ts' 'pages/**/*.test.js'",
|
|
45
46
|
"typecheck": "tsc --noEmit"
|
|
46
47
|
}
|
|
47
48
|
}
|
|
@@ -307,10 +307,10 @@
|
|
|
307
307
|
detailTitle.textContent = 'Plan: ' + plan.id;
|
|
308
308
|
|
|
309
309
|
// Metadata card
|
|
310
|
-
var briefLink = '<a href="/pages/
|
|
310
|
+
var briefLink = '<a href="/pages/writs/?writ=' + encodeURIComponent(plan.id) + '">' + esc(plan.id) + '</a>';
|
|
311
311
|
var mandateHtml = '';
|
|
312
312
|
if (plan.generatedWritId) {
|
|
313
|
-
mandateHtml = '<dt>Mandate Writ</dt><dd><a href="/pages/
|
|
313
|
+
mandateHtml = '<dt>Mandate Writ</dt><dd><a href="/pages/writs/?writ=' +
|
|
314
314
|
encodeURIComponent(plan.generatedWritId) + '">' + esc(plan.generatedWritId) + '</a></dd>';
|
|
315
315
|
}
|
|
316
316
|
|
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
import { describe, it } from 'node:test';
|
|
12
12
|
import assert from 'node:assert/strict';
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
import { resolve, dirname } from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const astrolabeJs = readFileSync(resolve(__dirname, 'astrolabe.js'), 'utf-8');
|
|
13
19
|
|
|
14
20
|
// ── Extracted pure functions (identical to astrolabe.js) ─────────────
|
|
15
21
|
|
|
@@ -422,3 +428,34 @@ describe('renderDecisionsTable()', () => {
|
|
|
422
428
|
assert.ok(!html.includes('<script>'));
|
|
423
429
|
});
|
|
424
430
|
});
|
|
431
|
+
|
|
432
|
+
describe('astrolabe.js plan-detail writ cross-link URL', () => {
|
|
433
|
+
// Regression guard: the plan-detail brief-writ and mandate-writ anchors
|
|
434
|
+
// historically targeted '/pages/clerk/?writ=…', but no plugin registers
|
|
435
|
+
// a page with id 'clerk' — the Clerk's writs page is registered with id
|
|
436
|
+
// 'writs' and served at '/pages/writs/'. That produced a bare 404 on
|
|
437
|
+
// every click. Pin the canonical URL shape and forbid the broken one.
|
|
438
|
+
|
|
439
|
+
it('writ deep-links target the canonical Clerk writs page path', () => {
|
|
440
|
+
assert.match(
|
|
441
|
+
astrolabeJs,
|
|
442
|
+
/\/pages\/writs\/\?writ=/,
|
|
443
|
+
'writ deep-links must target /pages/writs/?writ=',
|
|
444
|
+
);
|
|
445
|
+
assert.doesNotMatch(
|
|
446
|
+
astrolabeJs,
|
|
447
|
+
/\/pages\/clerk\/\?writ=/,
|
|
448
|
+
'writ deep-links must NOT target the broken /pages/clerk/?writ= path',
|
|
449
|
+
);
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
it('both plan-detail writ anchors (brief and mandate) use the canonical path', () => {
|
|
453
|
+
// The plan-detail view emits two writ anchors: the brief-writ link and
|
|
454
|
+
// the (optional) mandate-writ link. Both must use the canonical shape.
|
|
455
|
+
var matches = astrolabeJs.match(/\/pages\/writs\/\?writ=/g) || [];
|
|
456
|
+
assert.ok(
|
|
457
|
+
matches.length >= 2,
|
|
458
|
+
'expected at least 2 canonical /pages/writs/?writ= links (brief + mandate), found ' + matches.length,
|
|
459
|
+
);
|
|
460
|
+
});
|
|
461
|
+
});
|