@alphazede/bearing-lite 0.2.2 → 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 (57) hide show
  1. package/CONTRIBUTING.md +11 -6
  2. package/README.md +224 -131
  3. package/com.github.copilot/hooks/hooks.json +33 -0
  4. package/hooks/assurance-budget.cjs +33 -11
  5. package/hooks/com.anthropic.claude-code/mapping.md +35 -16
  6. package/hooks/plan-package.cjs +5 -4
  7. package/hooks/policy.cjs +10 -4
  8. package/hooks/profiles.cjs +119 -0
  9. package/hooks/te-host.cjs +40 -5
  10. package/hooks/transition-order.cjs +12 -4
  11. package/hooks/verification.cjs +358 -0
  12. package/package.json +6 -3
  13. package/plugin.json +2 -34
  14. package/profiles.json +1 -0
  15. package/schemas/implementation.schema.json +204 -5
  16. package/schemas/journey.schema.json +3 -3
  17. package/schemas/profiles.schema.json +359 -0
  18. package/schemas/verification.schema.json +126 -0
  19. package/skills/{set-bearings → architectural-alignment}/SKILL.md +17 -13
  20. package/skills/{set-bearings → architectural-alignment}/templates/workspace.md +1 -1
  21. package/skills/bearing-lite/SKILL.md +22 -22
  22. package/skills/bearing-lite/references/assurance-policy.md +32 -16
  23. package/skills/bearing-lite/references/lineups.md +7 -110
  24. package/skills/bearing-lite/references/owner-stops.md +13 -13
  25. package/skills/bearing-lite/references/peer-synthesis.md +11 -12
  26. package/skills/bearing-lite/references/profiles.md +149 -0
  27. package/skills/bearing-lite/references/resume.md +30 -0
  28. package/skills/bearing-lite/references/review-policy.md +3 -3
  29. package/skills/bearing-lite/references/role-routing.mmd +14 -14
  30. package/skills/bearing-lite/references/task-state.md +10 -10
  31. package/skills/bearing-lite/references/task-state.mmd +2 -2
  32. package/skills/bearing-lite/references/verification.md +52 -0
  33. package/skills/bearing-lite/templates/task.md +29 -28
  34. package/skills/{explorer → coordinator}/SKILL.md +16 -16
  35. package/skills/{crewmate → implementer}/SKILL.md +17 -15
  36. package/skills/{repository-fit → intake}/SKILL.md +10 -9
  37. package/skills/integration-engineer/SKILL.md +17 -12
  38. package/skills/light-implementer/SKILL.md +6 -5
  39. package/skills/onboard-bearing/SKILL.md +46 -0
  40. package/skills/plan-integrator/SKILL.md +14 -14
  41. package/skills/{map-the-route → planning-and-design}/SKILL.md +27 -27
  42. package/skills/{map-the-route → planning-and-design}/references/artifact-grammar.md +29 -27
  43. package/skills/prompt/SKILL.md +245 -0
  44. package/skills/requirements-engineer/SKILL.md +11 -11
  45. package/skills/{park-ranger → reviewer}/SKILL.md +16 -13
  46. package/skills/{gather-supplies → scope-definition}/SKILL.md +13 -13
  47. package/skills/scribe/SKILL.md +8 -8
  48. package/skills/systems-modeler/SKILL.md +5 -3
  49. package/skills/test-engineer/SKILL.md +16 -13
  50. package/templates/dod-manifest-v1.html +648 -0
  51. package/tools/render-dod-manifest.mjs +1743 -0
  52. package/lineups.json +0 -1
  53. package/schemas/lineups.schema.json +0 -145
  54. package/skills/navigator/SKILL.md +0 -36
  55. package/skills/surveyor/SKILL.md +0 -48
  56. package/skills/validator/SKILL.md +0 -37
  57. 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,112 +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
