@alphazede/bearing-lite 0.2.1 → 1.0.0

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.
Files changed (61) hide show
  1. package/CONTRIBUTING.md +11 -6
  2. package/README.md +224 -121
  3. package/com.github.copilot/hooks/hooks.json +33 -0
  4. package/hooks/assurance-budget.cjs +33 -11
  5. package/hooks/closeout.cjs +17 -0
  6. package/hooks/com.anthropic.claude-code/mapping.md +35 -16
  7. package/hooks/owner-stops.cjs +154 -0
  8. package/hooks/plan-package.cjs +5 -4
  9. package/hooks/policy.cjs +10 -4
  10. package/hooks/profiles.cjs +119 -0
  11. package/hooks/te-host.cjs +40 -5
  12. package/hooks/transition-order.cjs +24 -4
  13. package/hooks/verification.cjs +358 -0
  14. package/package.json +6 -3
  15. package/plugin.json +2 -34
  16. package/profiles.json +1 -0
  17. package/schemas/authority.schema.json +55 -34
  18. package/schemas/implementation.schema.json +204 -5
  19. package/schemas/journey.schema.json +142 -48
  20. package/schemas/profiles.schema.json +359 -0
  21. package/schemas/verification.schema.json +126 -0
  22. package/skills/{set-bearings → architectural-alignment}/SKILL.md +17 -13
  23. package/skills/{set-bearings → architectural-alignment}/templates/workspace.md +1 -1
  24. package/skills/bearing-lite/SKILL.md +23 -23
  25. package/skills/bearing-lite/references/assurance-policy.md +32 -16
  26. package/skills/bearing-lite/references/lineups.md +7 -105
  27. package/skills/bearing-lite/references/owner-stops.md +122 -0
  28. package/skills/bearing-lite/references/peer-synthesis.md +11 -12
  29. package/skills/bearing-lite/references/profiles.md +149 -0
  30. package/skills/bearing-lite/references/resume.md +30 -0
  31. package/skills/bearing-lite/references/review-policy.md +8 -3
  32. package/skills/bearing-lite/references/role-routing.mmd +14 -14
  33. package/skills/bearing-lite/references/task-state.md +10 -10
  34. package/skills/bearing-lite/references/task-state.mmd +2 -2
  35. package/skills/bearing-lite/references/verification.md +52 -0
  36. package/skills/bearing-lite/templates/task.md +29 -28
  37. package/skills/{explorer → coordinator}/SKILL.md +19 -19
  38. package/skills/{crewmate → implementer}/SKILL.md +17 -15
  39. package/skills/{repository-fit → intake}/SKILL.md +10 -9
  40. package/skills/integration-engineer/SKILL.md +17 -12
  41. package/skills/light-implementer/SKILL.md +6 -5
  42. package/skills/onboard-bearing/SKILL.md +46 -0
  43. package/skills/plan-integrator/SKILL.md +14 -14
  44. package/skills/planning-and-design/SKILL.md +60 -0
  45. package/skills/{map-the-route → planning-and-design}/references/artifact-grammar.md +29 -27
  46. package/skills/prompt/SKILL.md +245 -0
  47. package/skills/requirements-engineer/SKILL.md +11 -11
  48. package/skills/{park-ranger → reviewer}/SKILL.md +16 -13
  49. package/skills/{gather-supplies → scope-definition}/SKILL.md +13 -13
  50. package/skills/scribe/SKILL.md +12 -8
  51. package/skills/systems-modeler/SKILL.md +5 -3
  52. package/skills/test-engineer/SKILL.md +16 -13
  53. package/templates/dod-manifest-v1.html +648 -0
  54. package/tools/render-dod-manifest.mjs +1743 -0
  55. package/lineups.json +0 -1
  56. package/schemas/lineups.schema.json +0 -145
  57. package/skills/map-the-route/SKILL.md +0 -59
  58. package/skills/navigator/SKILL.md +0 -36
  59. package/skills/surveyor/SKILL.md +0 -48
  60. package/skills/validator/SKILL.md +0 -37
  61. package/skills/validator/references/grading-rubric.md +0 -40
