@shardworks/astrolabe-apparatus 0.1.211 → 0.1.212
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
|
@@ -158,7 +158,7 @@ The Astrolabe declares one book in Stacks:
|
|
|
158
158
|
|---|---|
|
|
159
159
|
| `astrolabe.plan-init` | Creates a PlanDoc from the brief writ; validates codex presence |
|
|
160
160
|
| `astrolabe.inventory-check` | Validates that the reader produced a non-empty inventory |
|
|
161
|
-
| `astrolabe.decision-review` | Two-pass engine: blocks for patron review, then reconciles answers |
|
|
161
|
+
| `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. |
|
|
162
162
|
| `astrolabe.spec-publish` | Publishes the generated specification as a new writ |
|
|
163
163
|
|
|
164
164
|
### Rig Templates (contributed to Spider)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-review.d.ts","sourceRoot":"","sources":["../../src/engines/decision-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,kCAAkC,CAAC;AACxG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAUzD,OAAO,KAAK,EAAE,OAAO,EAAyC,MAAM,aAAa,CAAC;AA0FlF,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"decision-review.d.ts","sourceRoot":"","sources":["../../src/engines/decision-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,kCAAkC,CAAC;AACxG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAUzD,OAAO,KAAK,EAAE,OAAO,EAAyC,MAAM,aAAa,CAAC;AA0FlF,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAsN1F"}
|
|
@@ -107,8 +107,14 @@ export function createDecisionReviewEngine(getPlansBook) {
|
|
|
107
107
|
if (plan.status === 'analyzing') {
|
|
108
108
|
const decisions = plan.decisions ?? [];
|
|
109
109
|
const scopeItems = plan.scope ?? [];
|
|
110
|
-
//
|
|
111
|
-
|
|
110
|
+
// Reviewable decisions are those the analyst left for the patron by
|
|
111
|
+
// leaving `selected` unset. Pre-decided decisions (where the analyst
|
|
112
|
+
// already pre-filled `selected`) are auto-accepted — they skip the
|
|
113
|
+
// InputRequestDoc entirely and flow through reconcile unchanged.
|
|
114
|
+
const reviewableDecisions = decisions.filter(d => d.selected === undefined);
|
|
115
|
+
// Fast-path: nothing is reviewable. Scope items are implicitly
|
|
116
|
+
// auto-accepted in that case — the analyst has settled everything.
|
|
117
|
+
if (reviewableDecisions.length === 0) {
|
|
112
118
|
await book.patch(planId, {
|
|
113
119
|
status: 'writing',
|
|
114
120
|
updatedAt: new Date().toISOString(),
|
|
@@ -118,10 +124,11 @@ export function createDecisionReviewEngine(getPlansBook) {
|
|
|
118
124
|
yields: { decisionSummary: '' },
|
|
119
125
|
};
|
|
120
126
|
}
|
|
121
|
-
// Build questions
|
|
127
|
+
// Build questions — only for reviewable decisions plus scope items.
|
|
128
|
+
// Pre-decided decisions are omitted from both `questions` and `answers`.
|
|
122
129
|
const questions = {};
|
|
123
130
|
const answers = {};
|
|
124
|
-
for (const decision of
|
|
131
|
+
for (const decision of reviewableDecisions) {
|
|
125
132
|
const tags = buildAnalysisTags(decision.analysis);
|
|
126
133
|
const choiceSpec = {
|
|
127
134
|
type: 'choice',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-review.js","sourceRoot":"","sources":["../../src/engines/decision-review.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decision-review.js","sourceRoot":"","sources":["../../src/engines/decision-review.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.212",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,16 +20,16 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"zod": "4.3.6",
|
|
23
|
-
"@shardworks/
|
|
24
|
-
"@shardworks/
|
|
25
|
-
"@shardworks/
|
|
26
|
-
"@shardworks/
|
|
27
|
-
"@shardworks/
|
|
28
|
-
"@shardworks/
|
|
23
|
+
"@shardworks/stacks-apparatus": "0.1.212",
|
|
24
|
+
"@shardworks/tools-apparatus": "0.1.212",
|
|
25
|
+
"@shardworks/clerk-apparatus": "0.1.212",
|
|
26
|
+
"@shardworks/fabricator-apparatus": "0.1.212",
|
|
27
|
+
"@shardworks/loom-apparatus": "0.1.212",
|
|
28
|
+
"@shardworks/spider-apparatus": "0.1.212"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "25.5.0",
|
|
32
|
-
"@shardworks/nexus-core": "0.1.
|
|
32
|
+
"@shardworks/nexus-core": "0.1.212"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
35
|
"dist",
|
package/sage-analyst.md
CHANGED
|
@@ -80,13 +80,36 @@ Not every brief produces decisions. If the existing codebase patterns truly dict
|
|
|
80
80
|
- What's the simplest version of this that a new operator would use on day one? Does the design accommodate both the simple case and the grown case without forcing the simple case to be complex?
|
|
81
81
|
|
|
82
82
|
5. **Classify the decision** (see Decision Analysis Metadata below).
|
|
83
|
-
6. **
|
|
83
|
+
6. **Apply the razor.** Check the decision against the five razor criteria in *The Razor* below. If it matches one, leave `selected` unset so the decision surfaces to the patron. If it does not match, apply the three defaults — **investigate, don't punt:** uncertainty about a non-razor decision is a cue to read more code or re-read the brief, not a cue to hand the decision to the patron.
|
|
84
|
+
7. **Recommend.** Pick the best option. State why in one line. For non-razor decisions, pre-fill `selected` with your choice.
|
|
84
85
|
|
|
85
86
|
**How to form recommendations:**
|
|
86
87
|
|
|
87
88
|
- **Default to the codebase.** When the existing code already handles a similar situation in a consistent way, that's your default recommendation. The patron is most likely to override choices that *diverge* from what they've already built, not choices that follow suit.
|
|
88
89
|
- **Code is ground truth.** When docs and code disagree, analyze against the code as it exists today. Note discrepancies in observations.
|
|
89
90
|
|
|
91
|
+
#### The Razor
|
|
92
|
+
|
|
93
|
+
Not every decision warrants the patron's time. Over the last 38 specs the patron overrode only 3.7% of decisions — the rest were rubber-stamps. Most decisions can be settled by the analyst with a recorded recommendation, and only a narrow class should actually block on patron review.
|
|
94
|
+
|
|
95
|
+
**Surface a decision to the patron (leave `selected` unset) if it matches any of these five criteria:**
|
|
96
|
+
|
|
97
|
+
1. **Divergence from convention.** The recommendation departs from an established codebase pattern. *Example:* "This package stores config in `guild.json`, but for this feature we would want a dedicated `foo.config.ts` — should we?"
|
|
98
|
+
2. **High consumer stakes.** A consumer of the API, feature, or workflow would materially notice the difference — ergonomics, runtime behavior, error semantics, performance. *Example:* "Should `post()` return the full writ or only the id?"
|
|
99
|
+
3. **Observable product surface.** An operator or end user would notice the choice in naming, UX, or behavior. *Example:* "Should the new page be titled `Reviews` or `Review History`?"
|
|
100
|
+
4. **Irreversibility.** The choice is hard to undo without a migration, a deprecation cycle, or breaking downstream consumers. *Example:* "Should the new field be stored as an index column or only in the document body?"
|
|
101
|
+
5. **Genuine ambiguity.** The codebase and the brief give no clear signal and two or more options are equally valid; no amount of further investigation would break the tie. *Example:* "Should we name this `digest` or `summary`? Both terms appear in the codebase with comparable frequency."
|
|
102
|
+
|
|
103
|
+
**Investigate, don't punt.** When you feel uncertainty about a decision that does *not* match one of these five criteria, that uncertainty is a signal to read more code, trace another caller, or re-read the brief — not a signal to surface the decision to the patron. Punting a non-razor decision drains patron attention from the decisions that actually need it.
|
|
104
|
+
|
|
105
|
+
#### The Three Defaults
|
|
106
|
+
|
|
107
|
+
For any decision that does **not** match the razor, apply these defaults in order and pre-fill `selected` with the answer they produce:
|
|
108
|
+
|
|
109
|
+
1. **Match the codebase.** If the existing code already handles an analogous situation, follow the established pattern. The patron is most likely to accept choices that follow suit.
|
|
110
|
+
2. **Match the brief.** If the codebase is silent, use the brief's terminology, naming, and framing verbatim. The brief reflects what the patron has already chosen to say out loud.
|
|
111
|
+
3. **Pick the simplest viable option.** If neither the codebase nor the brief breaks the tie, pick the option that keeps the day-one shape simple and does not foreclose the grown-case. Record the rationale.
|
|
112
|
+
|
|
90
113
|
Each decision needs:
|
|
91
114
|
- `id` — sequential identifier (D1, D2, ...)
|
|
92
115
|
- `scope` — array of scope item IDs this decision relates to (at least one)
|
|
@@ -95,7 +118,7 @@ Each decision needs:
|
|
|
95
118
|
- `options` — key → description map of reasonable approaches (keep descriptions to one line each)
|
|
96
119
|
- `recommendation` — the option key you recommend
|
|
97
120
|
- `rationale` — why this option, in one line
|
|
98
|
-
- `selected` — pre-fill with your
|
|
121
|
+
- `selected` — **If the decision matches any of the five razor criteria, leave `selected` unset.** Otherwise, apply the three defaults, pick the answer, and pre-fill `selected` with your choice. Pre-filled decisions are auto-accepted — the engine drops them from the patron-review gate entirely, so the patron only sees decisions that genuinely warrant their attention. The patron changes `selected` only when overriding a surfaced decision, and if they write a custom override the reconcile loop replaces `selected` with `patronOverride` automatically. Never set both yourself.
|
|
99
122
|
- `analysis` — classification metadata (see below)
|
|
100
123
|
|
|
101
124
|
Order decisions by scope item, then by category (product → api → implementation).
|
package/sage-reading-analyst.md
CHANGED
|
@@ -33,7 +33,7 @@ You also have the standard file-reading tools (Read, Glob, Grep) for exploring t
|
|
|
33
33
|
2. Read the codebase — but let your growing understanding of the change guide which files you read. You do not need to do a full repo walk followed by a separate analysis turn. As you read, you will naturally form scope boundaries, identify decision points, and notice observations. Let that understanding steer your exploration.
|
|
34
34
|
3. Write the codebase inventory using `inventory-write`. The inventory must meet the full quality bar described below.
|
|
35
35
|
4. Write scope items using `scope-write`. Break the brief into coarse, independently deliverable capabilities. Each item should be something the patron might include or exclude.
|
|
36
|
-
5. Write decisions using `decisions-write`. Be exhaustive — capture every design question including ones where the answer seems obvious from codebase conventions. Each decision needs: id, scope references, question, context, options, recommendation, rationale, selected (pre-fill
|
|
36
|
+
5. Write decisions using `decisions-write`. Be exhaustive — capture every design question including ones where the answer seems obvious from codebase conventions. Each decision needs: id, scope references, question, context, options, recommendation, rationale, `selected` (see the pre-fill rule under Decision Analysis — leave unset only when the decision matches the razor; otherwise apply the three defaults and pre-fill with your choice), and analysis metadata (category, observable, confidence, stakes). Never set `patronOverride` — that field is owned by the patron-review pass. When you feel uncertainty about a decision that does *not* match any razor criterion, treat that feeling as a cue to **investigate** — read more code, trace another caller, check the brief again — not as a cue to punt the decision to the patron.
|
|
37
37
|
6. Write observations using `observations-write`. Record refactoring opportunities, risks, suboptimal conventions, doc/code discrepancies, and potential bugs noticed during your pass.
|
|
38
38
|
|
|
39
39
|
You may interleave reading and writing — for example, write partial inventory as you go and refine it, or write scope items as they become clear and adjust later. The key constraint is that when you finish, all four artifacts (inventory, scope, decisions, observations) must be complete and written to the plan via the write tools.
|
|
@@ -115,13 +115,36 @@ Not every brief produces decisions. If the existing codebase patterns truly dict
|
|
|
115
115
|
- What's the simplest version of this that a new operator would use on day one? Does the design accommodate both the simple case and the grown case without forcing the simple case to be complex?
|
|
116
116
|
|
|
117
117
|
5. **Classify the decision** (see Decision Analysis Metadata below).
|
|
118
|
-
6. **
|
|
118
|
+
6. **Apply the razor.** Check the decision against the five razor criteria in *The Razor* below. If it matches one, leave `selected` unset so the decision surfaces to the patron. If it does not match, apply the three defaults — **investigate, don't punt:** uncertainty about a non-razor decision is a cue to read more code or re-read the brief, not a cue to hand the decision to the patron.
|
|
119
|
+
7. **Recommend.** Pick the best option. State why in one line. For non-razor decisions, pre-fill `selected` with your choice.
|
|
119
120
|
|
|
120
121
|
**How to form recommendations:**
|
|
121
122
|
|
|
122
123
|
- **Default to the codebase.** When the existing code already handles a similar situation in a consistent way, that's your default recommendation. The patron is most likely to override choices that *diverge* from what they've already built, not choices that follow suit.
|
|
123
124
|
- **Code is ground truth.** When docs and code disagree, analyze against the code as it exists today. Note discrepancies in observations.
|
|
124
125
|
|
|
126
|
+
#### The Razor
|
|
127
|
+
|
|
128
|
+
Not every decision warrants the patron's time. Over the last 38 specs the patron overrode only 3.7% of decisions — the rest were rubber-stamps. Most decisions can be settled by the analyst with a recorded recommendation, and only a narrow class should actually block on patron review.
|
|
129
|
+
|
|
130
|
+
**Surface a decision to the patron (leave `selected` unset) if it matches any of these five criteria:**
|
|
131
|
+
|
|
132
|
+
1. **Divergence from convention.** The recommendation departs from an established codebase pattern. *Example:* "This package stores config in `guild.json`, but for this feature we would want a dedicated `foo.config.ts` — should we?"
|
|
133
|
+
2. **High consumer stakes.** A consumer of the API, feature, or workflow would materially notice the difference — ergonomics, runtime behavior, error semantics, performance. *Example:* "Should `post()` return the full writ or only the id?"
|
|
134
|
+
3. **Observable product surface.** An operator or end user would notice the choice in naming, UX, or behavior. *Example:* "Should the new page be titled `Reviews` or `Review History`?"
|
|
135
|
+
4. **Irreversibility.** The choice is hard to undo without a migration, a deprecation cycle, or breaking downstream consumers. *Example:* "Should the new field be stored as an index column or only in the document body?"
|
|
136
|
+
5. **Genuine ambiguity.** The codebase and the brief give no clear signal and two or more options are equally valid; no amount of further investigation would break the tie. *Example:* "Should we name this `digest` or `summary`? Both terms appear in the codebase with comparable frequency."
|
|
137
|
+
|
|
138
|
+
**Investigate, don't punt.** When you feel uncertainty about a decision that does *not* match one of these five criteria, that uncertainty is a signal to read more code, trace another caller, or re-read the brief — not a signal to surface the decision to the patron. Punting a non-razor decision drains patron attention from the decisions that actually need it.
|
|
139
|
+
|
|
140
|
+
#### The Three Defaults
|
|
141
|
+
|
|
142
|
+
For any decision that does **not** match the razor, apply these defaults in order and pre-fill `selected` with the answer they produce:
|
|
143
|
+
|
|
144
|
+
1. **Match the codebase.** If the existing code already handles an analogous situation, follow the established pattern. The patron is most likely to accept choices that follow suit.
|
|
145
|
+
2. **Match the brief.** If the codebase is silent, use the brief's terminology, naming, and framing verbatim. The brief reflects what the patron has already chosen to say out loud.
|
|
146
|
+
3. **Pick the simplest viable option.** If neither the codebase nor the brief breaks the tie, pick the option that keeps the day-one shape simple and does not foreclose the grown-case. Record the rationale.
|
|
147
|
+
|
|
125
148
|
Each decision needs:
|
|
126
149
|
- `id` — sequential identifier (D1, D2, ...)
|
|
127
150
|
- `scope` — array of scope item IDs this decision relates to (at least one)
|
|
@@ -130,7 +153,7 @@ Each decision needs:
|
|
|
130
153
|
- `options` — key → description map of reasonable approaches (keep descriptions to one line each)
|
|
131
154
|
- `recommendation` — the option key you recommend
|
|
132
155
|
- `rationale` — why this option, in one line
|
|
133
|
-
- `selected` — pre-fill with your
|
|
156
|
+
- `selected` — **If the decision matches any of the five razor criteria, leave `selected` unset.** Otherwise, apply the three defaults, pick the answer, and pre-fill `selected` with your choice. Pre-filled decisions are auto-accepted — the engine drops them from the patron-review gate entirely, so the patron only sees decisions that genuinely warrant their attention. The patron changes `selected` only when overriding a surfaced decision, and if they write a custom override the reconcile loop replaces `selected` with `patronOverride` automatically. Never set both yourself.
|
|
134
157
|
- `analysis` — classification metadata (see below)
|
|
135
158
|
|
|
136
159
|
Order decisions by scope item, then by category (product → api → implementation).
|