- 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
-
56
- ## Validity
57
-
58
- Named selection and save require a valid catalog. Bind
59
- `schemas/lineups.schema.json` Draft 2020-12 validation before named
60
- selection or save. That schema is the validation document, not a second
61
- search root for user data. Do not add a runtime catalog library.
62
-
63
- On load and on save, inspect raw object members first. Reject duplicate
64
- raw JSON keys; do not silently collapse. Then parse and apply Draft 2020-12
65
- validation against package-root `schemas/lineups.schema.json`. Fail closed
66
- as follows even when the schema cannot express the check:
67
-
68
- - Reject duplicate role assignments within each phase.
69
- - Reject ASCII case-fold collisions on both load and save. Do not trim
70
- or case-fold names.
71
- - Defaults keys must resolve exactly. Unresolved defaults fail closed.
72
- - Invalid structure or name fails closed on both load and save.
73
-
74
- Refuse named selection or save on any of those failures. Do not invent a
75
- fallback profile and do not read packaged bytes as user data.
76
-
77
- ## Selection
78
-
79
- Explicit inline owner choices require no catalog lookup and no extra
80
- confirmation. Consume them as already explicit.
81
-
82
- A named choice needs a valid catalog and an exact selected key. Do not trim
83
- or case-fold the name. Independent planning and implementation selections
84
- remain separate; the owner may pick two names, one name twice, or inline on
85
- either side.
86
-
87
- Optional user `defaults.planning` and `defaults.implementation` are
88
- recommendations requiring selection or confirmation. They are never a silent
89
- grant and not an authority grant. Do not apply them without that
90
- confirmation. Do not invent a packaged default.
91
-
92
- Copy selected entries into the Journey snapshot as a frozen snapshot copy.
93
- Preserve fallback array order. Bind a SHA-256 configuration digest of that
94
- frozen snapshot copy. Digest that copy only: selected entries with fallback
95
- order and selection sources. Exclude N/K/C, review cadence, route, and
96
- authority. Canonical JSON: UTF-8, sort_keys, compact separators.
97
- Later catalog edits do not mutate the frozen snapshot copy or its digest.
98
-
99
- ## Save
100
-
101
- Save only on explicit owner request. Never save this Journey as a side
102
- effect of selection, freeze, or routing.
103
-
104
- Create versus replace: if replace is already explicit, do not ask again;
105
- otherwise preview the selected-entry replacement and confirm. Create must
106
- not overwrite an existing exact key. Replace updates only that key.
107
-
108
- Preserve unrelated valid keys and defaults. Refuse changed-input overwrite.
109
- Use a safe atomic update (sibling temp file, then rename).
110
-
111
- Do not write N/K/C, review cadence, route, or authority into catalog
112
- 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.
@@ -5,10 +5,10 @@ Before asking, identify the unresolved decision, affected slices, evidence,
5
5
  and why the current policy or authority does not answer it. Never invent an
6
6
  extra role, review gate, approval checkpoint, or scope to resolve uncertainty.
7
7
 
8
- | Class | Decision | Router behavior |
8
+ | Class | Decision | Orchestrator behavior |
9
9
  | --- | --- | --- |
10
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. |
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
12
  | C | Bound, scope, or policy conflict | Ask for the smallest amendment when it blocks ready work. Never reset a spent bound. |
13
13
  | D | Continue approved work | Use the effective continuation grant; never ask again while its conditions hold. Missing or expired authority is F. |
14
14
  | E | Integrated plan approval | Present the package once for approval or change; execution waits for explicit approval. |
@@ -19,17 +19,17 @@ expiry, and owner-hold checks. Missing evidence is `NEEDS_MORE_EVIDENCE`, not
19
19
  permission and not automatically an owner question. Recover discoverable
20
20
  evidence first; escalate a real unresolved boundary as C or F. Fallback
21
21
  activation is an execution receipt, not an authority amendment. Only the
22
- owner changes the frozen lineup or grants authority.
22
+ owner changes the frozen profile or grants authority.
23
23
 
24
24
  ## Approval and authority
25
25
 
26
- Map the Route includes `authority.json.continuation` in the integrated gate:
26
+ Planning and Design includes `authority.json.continuation` in the integrated gate:
27
27
  `granted`, `owner_decision_id`, named `exclusions`, and `expires_at` (UTC or
28
28
  null for event-based expiry). The surrounding envelope retains allowed and
29
29
  prohibited actions/paths, role grants, approval receipt, and nonempty
30
30
  `expiry_conditions`. Record explicit approval against the exact package;
31
31
  the continuation decision ID must occur in `granting_owner_decisions`.
32
- No grant is inferred from silence, a lineup selection, or passing checks.
32
+ No grant is inferred from silence, a profile selection, or passing checks.
33
33
 
34
34
  Always exclude scope change, budget exhaustion, owner holds, and owner-only
35
35
  actions from the continuation grant. A separate explicit action grant can
@@ -41,9 +41,9 @@ provides no standing continuation grant. Do not manufacture a retroactive one.
41
41
  For first approval show outcome, scope/exclusions, role responsibilities,
42
42
  route, bounds, risks, open decisions and proof coverage in a concise summary.
43
43
  For revisions show changed requirements, design, proof cases, slices,
44
- lineup, authority and bounds against the last owner-reviewed package, citing
44
+ profile, authority and bounds against the last owner-reviewed package, citing
45
45
  both revisions/digests. Explain invalidated approvals and unresolved decisions.
46
- Keep the complete frozen `review.html` accessible in both cases; a diff or
46
+ Keep the complete frozen DoD Manifest accessible in both cases; a diff or
47
47
  freeze PASS is neither approval nor proof of semantic completeness. An