@@ -1,21 +1,28 @@
1
1
  # Assurance budget policy
2
2
 
3
- Decision source: `OWNER-EMV-REVIEW-CADENCE-UNIFICATION-001` through
4
- `ROUTER-EMV-CADENCE-IMPLEMENTATION-001`.
3
+ Decision source: `DEC-BDL-007`, `DEC-BDL-030`, `DEC-BDL-047`, `DES-BDL-007`.
5
4
 
6
- The implementation assurance budget is scoped to each **declared phase or
7
- wave**, not to the Journey and not to a slice. Automatic review is dispatched
8
- at the end of each declared phase or wave. `hooks/assurance-budget.cjs` is the
9
- exact runtime mirror of the block below; the block is authoritative.
5
+ Cadence values are `slice`, `phase`, or `lifecycle`. Defaults are `phase`
6
+ for Test Engineer assurance, `phase` for Reviewer, and `lifecycle` for
7
+ Integration Engineer execution. A declared boundary runs each enabled
8
+ session once, allows one aggregated repair, then uses deterministic closure
9
+ without automatic rereview. `hooks/assurance-budget.cjs` is the exact
10
+ runtime mirror of the block below; the block is authoritative.
10
11
 
11
12
  ```json
12
13
  {
13
- "budget_scope": "per_declared_phase_or_wave",
14
+ "budget_scope": "per_declared_cadence_unit",
15
+ "cadence_values": ["slice", "phase", "lifecycle"],
16
+ "default_cadence": {
17
+ "test_engineer.assurance": "phase",
18
+ "reviewer": "phase",
19
+ "integration_engineer.execution": "lifecycle"
20
+ },
14
21
  "review_rounds": 1,
15
22
  "aggregated_repairs_max": 1,
16
23
  "post_repair_gate": "deterministic_PASS",
17
24
  "automatic_phase_or_wave_end_review": "required",
18
- "automatic_per_slice_review": "prohibited",
25
+ "automatic_per_slice_review": "cadence_gated",
19
26
  "post_repair_rereview": "prohibited",
20
27
  "automatic_rereview_of_same_unit": "prohibited",
21
28
  "budget_reset_on_candidate_change": false,
@@ -31,21 +38,29 @@ exact runtime mirror of the block below; the block is authoritative.
31
38
 
32
39
  ## Unit identity
33
40
 
34
- Budget identity is `journey + unit_kind + unit_id`. The unit id is resolved
35
- from the frozen declaration: `waves[].id`, else `phases[].phaseId`, else the
36
- single `direct` sentinel when neither is declared. A unit id absent from the
41
+ Budget identity is `lifecycle + unit_kind + unit_id`. The unit id is resolved
42
+ from the frozen declaration according to the requested cadence unit kind:
43
+ `slices[].id` for slice, `waves[].id` else `phases[].phaseId` for phase or
44
+ wave, `journey_settings.lifecycle_id` for lifecycle, else the single `direct`
45
+ sentinel when neither waves nor phases are declared. A unit id absent from the
37
46
  frozen declaration fails closed as `undeclared_review_unit`; renaming a
38
47
  declared unit's display name never mints a fresh budget.
39
48
 
49
+ Slice-scope review is allowed only when the frozen cadence for that session
50
+ is `slice`. Default `phase` cadence rejects automatic per-slice review.
51
+ Lifecycle-end wording where `phase` cadence applies is a contract failure.
52
+
40
53
  The budget key
41
54
  records no route, provider, model, harness, account, or agent identity.
42
- Candidate revision, lease generation, assigned role, session, and
43
- slice id are likewise never key components, and none of them lowers a spent
44
- count.
55
+ Candidate revision, lease generation, assigned role, session, and a non-unit
56
+ `slice_id` field are likewise never key components, and none of them lowers a
57
+ spent count. A declared slice or lifecycle unit retains its spent budget
58
+ under the same `unit_kind` + `unit_id` key.
45
59
 
46
60
  ## Spending the budget
47
61
 
48
- - One review round per declared phase or wave. A second round on the same unit
62
+ - One review round per declared cadence unit (slice, phase or wave, or
63
+ lifecycle). A second round on the same unit
49
64
  halts with `assurance_round_limit`.
50
65
  - A repairable verdict permits at most one aggregate repair. A second repair
51
66
  halts with `assurance_repair_limit`.
@@ -56,7 +71,8 @@ count.
56
71
  `review_after_repair` both require an owner amendment.
57
72
  - A transport receipt of `WAITING_ON` or `UNAVAILABLE` is not a spent round; it
58
73
  returns `NEEDS_MORE_EVIDENCE`.
59
- - The next distinct declared phase or wave carries its own budget.
74
+ - The next distinct declared phase or wave carries its own budget. Declared
75
+ slice and lifecycle units likewise retain their spent counts.
60
76
 
61
77
  ## Planning review stays separate
62
78
 
@@ -1,107 +1,9 @@
1
- # Named lineup catalog
1
+ # Obsolete lineup catalog
2
2
 
3
- Candidate procedure for the user-owned JSON catalog. It is not a staged
4
- lineup or route-review gate. Selection is not an authority grant.
3
+ `lineups.json` is not live Bearing configuration. Use
4
+ `references/profiles.md` and `~/.agents/bearing-lite/profiles.json`.
5
5
 
6
- ## Location
7
-
8
- The live user catalog is exactly one file:
9
-
10
- `<absolute home>/.agents/bearing-lite/lineups.json`
11
-
12
- Resolve `<absolute home>` as a nonempty absolute `HOME`, else a nonempty
13
- absolute `USERPROFILE` on its platform; otherwise fail closed with
14
- `home_unresolved`. Do not use cwd, the package root, XDG, a relative
15
- `lineups.json`, or a second search root.
16
-
17
- The packaged catalog is package-root `lineups.json`. Never read it as user
18
- data. Never write the packaged catalog, including resolved symlink aliases
19
- of that file.
20
-
21
- Missing user file means no named profiles. Do not auto-create the live
22
- catalog. An empty `lineups` object is valid and is not an error. A
23
- malformed unused catalog cannot override explicit inline owner choices.
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
-
45
- This catalog is the single lineup source. A legacy
46
- `~/.agents/bearing-lite/default-role-lineup.md` is never read or created;
47
- when one is present it is ignored with the typed note
48
- `legacy_lineup_md_ignored`. A missing catalog returns the typed outcome
49
- `no_named_profiles` and an inline-selection prompt.
50
-
51
- ## Validity
52
-
53
- Named selection and save require a valid catalog. Bind
54
- `schemas/lineups.schema.json` Draft 2020-12 validation before named
55
- selection or save. That schema is the validation document, not a second
56
- search root for user data. Do not add a runtime catalog library.
57
-
58
- On load and on save, inspect raw object members first. Reject duplicate
59
- raw JSON keys; do not silently collapse. Then parse and apply Draft 2020-12
60
- validation against package-root `schemas/lineups.schema.json`. Fail closed
61
- as follows even when the schema cannot express the check:
62
-
63
- - Reject duplicate role assignments within each phase.
64
- - Reject ASCII case-fold collisions on both load and save. Do not trim
65
- or case-fold names.
66
- - Defaults keys must resolve exactly. Unresolved defaults fail closed.
67
- - Invalid structure or name fails closed on both load and save.
68
-
69
- Refuse named selection or save on any of those failures. Do not invent a
70
- fallback profile and do not read packaged bytes as user data.
71
-
72
- ## Selection
73
-
74
- Explicit inline owner choices require no catalog lookup and no extra
75
- confirmation. Consume them as already explicit.
76
-
77
- A named choice needs a valid catalog and an exact selected key. Do not trim
78
- or case-fold the name. Independent planning and implementation selections
79
- remain separate; the owner may pick two names, one name twice, or inline on
80
- either side.
81
-
82
- Optional user `defaults.planning` and `defaults.implementation` are
83
- recommendations requiring selection or confirmation. They are never a silent
84
- grant and not an authority grant. Do not apply them without that
85
- confirmation. Do not invent a packaged default.
86
-
87
- Copy selected entries into the Journey snapshot as a frozen snapshot copy.
88
- Preserve fallback array order. Bind a SHA-256 configuration digest of that
89
- frozen snapshot copy. Digest that copy only: selected entries with fallback
90
- order and selection sources. Exclude N/K/C, review cadence, route, and
91
- authority. Canonical JSON: UTF-8, sort_keys, compact separators.
92
- Later catalog edits do not mutate the frozen snapshot copy or its digest.
93
-
94
- ## Save
95
-
96
- Save only on explicit owner request. Never save this Journey as a side
97
- effect of selection, freeze, or routing.
98
-
99
- Create versus replace: if replace is already explicit, do not ask again;
100
- otherwise preview the selected-entry replacement and confirm. Create must
101
- not overwrite an existing exact key. Replace updates only that key.
102
-
103
- Preserve unrelated valid keys and defaults. Refuse changed-input overwrite.
104
- Use a safe atomic update (sibling temp file, then rename).
105
-
106
- Do not write N/K/C, review cadence, route, or authority into catalog
107
- entries.
6
+ Runtime never searches, merges, prefers, or falls back to `lineups.json`.
7
+ A leftover user lineup returns `MIGRATION_REQUIRED` until onboard-bearing
8
+ migrates it. Packaged `lineups.json` and `default-role-lineup.md` are
9
+ removed by the S1L mechanical migration. Selection is not an authority grant.
@@ -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 | Orchestrator 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 profile 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 profile or grants authority.
23
+
24
+ ## Approval and authority
25
+
26
+ Planning and Design 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 profile 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
+ profile, 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 DoD Manifest 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 Lifecycle
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 Lifecycle
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. Orchestrator 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 Lifecycles 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 Lifecycles 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 Lifecycle
121
+ when closeout needs owner authority. Exceptions are recorded, never suppressed
122
+ to hit a quota. Forecast savings only from verified classified observations.
@@ -6,18 +6,17 @@ copy peer text, runtimes, state stores, or authority assumptions.
6
6
 
7
7
  | Bearing skill | Strongest compared peer | Behavior retained |
8
8
  | --- | --- | --- |
9
- | Bearing Router | [LangChain subagents](https://docs.langchain.com/oss/python/langchain/multi-agent/subagents) and [handoffs](https://docs.langchain.com/oss/python/langchain/multi-agent/handoffs) | central conversational supervisor, bounded handoff, fresh context |
10
- | Repository Fit | [Kiro steering](https://kiro.dev/docs/steering/) | verified workspace and explicit global/workspace scope |
11
- | Set Bearings | [Kiro steering](https://kiro.dev/docs/steering/) | durable human-readable workspace context |
12
- | Gather Supplies | [Matt Pocock grilling](https://github.com/mattpocock/skills/blob/main/skills/productivity/grilling/SKILL.md) | relentless dependency-ordered interview, one recommended question at a time |
13
- | Map the Route | [Kiro Quick Spec](https://kiro.dev/docs/specs/quick-spec/) and [GitHub Spec Kit](https://github.com/github/spec-kit/blob/main/workflows/speckit/workflow.yml) | technical-plan, design.md, seit.json, implementation.json, two-state review.html |
14
- | Navigator | compatibility diagnostic | unused on new Journeys; Router owns sequencing |
15
- | Explorer | LangChain subagents | bounded worker dispatch, proven-independent lane coordination, and result integration |
16
- | Crewmate | Spec Kit implement step | bounded execution after approved planning; split test-writing versus product |
9
+ | Bearing Orchestrator | [LangChain subagents](https://docs.langchain.com/oss/python/langchain/multi-agent/subagents) and [handoffs](https://docs.langchain.com/oss/python/langchain/multi-agent/handoffs) | central conversational supervisor, bounded handoff, fresh context |
10
+ | Intake | [Kiro steering](https://kiro.dev/docs/steering/) | verified workspace and explicit global/workspace scope |
11
+ | Architectural Alignment | [Kiro steering](https://kiro.dev/docs/steering/) | durable human-readable workspace context |
12
+ | Scope Definition | [Matt Pocock grilling](https://github.com/mattpocock/skills/blob/main/skills/productivity/grilling/SKILL.md) | relentless dependency-ordered interview, one recommended question at a time |
13
+ | Planning and Design | [Kiro Quick Spec](https://kiro.dev/docs/specs/quick-spec/) and [GitHub Spec Kit](https://github.com/github/spec-kit/blob/main/workflows/speckit/workflow.yml) | technical-plan, design.md, seit.json, implementation.json, DoD Manifest |
14
+ | Coordinator | LangChain subagents | bounded worker dispatch, proven-independent lane coordination, and result integration |
15
+ | Implementer | Spec Kit implement step | bounded execution after approved planning; split test-writing versus product |
17
16
  | Scribe | event side lane | transcribes; cannot activate authority |
18
- | Plan Integrator | Spec Kit tasks gate | reconciles five artifacts; generates implementation.json and review.html |
17
+ | Plan Integrator | Spec Kit tasks gate | reconciles five artifacts; generates implementation.json and DoD Manifest input |
19
18
  | Systems Modeler | MBSE view selection | after requirements; before design finalization |
20
- | Integration Engineer | assembly method | dual planning and execution sessions |
19
+ | Integration Engineer | assembly method | dual planning and execution sessions; execution replaces Surveyor |
21
20
  | Test Engineer | Spec Kit gate | Planning and Assurance sessions; Validator absent from active roles |
22
- | Park Ranger | LangChain reviewer subagent | independent defect review with a typed return |
23
- | Surveyor | Spec Kit review gate | outcome comparison before completion |
21
+ | Reviewer | LangChain reviewer subagent | independent defect review with a typed return |
22
+ | onboard-bearing | first-run setup | explicit one-setting-at-a-time profile writes; no credentials |
@@ -0,0 +1,149 @@
1
+ # Named profile catalog
2
+
3
+ Candidate procedure for the user-owned JSON catalog. It is not a staged
4
+ profile or route-review gate. Selection is not an authority grant.
5
+
6
+ ## Location
7
+
8
+ The live user catalog is exactly one file:
9
+
10
+ `<absolute home>/.agents/bearing-lite/profiles.json`
11
+
12
+ Resolve `<absolute home>` as a nonempty absolute `HOME`, else a nonempty
13
+ absolute `USERPROFILE` on its platform; otherwise fail closed with
14
+ `home_unresolved`. Do not use cwd, the package root, XDG, a relative
15
+ `profiles.json`, or a second search root.
16
+
17
+ The packaged catalog is package-root `profiles.json`. Never read it as user
18
+ data. Never write the packaged catalog, including resolved symlink aliases
19
+ of that file.
20
+
21
+ Missing user file means no named profiles. Do not auto-create the live
22
+ catalog. An empty `profiles` object is valid and is not an error. A
23
+ malformed unused catalog cannot override explicit inline owner choices.
24
+
25
+ Runtime and skills never search, merge, prefer, or fall back to
26
+ `lineups.json`. A leftover user `lineups.json` is not live configuration;
27
+ return `MIGRATION_REQUIRED` until explicit migration validates it, writes
28
+ and validates a semantically equivalent `profiles.json`, and removes
29
+ `lineups.json`.
30
+
31
+ ## Configurable roles
32
+
33
+ Catalog entries assign nested role/session routes for Implementer, Light
34
+ Implementer, Coordinator, Reviewer, Test Engineer, Scribe, Plan Integrator,
35
+ Systems Modeler, Integration Engineer, and Requirements Engineer. Systems
36
+ Modeler has a planning session; Test Engineer has planning and assurance
37
+ sessions; Integration Engineer has planning and execution sessions. Each
38
+ session can be enabled or disabled. Cadence keys attach to
39
+ `test_engineer.assurance`, `reviewer`, and `integration_engineer.execution`
40
+ with values `slice`, `phase`, or `lifecycle`. Defaults are `phase`, `phase`,
41
+ and `lifecycle`. The Light Implementer takes only slices whose `work_class`
42
+ is `light` (criteria in `skills/light-implementer`); it has its own primary
43
+ and fallbacks, usually a lighter and cheaper route. Surveyor, Explorer,
44
+ Crewmate, Navigator, Park Ranger, and Validator are not profile roles;
45
+ existing plans that still assign them use the compatibility diagnostics and
46
+ treat the assignment as unused. Never fill agent, model, or reasoning values
47
+ on the user's behalf.
48
+
49
+ The Orchestrator is not a configurable role: it is whatever session is running
50
+ planning. The Lifecycle snapshot records the observed Orchestrator identity
51
+ (harness, model, reasoning at that time). A catalog or snapshot entry with
52
+ `role: Orchestrator` or `role: Router` is ignored with the typed note
53
+ `router_row_ignored`; it is never a deviation.
54
+
55
+ Only verified primary unavailability activates its approved fallback. If
56
+ both are unavailable, return `OWNER_DECISION_REQUIRED`.
57
+ Activation within the frozen ordered fallbacks is a dated execution receipt,
58
+ not a profile amendment or a new owner approval. Verify the approved activation
59
+ condition and remaining eligible routes before escalating exhaustion. A new
60
+ identity or changed fallback condition requires an owner amendment; follow
61
+ `owner-stops.md` for classification and batching.
62
+
63
+ This catalog is the single profile source. A legacy
64
+ `~/.agents/bearing-lite/default-role-lineup.md` is never read or created.
65
+ A missing catalog returns the typed outcome `no_named_profiles` and an
66
+ inline-selection prompt. A leftover
67
+ `~/.agents/bearing-lite/lineups.json` is ignored as live data with
68
+ `MIGRATION_REQUIRED`.
69
+
70
+ ## Validity
71
+
72
+ Named selection and save require a valid catalog. Bind
73
+ `schemas/profiles.schema.json` Draft 2020-12 validation before named
74
+ selection or save. That schema is the validation document, not a second
75
+ search root for user data. Do not add a runtime catalog library.
76
+
77
+ On load and on save, inspect raw object members first. Reject duplicate
78
+ raw JSON keys; do not silently collapse. Then parse and apply Draft 2020-12
79
+ validation against package-root `schemas/profiles.schema.json`. Fail closed
80
+ as follows even when the schema cannot express the check:
81
+
82
+ - Reject duplicate role assignments within each phase or session.
83
+ - Reject ASCII case-fold collisions on both load and save. Do not trim
84
+ or case-fold names.
85
+ - Defaults keys must resolve exactly. Unresolved defaults fail closed.
86
+ - Invalid structure or name fails closed on both load and save.
87
+ - Reject active Surveyor, Explorer, Crewmate, Navigator, Park Ranger, or
88
+ Validator role keys.
89
+
90
+ Refuse named selection or save on any of those failures. Do not invent a
91
+ fallback profile and do not read packaged bytes as user data.
92
+
93
+ ## Selection
94
+
95
+ Explicit inline owner choices require no catalog lookup and no extra
96
+ confirmation. Consume them as already explicit.
97
+
98
+ A named choice needs a valid catalog and an exact selected key. Do not trim
99
+ or case-fold the name. Independent planning and implementation selections
100
+ remain separate; the owner may pick two names, one name twice, or inline on
101
+ either side.
102
+
103
+ Optional user `defaults.planning` and `defaults.implementation` are
104
+ recommendations requiring selection or confirmation. They are never a silent
105
+ grant and not an authority grant. Do not apply them without that
106
+ confirmation. Do not invent a packaged default.
107
+
108
+ Copy selected entries into the Lifecycle snapshot as a frozen snapshot copy.
109
+ Preserve fallback array order. Bind a SHA-256 configuration digest of that
110
+ frozen snapshot copy. Digest that copy only: selected entries with fallback
111
+ order and selection sources. Exclude N/K/C, review cadence, route, and
112
+ authority. Canonical JSON: UTF-8, sort_keys, compact separators.
113
+ Later catalog edits do not mutate the frozen snapshot copy or its digest.
114
+
115
+ ## Save
116
+
117
+ Save only on explicit owner request. Never save this Lifecycle as a side
118
+ effect of selection, freeze, or routing.
119
+
120
+ Create versus replace: if replace is already explicit, do not ask again;
121
+ otherwise preview the selected-entry replacement and confirm. Create must
122
+ not overwrite an existing exact key. Replace updates only that key.
123
+
124
+ Preserve unrelated valid keys and defaults. Refuse changed-input overwrite.
125
+ Use a safe atomic update (sibling temp file, then rename).
126
+
127
+ Do not write N/K/C, review cadence, route, or authority into catalog
128
+ entries.
129
+
130
+ ## Development strategy, cadence, concurrency, clean-session
131
+
132
+ `development_strategy.mode` is `single_implementer` (speed default) or
133
+ `tdd`. `tdd` orders Test Implementer before Product Implementer for a
134
+ behavior-changing slice. Independent dependency-ready slices may run
135
+ concurrently when write sets and mutable resources do not overlap.
136
+
137
+ `planning_to_implementation_clean_session` is an explicit boolean with no
138
+ preselected value. An approved Lifecycle may freeze an override in
139
+ `implementation.json`.
140
+
141
+ ## Migration
142
+
143
+ Migration preserves meaning from `planned_planning_assignments` and
144
+ `implementation_assignments`. Map Crewmate to Implementer, Explorer to
145
+ Coordinator, Park Ranger to Reviewer, Light Implementer unchanged, Test
146
+ Engineer planning-phase rows to `test_engineer.planning` and
147
+ implementation-phase rows to `test_engineer.assurance`. Do not auto-assign
148
+ Integration Engineer execution from Surveyor; onboard-bearing asks which
149
+ route to assign. Validate the new profile, then remove `lineups.json`.
@@ -0,0 +1,30 @@
1
+ # Resume and liveness
2
+
3
+ Resume reads `journey.json`, `workspace.md`, the active role contract, and
4
+ the current task. It trusts accepted stages and confirmed decisions unless a
5
+ bounded identity or drift check fails. It never adds a watchdog daemon,
6
+ heartbeat service, global timeout, or model polling, and it never replays
7
+ accepted planning.
8
+
9
+ ## Preflight
10
+
11
+ Before resuming or dispatching a fallback, Orchestrator performs one
12
+ host-native liveness check when that surface exists:
13
+
14
+ | Class | Meaning | Action |
15
+ | --- | --- | --- |
16
+ | `RUNNING` | The dispatched session or process is still active | Never duplicate |
17
+ | `COMPLETED` | Durable evidence shows the task finished | Advance only from that evidence |
18
+ | `INACTIVE` / `EXITED` | The session is gone | Resume from last durable state with an approved fallback |
19
+ | `UNKNOWN` | The host exposes no reliable status | Automatic orchestration returns `WAITING_ON`. Explicit owner-requested resume may replace the agent |
20
+
21
+ Wait/status reliability varies by host and route. Host-native status checks
22
+ are recommended when available. Missing expensive models or wrappers do not
23
+ make a route ineligible.
24
+
25
+ ## Continuation
26
+
27
+ A resumed or fallback agent does not receive raw conversation history. It
28
+ continues the same pass and budget from durable artifacts. Confirmed owner
29
+ decisions stay confirmed. A changed envelope, conflicting writer, new
30
+ authority, or explicit owner choice starts fresh.
@@ -8,8 +8,8 @@ harness, account, or agent identity.
8
8
 
9
9
  ```json
