@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.
@@ -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": { "type": "string", "minLength": 1 },
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": { "type": "string", "minLength": 1 },
25
- "title": { "type": "string", "minLength": 1 },
26
- "status": { "type": "string", "minLength": 1 },
27
- "planning_repository": { "type": "string", "minLength": 1 }
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": { "type": "string", "minLength": 1 },
46
- "controller": { "type": "string", "minLength": 1 },
47
- "repository": { "type": "string", "minLength": 1 },
48
- "checkout": { "type": "string", "minLength": 1 },
49
- "branch": { "type": "string", "minLength": 1 },
50
- "candidate_revision": { "type": "string", "minLength": 1 },
51
- "acquired_at": { "type": "string", "minLength": 1 },
52
- "generation": { "type": "integer", "minimum": 1 },
53
- "state": { "enum": ["active", "released"] }
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": { "type": "array", "items": { "type": "object", "additionalProperties": true } },
62
- "authority_events": { "type": "array", "items": { "type": "object", "additionalProperties": true } }
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": { "type": "object", "additionalProperties": true }
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": { "type": "object", "additionalProperties": true }
78
+ "items": {"type": "object", "additionalProperties": true}
74
79
  },
75
80
  "open_decisions": {
76
81
  "type": "array",
77
- "items": { "type": "object", "additionalProperties": true }
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": { "type": "object", "additionalProperties": true }
82
- },
83
- "lineup_selection": {
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
- The Router alone writes Journey planning state, owns owner conversation, and owns Expedition sequencing;
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. If `~/.agents/bearing-lite/default-role-lineup.md` is absent, create a
14
- proposed copy; never infer identity values. The recorded snapshot is authoritative for this Journey.
15
- Later edits to
16
- `~/.agents/bearing-lite/default-role-lineup.md` have no effect on it except through an
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
- Follow `references/lineups.md` for catalog selection and save.
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; regenerate changes.
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
- Use the visible wave receipt and update implementation and review once per wave.
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
- `required_assurance`, `assurance_rounds`, or `max_assurance_rounds`.
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
- Selected-only missing and required-only missing are typed gaps. Unselected
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/default-role-lineup.md` have no effect.
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.
@@ -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, repository map and evidence, artifact status,
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, generate `implementation.json` and the
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. Open and verify final HTML, then request exactly one integrated owner review
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. Bind a stable decision-baseline projection of confirmed decision identities
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. Optional fields are Shared interfaces (`path#Symbol`), Integration
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
- 4. Write sets use one line: `Write only `path``. Paths are bounded, normalized,
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
- 5. Multi-slice plans declare consecutive `Wave <n>: <ids>` lines. Every slice
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
- 6. Ordered integration steps, resources, ownership, and rollback live here.
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
- 7. Plans may contain at most 128 slices, manifests, write paths, and commands.
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