48
48
  unchanged package does not need reapproval. A changed package returns to the
49
49
  same gate, never an extra gate.
@@ -58,7 +58,7 @@ receipts, not fabricated questions. Required fields are defined by
58
58
  `schemas/journey.schema.json` and checked by the metrics helper.
59
59
 
60
60
  Queue nonblocking questions until wave end and present one batch with the
61
- wave receipt. Queue nonblocking owner-only closeout actions until Journey
61
+ wave receipt. Queue nonblocking owner-only closeout actions until Lifecycle
62
62
  end. Required credentials, publication prerequisites, or other owner-only
63
63
  dependencies surface immediately when they block ready work. Do not defer
64
64
  safety/integrity intervention or an explicit owner stop. Each actual
@@ -78,7 +78,7 @@ Disjoint writes alone do not prove independence: check shared runtime,
78
78
  resources, integration order, and read/write dependencies. `parallel_safe`
79
79
  is evidence to inspect, not permission. Respect host concurrency limits and
80
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
81
+ pending. Owner holds apply to their stated scope, including the whole Lifecycle
82
82
  when so directed; they cannot be bypassed by calling work independent.
83
83
 
84
84
  ## Deterministic checks and measurement
@@ -87,7 +87,7 @@ Before a proposed stop, run `hooks/transition-order.cjs` with
87
87
  `action_kind: owner_stop_check` and `owner_stop` containing `class`,
88
88
  `blocking`, `evidence_ref`, `resolution_ref`, `authority`, `checked_at`,
89
89
  and `checks`. Checks are explicit booleans: `scope`, `budget`, `exclusions`,
90
- `expiry`, `owner_hold`, plus `policy` for A or `fallback` for B. Router must
90
+ `expiry`, `owner_hold`, plus `policy` for A or `fallback` for B. Orchestrator must
91
91
  verify them against the actual frozen inputs; the helper does not authenticate
92
92
  receipts or interpret arbitrary path globs or expiry prose. C/E/F need the
93
93
  class, evidence reference and blocking flag; return ASK or QUEUE. A/B/D
@@ -96,13 +96,13 @@ procedural transition adapter, not a new registered host event, permission
96
96
  grant, scheduler, or security boundary. Skills-only hosts execute the same
97
97
  checklist and disclose unavailable deterministic checks.
98
98
 
99
- New Journeys set `owner_wait_tracking: true` and initialize
99
+ New Lifecycles set `owner_wait_tracking: true` and initialize
100
100
  `owner_blocked_intervals: []`. Record intervals only while no authorized ready
101
101
  work can progress specifically because of unanswered owner questions. Each
102
102
  interval lists their `decision_ids`, `started_at`, and nullable `ended_at`.
103
103
  End the interval as soon as work can progress, even if some questions remain
104
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
105
+ owner-blocked time. Never backfill unknown times. Legacy Lifecycles without
106
106
  tracking report `unavailable`, not zero waiting.
107
107
 
108
108
  Run `node <plugin root>/hooks/owner-stops.cjs <journey.json> <as-of-UTC>` at
@@ -117,6 +117,6 @@ no telemetry or network transmission. Closeout renders these metrics and
117
117
  coverage limitations; it must not claim measured savings from legacy gaps.
118
118
 
119
119
  Operational target after settled scope: zero unnecessary stops per wave;
120
- one integrated approval batch and one closeout batch per unchanged Journey
120
+ one integrated approval batch and one closeout batch per unchanged Lifecycle
121
121
  when closeout needs owner authority. Exceptions are recorded, never suppressed
122
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
@@ -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
@@ -12,9 +12,9 @@ The project's human-readable plan is the only task-state record. Diagrams explai
12
12
  | `IN_PROGRESS` | Assigned worker or coordinator | Assigned action is being performed |
13
13
  | `EVIDENCE_READY` | Parent coordinator | Candidate and evidence ready for next missing assurance |
14
14
  | `VALIDATING` | Assurance Test Engineer | Evidence sufficiency under validation |
15
- | `REVIEWING` | Park Ranger when required | Independent defect review active |
16
- | `ACCEPTANCE` | Surveyor, Owner Authority, or parent coordinator when `required_assurance` is `none` | User-facing acceptance or coordinator completion confirmation is active |
17
- | `CORRECTION_REQUIRED` | Router or nearest parent coordinator | Agent-owned in-authority correction required |
15
+ | `REVIEWING` | Reviewer when required | Independent defect review active |
16
+ | `ACCEPTANCE` | Integration Engineer execution, Owner Authority, or parent coordinator when `required_assurance` is `none` | User-facing acceptance or coordinator completion confirmation is active |
17
+ | `CORRECTION_REQUIRED` | Orchestrator or nearest parent coordinator | Agent-owned in-authority correction required |
18
18
  | `OWNER_DECISION_REQUIRED` | Owner Authority | Authority, scope, security, or replacement-path judgment required |
