@alphazede/bearing-lite 0.2.0 → 0.2.2
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 +17 -1
- package/hooks/assurance-budget.cjs +1 -19
- package/hooks/closeout.cjs +33 -0
- package/hooks/owner-stops.cjs +154 -0
- package/hooks/plan-package.cjs +177 -0
- package/hooks/planning-review.cjs +9 -14
- package/hooks/policy.cjs +45 -0
- package/hooks/reconcile.cjs +145 -0
- package/hooks/te-host.cjs +25 -1
- package/hooks/transition-order.cjs +12 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/schemas/authority.schema.json +55 -34
- package/schemas/event.schema.json +59 -0
- package/schemas/implementation.schema.json +41 -18
- package/schemas/journey.schema.json +142 -35
- package/skills/bearing-lite/SKILL.md +14 -15
- package/skills/bearing-lite/references/lineups.md +31 -0
- package/skills/bearing-lite/references/owner-stops.md +122 -0
- package/skills/bearing-lite/references/review-policy.md +5 -0
- package/skills/bearing-lite/templates/task.md +4 -1
- package/skills/explorer/SKILL.md +3 -3
- package/skills/light-implementer/SKILL.md +53 -0
- package/skills/map-the-route/SKILL.md +5 -3
- package/skills/map-the-route/references/artifact-grammar.md +23 -6
- package/skills/plan-integrator/SKILL.md +11 -2
- package/skills/requirements-engineer/SKILL.md +57 -0
- package/skills/scribe/SKILL.md +4 -0
- package/skills/set-bearings/SKILL.md +16 -7
- package/skills/set-bearings/templates/workspace.md +28 -0
- package/skills/test-engineer/SKILL.md +2 -0
- package/skills/bearing-lite/templates/default-role-lineup.md +0 -32
|
@@ -5,26 +5,18 @@
|
|
|
5
5
|
"description": "Append-only decisions and authority-event history plus the generation-bound checkout lease. The full mutable file digest is not the stable SEIT execution baseline. Extra lifecycle metadata is allowed at the document root. Lease identity fields stay closed.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": true,
|
|
8
|
-
"required": [
|
|
9
|
-
"schema_version",
|
|
10
|
-
"journey",
|
|
11
|
-
"checkout_lease",
|
|
12
|
-
"decisions",
|
|
13
|
-
"open_decisions",
|
|
14
|
-
"planning_receipts",
|
|
15
|
-
"lineup_selection"
|
|
16
|
-
],
|
|
8
|
+
"required": ["schema_version", "journey", "checkout_lease", "decisions", "open_decisions", "planning_receipts", "lineup_selection"],
|
|
17
9
|
"properties": {
|
|
18
|
-
"schema_version": {
|
|
10
|
+
"schema_version": {"type": "string", "minLength": 1},
|
|
19
11
|
"journey": {
|
|
20
12
|
"type": "object",
|
|
21
13
|
"additionalProperties": true,
|
|
22
14
|
"required": ["id", "title", "status", "planning_repository"],
|
|
23
15
|
"properties": {
|
|
24
|
-
"id": {
|
|
25
|
-
"title": {
|
|
26
|
-
"status": {
|
|
27
|
-
"planning_repository": {
|
|
16
|
+
"id": {"type": "string", "minLength": 1},
|
|
17
|
+
"title": {"type": "string", "minLength": 1},
|
|
18
|
+
"status": {"type": "string", "enum": ["planning", "implementation", "complete", "cancelled"]},
|
|
19
|
+
"planning_repository": {"type": "string", "minLength": 1}
|
|
28
20
|
}
|
|
29
21
|
},
|
|
30
22
|
"checkout_lease": {
|
|
@@ -42,47 +34,162 @@
|
|
|
42
34
|
"state"
|
|
43
35
|
],
|
|
44
36
|
"properties": {
|
|
45
|
-
"journey": {
|
|
46
|
-
"controller": {
|
|
47
|
-
"repository": {
|
|
48
|
-
"checkout": {
|
|
49
|
-
"branch": {
|
|
50
|
-
"candidate_revision": {
|
|
51
|
-
"acquired_at": {
|
|
52
|
-
"generation": {
|
|
53
|
-
"state": {
|
|
54
|
-
|
|
37
|
+
"journey": {"type": "string", "minLength": 1},
|
|
38
|
+
"controller": {"type": "string", "minLength": 1},
|
|
39
|
+
"repository": {"type": "string", "minLength": 1},
|
|
40
|
+
"checkout": {"type": "string", "minLength": 1},
|
|
41
|
+
"branch": {"type": "string", "minLength": 1},
|
|
42
|
+
"candidate_revision": {"type": "string", "minLength": 1},
|
|
43
|
+
"acquired_at": {"type": "string", "minLength": 1},
|
|
44
|
+
"generation": {"type": "integer", "minimum": 1},
|
|
45
|
+
"state": {"enum": ["active", "released"]},
|
|
46
|
+
"released_at": {"type": "string", "format": "date-time"},
|
|
47
|
+
"release_reason": {"type": "string", "minLength": 1}
|
|
48
|
+
},
|
|
49
|
+
"if": {"properties": {"state": {"const": "released"}}},
|
|
50
|
+
"then": {"required": ["released_at", "release_reason"]}
|
|
55
51
|
},
|
|
56
52
|
"history": {
|
|
57
53
|
"type": "object",
|
|
58
54
|
"additionalProperties": true,
|
|
59
55
|
"description": "Optional append-only Journey history wrapper",
|
|
60
56
|
"properties": {
|
|
61
|
-
"decisions": {
|
|
62
|
-
"authority_events": {
|
|
57
|
+
"decisions": {"type": "array", "items": {"type": "object", "additionalProperties": true}},
|
|
58
|
+
"authority_events": {"type": "array", "items": {"type": "object", "additionalProperties": true}}
|
|
63
59
|
}
|
|
64
60
|
},
|
|
65
61
|
"decisions": {
|
|
66
62
|
"type": "array",
|
|
67
63
|
"description": "Append-only confirmed owner decisions",
|
|
68
|
-
"items": {
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"additionalProperties": true,
|
|
67
|
+
"allOf": [
|
|
68
|
+
{
|
|
69
|
+
"if": {"required": ["record_type"], "properties": {"record_type": {"const": "owner_stop"}}},
|
|
70
|
+
"then": {"$ref": "#/$defs/ownerStop"}
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
}
|
|
69
74
|
},
|
|
70
75
|
"authority_events": {
|
|
71
76
|
"type": "array",
|
|
72
77
|
"description": "Append-only authority grant, amend, revoke, or supersede events",
|
|
73
|
-
"items": {
|
|
78
|
+
"items": {"type": "object", "additionalProperties": true}
|
|
74
79
|
},
|
|
75
80
|
"open_decisions": {
|
|
76
81
|
"type": "array",
|
|
77
|
-
"items": {
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"additionalProperties": true,
|
|
85
|
+
"allOf": [
|
|
86
|
+
{
|
|
87
|
+
"if": {"required": ["record_type"], "properties": {"record_type": {"const": "owner_stop"}}},
|
|
88
|
+
"then": {"$ref": "#/$defs/ownerStop"}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
78
92
|
},
|
|
79
|
-
"planning_receipts": {
|
|
93
|
+
"planning_receipts": {"type": "array", "items": {"type": "object", "additionalProperties": true}},
|
|
94
|
+
"lineup_selection": {"type": "object", "additionalProperties": true},
|
|
95
|
+
"owner_wait_tracking": {"type": "boolean", "description": "Explicit coverage marker; absence is unavailable, never zero owner wait."},
|
|
96
|
+
"owner_blocked_intervals": {
|
|
80
97
|
"type": "array",
|
|
81
|
-
"items": {
|
|
82
|
-
|
|
83
|
-
|
|
98
|
+
"items": {
|
|
99
|
+
"type": "object",
|
|
100
|
+
"additionalProperties": false,
|
|
101
|
+
"required": ["decision_ids", "started_at", "ended_at"],
|
|
102
|
+
"properties": {
|
|
103
|
+
"decision_ids": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "minLength": 1}},
|
|
104
|
+
"started_at": {"type": "string", "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"},
|
|
105
|
+
"ended_at": {"type": ["string", "null"], "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"$defs": {
|
|
111
|
+
"ownerStop": {
|
|
84
112
|
"type": "object",
|
|
85
|
-
"additionalProperties": true
|
|
113
|
+
"additionalProperties": true,
|
|
114
|
+
"required": [
|
|
115
|
+
"record_type",
|
|
116
|
+
"id",
|
|
117
|
+
"class",
|
|
118
|
+
"question",
|
|
119
|
+
"why_owner",
|
|
120
|
+
"evidence_ref",
|
|
121
|
+
"affected_slices",
|
|
122
|
+
"blocking",
|
|
123
|
+
"status",
|
|
124
|
+
"created_at",
|
|
125
|
+
"asked_at",
|
|
126
|
+
"answered_at",
|
|
127
|
+
"cancelled_at",
|
|
128
|
+
"round_trip_id"
|
|
129
|
+
],
|
|
130
|
+
"properties": {
|
|
131
|
+
"record_type": {"const": "owner_stop"},
|
|
132
|
+
"id": {"type": "string", "minLength": 1},
|
|
133
|
+
"class": {"enum": ["A", "B", "C", "D", "E", "F"]},
|
|
134
|
+
"question": {"type": "string", "minLength": 1},
|
|
135
|
+
"why_owner": {"type": "string", "minLength": 1},
|
|
136
|
+
"evidence_ref": {"type": "string", "minLength": 1},
|
|
137
|
+
"affected_slices": {"type": "array", "uniqueItems": true, "items": {"type": "string", "minLength": 1}},
|
|
138
|
+
"blocking": {"type": "boolean"},
|
|
139
|
+
"status": {"enum": ["queued", "asked", "answered", "cancelled"]},
|
|
140
|
+
"created_at": {"type": "string", "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"},
|
|
141
|
+
"asked_at": {"type": ["string", "null"], "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"},
|
|
142
|
+
"answered_at": {"type": ["string", "null"], "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"},
|
|
143
|
+
"cancelled_at": {"type": ["string", "null"], "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$"},
|
|
144
|
+
"round_trip_id": {"type": ["string", "null"], "minLength": 1},
|
|
145
|
+
"answer_ref": {"type": "string", "minLength": 1}
|
|
146
|
+
},
|
|
147
|
+
"allOf": [
|
|
148
|
+
{
|
|
149
|
+
"if": {"properties": {"status": {"const": "queued"}}},
|
|
150
|
+
"then": {
|
|
151
|
+
"properties": {
|
|
152
|
+
"asked_at": {"type": "null"},
|
|
153
|
+
"answered_at": {"type": "null"},
|
|
154
|
+
"cancelled_at": {"type": "null"},
|
|
155
|
+
"round_trip_id": {"type": "null"}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"if": {"properties": {"status": {"const": "asked"}}},
|
|
161
|
+
"then": {
|
|
162
|
+
"properties": {
|
|
163
|
+
"asked_at": {"type": "string"},
|
|
164
|
+
"round_trip_id": {"type": "string", "minLength": 1},
|
|
165
|
+
"answered_at": {"type": "null"},
|
|
166
|
+
"cancelled_at": {"type": "null"}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"if": {"properties": {"status": {"const": "answered"}}},
|
|
172
|
+
"then": {
|
|
173
|
+
"properties": {
|
|
174
|
+
"asked_at": {"type": "string"},
|
|
175
|
+
"answered_at": {"type": "string"},
|
|
176
|
+
"cancelled_at": {"type": "null"},
|
|
177
|
+
"round_trip_id": {"type": "string", "minLength": 1}
|
|
178
|
+
},
|
|
179
|
+
"required": ["answer_ref"]
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"if": {"properties": {"status": {"const": "cancelled"}}},
|
|
184
|
+
"then": {"properties": {"cancelled_at": {"type": "string"}, "answered_at": {"type": "null"}}}
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"allOf": [
|
|
190
|
+
{
|
|
191
|
+
"if": {"required": ["owner_wait_tracking"], "properties": {"owner_wait_tracking": {"const": true}}},
|
|
192
|
+
"then": {"required": ["owner_blocked_intervals"]}
|
|
86
193
|
}
|
|
87
|
-
|
|
194
|
+
]
|
|
88
195
|
}
|
|
@@ -3,29 +3,30 @@ name: bearing-lite
|
|
|
3
3
|
description: Bearing Lite Router for Journeys. Not for ordinary work, assigned packets, implementation, or publication.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Router alone writes Journey planning state, owns owner conversation, and owns Expedition sequencing;
|
|
7
7
|
planning nodes return owner questions. Plugin hosts are partial; skill-copy is skills-only.
|
|
8
8
|
|
|
9
9
|
1. Say `Preparing this Journey.` Acquire or resume a generation-bound checkout lease before
|
|
10
10
|
planning or dispatch. A live same-checkout competitor returns `WAITING_ON` with sanitized identity.
|
|
11
11
|
2. Resume the next incomplete stage in the same generation; refresh `candidate_revision`.
|
|
12
12
|
Never replay accepted stages or duplicate dispatch. Invalid leases fail closed.
|
|
13
|
-
3.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
3. Lineup comes only from `~/.agents/bearing-lite/lineups.json` per
|
|
14
|
+
`references/lineups.md`; a missing catalog returns `no_named_profiles`,
|
|
15
|
+
never a generated file; never infer identity values. The Router is observed, not selected.
|
|
16
|
+
The recorded snapshot is authoritative for this Journey. Later edits to
|
|
17
|
+
`~/.agents/bearing-lite/lineups.json` have no effect on it except through an
|
|
17
18
|
explicit owner-confirmed dated visible amendment. Dispatch uses lineup identity from the recorded snapshot.
|
|
18
19
|
4. Run Repository Fit → Set Bearings → Gather Supplies; unresolved material intent blocks Map the Route.
|
|
19
20
|
5. Invoke Map the Route after settled intent. Do not ask for lineup or route
|
|
20
21
|
before it; carry owner-supplied lineup and `review_cadence: at-end` as proposals.
|
|
21
|
-
|
|
22
|
-
6. Enforce `references/review-policy.md`. Show one integrated
|
|
22
|
+
6. Enforce `references/review-policy.md` and `references/owner-stops.md`. Show one integrated
|
|
23
23
|
approval-or-change gate for outcome, design, route, lineup, role states,
|
|
24
|
-
reasoning, cadence, and plan. Record the approved Journey type and snapshot
|
|
24
|
+
reasoning, cadence, and plan. Record the approved Journey type and snapshot.
|
|
25
25
|
Never add a staged lineup or route-review gate.
|
|
26
26
|
Dispatch only after approval.
|
|
27
|
-
7. Crewmate and Explorer may continue in-wave.
|
|
28
|
-
|
|
27
|
+
7. Crewmate and Explorer may continue in-wave. `work_class: light` slices go to the
|
|
28
|
+
Light Implementer; a `reclassify: judgement` return re-dispatches to the Crewmate.
|
|
29
|
+
Use visible wave receipts and update implementation and review once per wave.
|
|
29
30
|
|
|
30
31
|
Return `READY`, `WAITING_ON`, `OWNER_DECISION_REQUIRED`, or `COMPLETE`.
|
|
31
32
|
`max_assurance_rounds` is 1 per declared phase or wave-end, not per Journey;
|
|
@@ -35,12 +36,10 @@ deterministically without another review; failed repair/scope change returns
|
|
|
35
36
|
`OWNER_DECISION_REQUIRED` naming the candidate and count. `COMPLETE` ends Bearing assurance.
|
|
36
37
|
Authorized deployment without reopening review.
|
|
37
38
|
Planning review is a separate pre-dispatch gate; it never consumes implementation
|
|
38
|
-
|
|
39
|
+
assurance.
|
|
39
40
|
Release the lease once: release the checkout lease exactly once on `COMPLETE` or `CANCELLED`;
|
|
40
|
-
recovery needs explicit recorded generation increment.
|
|
41
|
-
Recovery cannot steal a live lease.
|
|
41
|
+
recovery needs explicit recorded generation increment and cannot steal a live lease.
|
|
42
42
|
Selected or required capabilities activate. Unavailability of selected-or-required
|
|
43
43
|
capability is a typed capability gap, not success and not invented behavior.
|
|
44
|
-
|
|
45
|
-
and unrequired absence remains inactive, not a global failure.
|
|
44
|
+
Unselected and unrequired absence remains inactive, not a global failure.
|
|
46
45
|
Never implement, self-assure, select models, or publish.
|
|
@@ -22,6 +22,37 @@ Missing user file means no named profiles. Do not auto-create the live
|
|
|
22
22
|
catalog. An empty `lineups` object is valid and is not an error. A
|
|
23
23
|
malformed unused catalog cannot override explicit inline owner choices.
|
|
24
24
|
|
|
25
|
+
## Configurable roles
|
|
26
|
+
|
|
27
|
+
Catalog entries assign Explorer, Crewmate, Light Implementer, Test Engineer,
|
|
28
|
+
Scribe, Plan Integrator, Systems Modeler, Integration Engineer, Requirements
|
|
29
|
+
Engineer, Park Ranger, and Surveyor. The Light Implementer takes only slices
|
|
30
|
+
whose `work_class` is `light` (criteria in `skills/light-implementer`); it
|
|
31
|
+
has its own primary and fallbacks, usually a lighter and cheaper route. Navigator and Validator are not lineup roles;
|
|
32
|
+
existing plans that still assign them use the compatibility diagnostics and
|
|
33
|
+
treat the assignment as unused. Never fill agent, model, or reasoning values
|
|
34
|
+
on the user's behalf. `review_cadence` is `at-end`.
|
|
35
|
+
|
|
36
|
+
The Router is not a configurable role: it is whatever session is running
|
|
37
|
+
planning. The Journey snapshot records the observed Router identity
|
|
38
|
+
(harness, model, reasoning at that time). A catalog or snapshot entry with
|
|
39
|
+
`role: Router` is ignored with the typed note `router_row_ignored`; it is
|
|
40
|
+
never a deviation.
|
|
41
|
+
|
|
42
|
+
Only verified primary unavailability activates its approved fallback. If
|
|
43
|
+
both are unavailable, return `OWNER_DECISION_REQUIRED`.
|
|
44
|
+
Activation within the frozen ordered fallbacks is a dated execution receipt,
|
|
45
|
+
not a lineup amendment or a new owner approval. Verify the approved activation
|
|
46
|
+
condition and remaining eligible routes before escalating exhaustion. A new
|
|
47
|
+
identity or changed fallback condition requires an owner amendment; follow
|
|
48
|
+
`owner-stops.md` for classification and batching.
|
|
49
|
+
|
|
50
|
+
This catalog is the single lineup source. A legacy
|
|
51
|
+
`~/.agents/bearing-lite/default-role-lineup.md` is never read or created;
|
|
52
|
+
when one is present it is ignored with the typed note
|
|
53
|
+
`legacy_lineup_md_ignored`. A missing catalog returns the typed outcome
|
|
54
|
+
`no_named_profiles` and an inline-selection prompt.
|
|
55
|
+
|
|
25
56
|
## Validity
|
|
26
57
|
|
|
27
58
|
Named selection and save require a valid catalog. Bind
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Owner decisions and continuation
|
|
2
|
+
|
|
3
|
+
One integrated approval covers the approved work and its continuation grant.
|
|
4
|
+
Before asking, identify the unresolved decision, affected slices, evidence,
|
|
5
|
+
and why the current policy or authority does not answer it. Never invent an
|
|
6
|
+
extra role, review gate, approval checkpoint, or scope to resolve uncertainty.
|
|
7
|
+
|
|
8
|
+
| Class | Decision | Router behavior |
|
|
9
|
+
| --- | --- | --- |
|
|
10
|
+
| A | Existing policy | Apply the cited rule and record a dated execution receipt. A real policy conflict is a C boundary decision. |
|
|
11
|
+
| B | Approved fallback | Verify unavailability under the frozen fallback condition; activate the next eligible approved route and record evidence. Changing the lineup or fallback condition is C. |
|
|
12
|
+
| C | Bound, scope, or policy conflict | Ask for the smallest amendment when it blocks ready work. Never reset a spent bound. |
|
|
13
|
+
| D | Continue approved work | Use the effective continuation grant; never ask again while its conditions hold. Missing or expired authority is F. |
|
|
14
|
+
| E | Integrated plan approval | Present the package once for approval or change; execution waits for explicit approval. |
|
|
15
|
+
| F | Authority reserved to the owner | Ask only when the action is not already expressly authorized. Owner holds remain effective until explicitly lifted. |
|
|
16
|
+
|
|
17
|
+
A/B/D continuation requires verified authority, scope, budget, exclusions,
|
|
18
|
+
expiry, and owner-hold checks. Missing evidence is `NEEDS_MORE_EVIDENCE`, not
|
|
19
|
+
permission and not automatically an owner question. Recover discoverable
|
|
20
|
+
evidence first; escalate a real unresolved boundary as C or F. Fallback
|
|
21
|
+
activation is an execution receipt, not an authority amendment. Only the
|
|
22
|
+
owner changes the frozen lineup or grants authority.
|
|
23
|
+
|
|
24
|
+
## Approval and authority
|
|
25
|
+
|
|
26
|
+
Map the Route includes `authority.json.continuation` in the integrated gate:
|
|
27
|
+
`granted`, `owner_decision_id`, named `exclusions`, and `expires_at` (UTC or
|
|
28
|
+
null for event-based expiry). The surrounding envelope retains allowed and
|
|
29
|
+
prohibited actions/paths, role grants, approval receipt, and nonempty
|
|
30
|
+
`expiry_conditions`. Record explicit approval against the exact package;
|
|
31
|
+
the continuation decision ID must occur in `granting_owner_decisions`.
|
|
32
|
+
No grant is inferred from silence, a lineup selection, or passing checks.
|
|
33
|
+
|
|
34
|
+
Always exclude scope change, budget exhaustion, owner holds, and owner-only
|
|
35
|
+
actions from the continuation grant. A separate explicit action grant can
|
|
36
|
+
authorize an otherwise owner-only action; continuation cannot create it.
|
|
37
|
+
Revocation, supersession, expiry, or changed authority invalidates the grant.
|
|
38
|
+
An older envelope without continuation remains valid historical data but
|
|
39
|
+
provides no standing continuation grant. Do not manufacture a retroactive one.
|
|
40
|
+
|
|
41
|
+
For first approval show outcome, scope/exclusions, role responsibilities,
|
|
42
|
+
route, bounds, risks, open decisions and proof coverage in a concise summary.
|
|
43
|
+
For revisions show changed requirements, design, proof cases, slices,
|
|
44
|
+
lineup, authority and bounds against the last owner-reviewed package, citing
|
|
45
|
+
both revisions/digests. Explain invalidated approvals and unresolved decisions.
|
|
46
|
+
Keep the complete frozen `review.html` accessible in both cases; a diff or
|
|
47
|
+
freeze PASS is neither approval nor proof of semantic completeness. An
|
|
48
|
+
unchanged package does not need reapproval. A changed package returns to the
|
|
49
|
+
same gate, never an extra gate.
|
|
50
|
+
|
|
51
|
+
## Queue and continue
|
|
52
|
+
|
|
53
|
+
Keep pending questions in the existing `journey.json.open_decisions` array
|
|
54
|
+
as typed `record_type: owner_stop` records. Preserve stable IDs when moving
|
|
55
|
+
answered records to `decisions`; append owner answers to normal history.
|
|
56
|
+
Automatic resolutions and unsolicited owner directions remain normal dated
|
|
57
|
+
receipts, not fabricated questions. Required fields are defined by
|
|
58
|
+
`schemas/journey.schema.json` and checked by the metrics helper.
|
|
59
|
+
|
|
60
|
+
Queue nonblocking questions until wave end and present one batch with the
|
|
61
|
+
wave receipt. Queue nonblocking owner-only closeout actions until Journey
|
|
62
|
+
end. Required credentials, publication prerequisites, or other owner-only
|
|
63
|
+
dependencies surface immediately when they block ready work. Do not defer
|
|
64
|
+
safety/integrity intervention or an explicit owner stop. Each actual
|
|
65
|
+
presentation has a stable `round_trip_id`; questions in the same batch share
|
|
66
|
+
that ID and the exact same presentation timestamp.
|
|
67
|
+
Record `asked_at` when presented, not when drafted or queued; `answered_at`
|
|
68
|
+
when the owner answers. Cancellation uses `cancelled_at`, never a fabricated
|
|
69
|
+
answer. Times are UTC with a `Z` suffix and either whole seconds or exactly
|
|
70
|
+
three fractional digits (milliseconds); normalize host timestamps before
|
|
71
|
+
recording. Re-presenting an unanswered question keeps its ID and
|
|
72
|
+
original asked time; it is not another distinct question.
|
|
73
|
+
|
|
74
|
+
While waiting, walk the approved slice graph. Dispatch only READY slices
|
|
75
|
+
with satisfied dependencies, active authority, valid lease, available route,
|
|
76
|
+
and verified independence from the question and other running slices.
|
|
77
|
+
Disjoint writes alone do not prove independence: check shared runtime,
|
|
78
|
+
resources, integration order, and read/write dependencies. `parallel_safe`
|
|
79
|
+
is evidence to inspect, not permission. Respect host concurrency limits and
|
|
80
|
+
never dispatch completed or already-running work again. Keep dependent work
|
|
81
|
+
pending. Owner holds apply to their stated scope, including the whole Journey
|
|
82
|
+
when so directed; they cannot be bypassed by calling work independent.
|
|
83
|
+
|
|
84
|
+
## Deterministic checks and measurement
|
|
85
|
+
|
|
86
|
+
Before a proposed stop, run `hooks/transition-order.cjs` with
|
|
87
|
+
`action_kind: owner_stop_check` and `owner_stop` containing `class`,
|
|
88
|
+
`blocking`, `evidence_ref`, `resolution_ref`, `authority`, `checked_at`,
|
|
89
|
+
and `checks`. Checks are explicit booleans: `scope`, `budget`, `exclusions`,
|
|
90
|
+
`expiry`, `owner_hold`, plus `policy` for A or `fallback` for B. Router must
|
|
91
|
+
verify them against the actual frozen inputs; the helper does not authenticate
|
|
92
|
+
receipts or interpret arbitrary path globs or expiry prose. C/E/F need the
|
|
93
|
+
class, evidence reference and blocking flag; return ASK or QUEUE. A/B/D
|
|
94
|
+
return CONTINUE only with the grant and all required checks. This is a
|
|
95
|
+
procedural transition adapter, not a new registered host event, permission
|
|
96
|
+
grant, scheduler, or security boundary. Skills-only hosts execute the same
|
|
97
|
+
checklist and disclose unavailable deterministic checks.
|
|
98
|
+
|
|
99
|
+
New Journeys set `owner_wait_tracking: true` and initialize
|
|
100
|
+
`owner_blocked_intervals: []`. Record intervals only while no authorized ready
|
|
101
|
+
work can progress specifically because of unanswered owner questions. Each
|
|
102
|
+
interval lists their `decision_ids`, `started_at`, and nullable `ended_at`.
|
|
103
|
+
End the interval as soon as work can progress, even if some questions remain
|
|
104
|
+
unanswered. Do not treat every dependency wait, off-hours gap, or commit gap as
|
|
105
|
+
owner-blocked time. Never backfill unknown times. Legacy Journeys without
|
|
106
|
+
tracking report `unavailable`, not zero waiting.
|
|
107
|
+
|
|
108
|
+
Run `node <plugin root>/hooks/owner-stops.cjs <journey.json> <as-of-UTC>` at
|
|
109
|
+
wave receipts and final closeout. It validates typed records, rejects duplicate
|
|
110
|
+
IDs or inconsistent times, counts `decisions_asked`, distinct approval
|
|
111
|
+
`round_trips`, pending/queued/cancelled questions and A–F counts, and reports
|
|
112
|
+
`response_ms` (sum of completed response intervals), `pending_response_ms`,
|
|
113
|
+
`response_window_ms` (union of asked-to-answer/cancellation/as-of intervals),
|
|
114
|
+
and `blocked_ms` (union of the explicitly recorded fully blocked intervals).
|
|
115
|
+
Overlapping questions are not additive wall-clock wait. Local records only:
|
|
116
|
+
no telemetry or network transmission. Closeout renders these metrics and
|
|
117
|
+
coverage limitations; it must not claim measured savings from legacy gaps.
|
|
118
|
+
|
|
119
|
+
Operational target after settled scope: zero unnecessary stops per wave;
|
|
120
|
+
one integrated approval batch and one closeout batch per unchanged Journey
|
|
121
|
+
when closeout needs owner authority. Exceptions are recorded, never suppressed
|
|
122
|
+
to hit a quota. Forecast savings only from verified classified observations.
|
|
@@ -35,3 +35,8 @@ confirmation or rereview returns `OWNER_AMENDMENT_REQUIRED`.
|
|
|
35
35
|
This gate reviews planning artifacts before dispatch. It never invokes a
|
|
36
36
|
reviewer. Implementation assurance remains governed separately by
|
|
37
37
|
`max_assurance_rounds` and task `required_assurance` / `assurance_rounds`.
|
|
38
|
+
|
|
39
|
+
Owner presentation and continuation follow `owner-stops.md`: one integrated
|
|
40
|
+
gate includes the bounded grant, first-approval summary or revision diff, open
|
|
41
|
+
decisions, and access to the full frozen package. This adds no reviewer,
|
|
42
|
+
review round, or approval checkpoint and does not alter the bounds above.
|
|
@@ -40,7 +40,10 @@ the integrated owner approval; do not offer `per-slice` or `per-round`.
|
|
|
40
40
|
`journey` stays a proposal until the mapped implementation graph exists and the
|
|
41
41
|
integrated owner review approves it. `lineup_snapshot` is authoritative after
|
|
42
42
|
that approval. Later
|
|
43
|
-
edits to `~/.agents/bearing-lite/
|
|
43
|
+
edits to `~/.agents/bearing-lite/lineups.json` have no effect. The `Router`
|
|
44
|
+
row of the snapshot is the observed identity of the session that ran planning
|
|
45
|
+
(harness, model, reasoning at that time); it is never a catalog selection and
|
|
46
|
+
never a deviation.
|
|
44
47
|
Replace it only through an explicit owner-confirmed dated visible amendment.
|
|
45
48
|
Record the amendment date beside the replacement values. Dispatch identities
|
|
46
49
|
come from this snapshot, not from the current global defaults file.
|
package/skills/explorer/SKILL.md
CHANGED
|
@@ -13,7 +13,6 @@ description: >
|
|
|
13
13
|
Wave authority. Coordinates more and implements less than Crewmate.
|
|
14
14
|
|
|
15
15
|
## Inputs and match
|
|
16
|
-
|
|
17
16
|
- **Inputs:** approved baseline, wave objective, packet graph, dependencies,
|
|
18
17
|
scope, authority, lineup from the recorded Journey snapshot, visible wave
|
|
19
18
|
receipt, acceptance, and compact return schema.
|
|
@@ -21,7 +20,6 @@ Wave authority. Coordinates more and implements less than Crewmate.
|
|
|
21
20
|
- **Non-match:** one bounded packet needs no orchestration, multiple waves conflict, or assurance alone is requested.
|
|
22
21
|
|
|
23
22
|
## Algorithm
|
|
24
|
-
|
|
25
23
|
1. Continue this wave when identity, authority, route, and generation are
|
|
26
24
|
unchanged; otherwise start fresh. Verify wave readiness, packet boundaries,
|
|
27
25
|
dependencies, and approved identities from the recorded Journey snapshot,
|
|
@@ -42,6 +40,9 @@ Wave authority. Coordinates more and implements less than Crewmate.
|
|
|
42
40
|
4. Inspect compact returns against write sets and acceptance; integrate
|
|
43
41
|
evidence without implementing. Update `implementation.json` and `review.html`
|
|
44
42
|
once per wave, plus owner-decision or blocker changes.
|
|
43
|
+
Apply `../bearing-lite/references/owner-stops.md` for queued questions,
|
|
44
|
+
blocking prerequisites, proven-independent progress and owner holds; never
|
|
45
|
+
add unapproved roles or gates.
|
|
45
46
|
5. Dispatch declared assurance automatically at wave-end on this wave's
|
|
46
47
|
integrated candidate. Deterministic checks always run. Honor
|
|
47
48
|
`max_assurance_rounds` of 1 per declared phase or wave from visible
|
|
@@ -53,7 +54,6 @@ Wave authority. Coordinates more and implements less than Crewmate.
|
|
|
53
54
|
`COMPLETE`, deployment checks do not reopen assurance.
|
|
54
55
|
|
|
55
56
|
## Return and recovery
|
|
56
|
-
|
|
57
57
|
Return `READY`, `REROUTED`, `WAITING_ON`, or `OWNER_DECISION_REQUIRED` with
|
|
58
58
|
verdict, candidate_ref, changed_paths, tests, findings, and blocker. Reroute only from new evidence; three attempts per packet.
|
|
59
59
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: light-implementer
|
|
3
|
+
description: >
|
|
4
|
+
Execute one approved light slice exactly as its packet states, verified by
|
|
5
|
+
the packet's deterministic command. Use for Light Implementer, light,
|
|
6
|
+
mechanical, scaffold, bind, assemble, regenerate, or runbook packets. Do
|
|
7
|
+
not use for judgement work, authoring, repair, review, or any decision.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Light Implementer
|
|
11
|
+
|
|
12
|
+
The cheapest route in the ladder. Inputs fully determine the output, a
|
|
13
|
+
command decides pass or fail, and nothing is decided in-session.
|
|
14
|
+
|
|
15
|
+
## Inputs and match
|
|
16
|
+
|
|
17
|
+
- **Inputs:** the Crewmate packet contract (baseline, objective, exact write
|
|
18
|
+
set, authority, commands, stop rule, return schema, visible wave receipt,
|
|
19
|
+
lineup identity from the recorded snapshot) for a slice whose
|
|
20
|
+
`work_class` is `light`.
|
|
21
|
+
- **Match:** every criterion holds:
|
|
22
|
+
1. Inputs are all named and present: paths, digests, UIDs, a runbook.
|
|
23
|
+
Nothing is discovered or interpreted.
|
|
24
|
+
2. The transformation is mechanical: copy, assemble, format, fill a
|
|
25
|
+
template, append rows, run a documented command, record its output.
|
|
26
|
+
3. The packet names the command whose exit status verifies the output.
|
|
27
|
+
4. No decision: no value chosen, ambiguity resolved, candidate selected,
|
|
28
|
+
requirement, contract, rationale, or verification case written.
|
|
29
|
+
5. Bounded blast radius: one write set, no product source, no host or
|
|
30
|
+
runtime mutation beyond a documented read-only or prepare call.
|
|
31
|
+
- **Non-match:** a `judgement` slice; a packet whose LOOP says repair your
|
|
32
|
+
own findings; an `[OPEN]` value; a register conflict to weigh.
|
|
33
|
+
|
|
34
|
+
## Algorithm
|
|
35
|
+
|
|
36
|
+
1. Revalidate the checkout lease exactly as the Crewmate does. On mismatch
|
|
37
|
+
return `WAITING_ON` without writing.
|
|
38
|
+
2. Do exactly what the packet states, inside the write set, and nothing else.
|
|
39
|
+
3. Run the packet's verification command at the candidate revision. Record
|
|
40
|
+
exit status, output digest, and changed paths.
|
|
41
|
+
4. If any step needs a choice the packet did not make, stop before writing
|
|
42
|
+
further and return `NEEDS_MORE_EVIDENCE` with `reclassify: judgement`
|
|
43
|
+
and the exact question. Never guess, never escalate silently.
|
|
44
|
+
5. There is no in-wave repair loop. A failing command returns the typed
|
|
45
|
+
failure with its output; the Router decides.
|
|
46
|
+
|
|
47
|
+
## Return and recovery
|
|
48
|
+
|
|
49
|
+
Return `CANDIDATE_READY`, `NEEDS_MORE_EVIDENCE`, `WAITING_ON`, or
|
|
50
|
+
`OWNER_DECISION_REQUIRED` with verdict, candidate_ref, changed_paths, tests,
|
|
51
|
+
findings, blocker, and `reclassify` when set.
|
|
52
|
+
|
|
53
|
+
Never author, repair, self-certify, expand the write set, or publish.
|
|
@@ -15,7 +15,7 @@ Fresh planning node. The Router writes Journey state and owns owner conversation
|
|
|
15
15
|
|
|
16
16
|
- **Match:** material intent is settled and any technical-plan, design, SEIT,
|
|
17
17
|
implementation graph, or review HTML is missing.
|
|
18
|
-
- **Inputs:** confirmed decisions,
|
|
18
|
+
- **Inputs:** confirmed decisions, workspace.md and evidence, artifact status,
|
|
19
19
|
requirements register, repository rules, proposed owner-supplied lineup and
|
|
20
20
|
`review_cadence: at-end`, plus the return schema.
|
|
21
21
|
- **Non-match:** unresolved material scope, behavior, authority, risk, or
|
|
@@ -38,14 +38,16 @@ Fresh planning node. The Router writes Journey state and owns owner conversation
|
|
|
38
38
|
`review_cadence: at-end`. Bind the planning-review slots to owner-supplied
|
|
39
39
|
primary and ordered fallback route references under one candidate ref,
|
|
40
40
|
revision, and digest. Use supplied identities; never invent them.
|
|
41
|
-
4. After those stable source inputs,
|
|
41
|
+
4. After those stable source inputs, freeze: `node <plugin root>/hooks/plan-package.cjs <plan dir>`
|
|
42
|
+
must PASS; any finding halts. Then generate `implementation.json` and the
|
|
42
43
|
self-contained offline `review.html` together. Each includes the proposed
|
|
43
44
|
route, lineup, role states, reasoning, cadence, traceability, waves,
|
|
44
45
|
recovery, approval boundaries, and register references versus Journey-local
|
|
45
46
|
requirements. Two `review.html` states: `planning-review` and `final-closeout`.
|
|
46
47
|
5. Give every slice stable requirement/design/SEIT IDs, dependencies, exact
|
|
47
48
|
write set, authority, role, session rule, evidence, recovery, and stop rule.
|
|
48
|
-
6.
|
|
49
|
+
6. Follow `../bearing-lite/references/owner-stops.md`.
|
|
50
|
+
Open and verify HTML, then request exactly one integrated owner review
|
|
49
51
|
of outcome, design, route, lineup, cadence, and plan. Dispatch remains
|
|
50
52
|
prohibited until approval. An owner change regenerates affected artifacts,
|
|
51
53
|
then returns to this same gate; never insert a lineup or route-review pause.
|
|
@@ -56,6 +56,13 @@ optional derived export and is never authority.
|
|
|
56
56
|
Journey-local, so a reviewer can tell which artifact owns each statement.
|
|
57
57
|
6. `design.md` is unaffected: it records how the work is built, which no
|
|
58
58
|
requirements register covers.
|
|
59
|
+
7. A specification-authoring Journey carries its requirement register (UID,
|
|
60
|
+
statement, rationale, verification method, allocation) as a planning
|
|
61
|
+
artifact: a draft `.sdoc` path (Markdown sections are not lint-checkable),
|
|
62
|
+
recorded as `implementation.json` `journey_settings.journey_type:
|
|
63
|
+
specification` plus `journey_settings.requirement_register`. The freeze
|
|
64
|
+
fails without an existing register; the Requirements Engineer gates it
|
|
65
|
+
before the integrated owner review; no Expedition wave re-gates it.
|
|
59
66
|
|
|
60
67
|
## Published standards
|
|
61
68
|
|
|
@@ -82,7 +89,9 @@ optional derived export and is never authority.
|
|
|
82
89
|
case | Negative/failure case | Command/procedure ID | Evidence.
|
|
83
90
|
5. Every row carries exactly one SEIT row ID, requirement ID, design ID, and
|
|
84
91
|
command ID, and names an observable failure.
|
|
85
|
-
6.
|
|
92
|
+
6. For a specification wave, each case-authoring proof row cites the planning
|
|
93
|
+
register gate receipt.
|
|
94
|
+
7. Bind a stable decision-baseline projection of confirmed decision identities
|
|
86
95
|
and open-item statuses rather than the whole-file `journey.json` digest.
|
|
87
96
|
|
|
88
97
|
## Implementation rules
|
|
@@ -94,18 +103,26 @@ optional derived export and is never authority.
|
|
|
94
103
|
owner-selected model route, reasoning, review path, write set, command IDs,
|
|
95
104
|
stop condition, human decision, and `authority_id`. Goals are at most 512
|
|
96
105
|
characters. Slice actions and write sets are subsets of current authority.
|
|
97
|
-
3.
|
|
106
|
+
3. `work_class` is `light` or `judgement` (default). A `light` slice names
|
|
107
|
+
the Light Implementer role, at least one command id, and a
|
|
108
|
+
`work_class_reason`; see `skills/light-implementer` for the criteria.
|
|
109
|
+
4. For `journey_type: specification`, a specification-authoring Expedition
|
|
110
|
+
wave defaults to scaffold → author from the gated register → Test Engineer
|
|
111
|
+
verification cases → bind to the host → readback of the bound revision and
|
|
112
|
+
digest from the host → Park Ranger with both named in the review
|
|
113
|
+
request → owner decision. A deviation is a planning-review finding.
|
|
114
|
+
5. Optional fields are Shared interfaces (`path#Symbol`), Integration
|
|
98
115
|
boundary, Published standard (`doc#clause`) when applicable, SysML and
|
|
99
116
|
integration fields when selected, and Parallel safe (`yes` or `no` plus
|
|
100
117
|
reason).
|
|
101
|
-
|
|
118
|
+
6. Write sets use one line: `Write only `path``. Paths are bounded, normalized,
|
|
102
119
|
repository-relative literals. Put prohibitions in prose, not the write set.
|
|
103
|
-
|
|
120
|
+
7. Multi-slice plans declare consecutive `Wave <n>: <ids>` lines. Every slice
|
|
104
121
|
belongs to one wave. Dependencies use acyclic `S1 --> S2` arrows.
|
|
105
|
-
|
|
122
|
+
8. Ordered integration steps, resources, ownership, and rollback live here.
|
|
106
123
|
Owner-configured reviewer count `n`, repair bound `k`, and confirmation
|
|
107
124
|
count `c` are explicit fields with no assistant default integers.
|
|
108
|
-
|
|
125
|
+
9. Plans may contain at most 128 slices, manifests, write paths, and commands.
|
|
109
126
|
Aim for at most 500 estimated tokens per slice plus manifest; split larger
|
|
110
127
|
packets when practical.
|
|
111
128
|
|