10
10
  {
11
- "reviewer_slots_min": 2,
12
- "reviewer_slots_max": 2,
11
+ "reviewer_slots_min": 1,
12
+ "reviewer_slots_max": 1,
13
13
  "independence_required": true,
14
14
  "isolated_findings_until_aggregation": true,
15
15
  "candidate_fields": ["candidate_ref", "candidate_revision", "candidate_digest"],
@@ -23,7 +23,7 @@ harness, account, or agent identity.
23
23
  }
24
24
  ```
25
25
 
26
- Map the Route writes the separate Journey binding in the approved lineup
26
+ Planning and Design writes the separate Lifecycle binding in the approved profile
27
27
  snapshot. It lists unique abstract `slot_id` values, each slot's owner-selected
28
28
  `primary_route_ref`, and ordered `fallback_route_refs`. Each receipt records a
29
29
  distinct selected route from its slot. All receipts bind to the same non-empty
@@ -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.
@@ -1,21 +1,21 @@
1
1
  flowchart TD
2
- O[Owner Authority] <--> R[Stateful Bearing Lite Router]
2
+ O[Owner Authority] <--> R[Stateful Bearing Lite Orchestrator]
3
3
  R --> P{Next missing planning stage?}
4
- P -->|Repository Fit| PF[Fresh Repository Fit]
5
- P -->|Set Bearings| SB[Fresh Set Bearings]
6
- P -->|Gather Supplies| GS[Fresh Gather Supplies]
7
- P -->|Map the Route| MR[Fresh Map the Route]
8
- PF & SB & GS -->|typed return| R
9
- R --> MR
10
- MR -->|five artifacts with proposed route, lineup, role states, reasoning, cadence| I{One integrated owner review}
11
- I -->|change| MR
12
- I -->|approve Explorer Journey: one packet| C[Crewmate may continue in-wave]
13
- I -->|approve Explorer Journey: one wave| E[Explorer may continue in-wave]
14
- I -->|approve Expedition: Router sequences waves| E
4
+ P -->|Intake| IN[Fresh Intake]
5
+ P -->|Architectural Alignment| AA[Fresh Architectural Alignment]
6
+ P -->|Scope Definition| SD[Fresh Scope Definition]
7
+ P -->|Planning and Design| PD[Fresh Planning and Design]
8
+ IN & AA & SD -->|typed return| R
9
+ R --> PD
10
+ PD -->|five artifacts with proposed route, profile, role states, reasoning, cadence| I{One integrated owner review}
11
+ I -->|change| PD
12
+ I -->|approve one packet| C[Implementer may continue in-wave]
13
+ I -->|approve one wave| E[Coordinator may continue in-wave]
14
+ I -->|approve Lifecycle: Orchestrator sequences waves| E
15
15
  E --> C
16
16
  C --> A{Declared phase or wave end candidate?}
17
17
  A -->|Assurance Test Engineer declared| V[Fresh Assurance Test Engineer]
18
- A -->|Park Ranger declared| PK[Fresh Park Ranger]
19
- A -->|Surveyor declared| S[Fresh Surveyor]
18
+ A -->|Reviewer declared| PK[Fresh Reviewer]
19
+ A -->|Integration Engineer execution declared| S[Fresh Integration Engineer execution]
20
20
  A -->|not yet| E
21
21
  V & PK & S -->|compact receipt| R