19
19
  | `COMPLETE` | Parent coordinator after assurance | Outcome and required assurance satisfied |
20
20
  | `CANCELLED` | Owner Authority or authorized parent | Task will not proceed |
@@ -27,7 +27,7 @@ The project's human-readable plan is the only task-state record. Diagrams explai
27
27
  - `IN_PROGRESS` → `EVIDENCE_READY` with candidate and handoff; → `CORRECTION_REQUIRED` on correctable failure; → `OWNER_DECISION_REQUIRED` on security, authority, or integrity guard.
28
28
  - `CORRECTION_REQUIRED` → `READY` on attempt 1 or 2 with a new hypothesis and evidence; → `OWNER_DECISION_REQUIRED` on the third failed correction or out-of-contract amendment.
29
29
  - `EVIDENCE_READY` → `VALIDATING` | `REVIEWING` | `ACCEPTANCE` for the next missing required role; → `WAITING_ON` if assurance dispatch is unavailable.
30
- - During the single assurance round, an accepted Assurance Test Engineer or Park Ranger handoff returns to `EVIDENCE_READY` to select the next missing assurance role in declared order.
30
+ - During the single assurance round, an accepted Assurance Test Engineer or Reviewer handoff returns to `EVIDENCE_READY` to select the next missing assurance role in declared order.
31
31
  - `VALIDATING` → `CORRECTION_REQUIRED` when more evidence or repair is needed; otherwise back through `EVIDENCE_READY` for remaining assurance.
32
32
  - `REVIEWING` → `CORRECTION_REQUIRED` | `EVIDENCE_READY` | `OWNER_DECISION_REQUIRED` by verdict.
33
33
  - `ACCEPTANCE` → `COMPLETE` when every required assurance accepted the same candidate; when `required_assurance` is `none`, parent-coordinator confirmation satisfies the assurance requirement; → `CORRECTION_REQUIRED` on acceptance gap.
@@ -36,27 +36,27 @@ The project's human-readable plan is the only task-state record. Diagrams explai
36
36
  ## Ownership rules
37
37
 
38
38
  - One parent coordinator writes each task block and its transitions.
39
- - Router alone writes cross-wave dependencies and Expedition-wide sequencing.
39
+ - Orchestrator alone writes cross-wave dependencies and Lifecycle-wide sequencing.
40
40
  - Workers and assurance roles return handoffs; they do not race plan edits.
41
- - Candidate authors never provide their own Assurance Test Engineer, Park Ranger, or Surveyor verdict.
41
+ - Candidate authors never provide their own Assurance Test Engineer, Reviewer, or Integration Engineer execution verdict.
42
42
  - Waiting on a prerequisite consumes no correction attempt. Each task has its own three-attempt correction counter; identical retries without new evidence are invalid.
43
43
  - Each declared phase or wave receives at most one assurance round and one review-directed repair. Replacement candidates do not reset the count within that declared unit; the next distinct declared phase or wave carries its own 1/1 budget. The coordinator verifies that repair deterministically and does not dispatch assurance again.
44
44
  - `COMPLETE` is terminal for Bearing assurance. An already authorized deployment keeps operational verification and rollback readiness but does not reopen review; candidate-changing deployment work requires separate scope.
45
45
 
46
46
  ## Checkout lease
47
47
 
48
- The Router inventories visible nonterminal Journeys and holds one
48
+ The Orchestrator inventories visible nonterminal Lifecycles and holds one
49
49
  generation-bound checkout lease before any planning write or dispatch.
50
50
 
51
- - Same checkout plus a live other Journey → `WAITING_ON` with sanitized
52
- competing Journey and controller. Distinct explicitly approved compatible
51
+ - Same checkout plus a live other Lifecycle → `WAITING_ON` with sanitized
52
+ competing Lifecycle and controller. Distinct explicitly approved compatible
53
53
  worktrees may proceed.
54
54
  - Resume keeps the same generation and must not duplicate dispatch.
55
55
  - `COMPLETE` or `CANCELLED` releases the lease exactly once.
56
56
  - Stale recovery is explicit, recorded, increments generation, and cannot
57
57
  steal a live lease. Forged or stale-generation records fail closed.
58
58
  - Branch or HEAD drift from the leased identity stops the transition before
59
- mutation. Authorized same-Journey candidate progress whose parent is the
59
+ mutation. Authorized same-Lifecycle candidate progress whose parent is the
60
60
  current leased revision refreshes `candidate_revision` on the same
61
61
  generation. Foreign controller, branch/worktree, or unrelated HEAD still
62
62
  fail closed as `WAITING_ON`.