@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.
- package/CONTRIBUTING.md +11 -6
- package/README.md +224 -131
- package/com.github.copilot/hooks/hooks.json +33 -0
- package/hooks/assurance-budget.cjs +33 -11
- package/hooks/com.anthropic.claude-code/mapping.md +35 -16
- package/hooks/plan-package.cjs +5 -4
- package/hooks/policy.cjs +10 -4
- package/hooks/profiles.cjs +119 -0
- package/hooks/te-host.cjs +40 -5
- package/hooks/transition-order.cjs +12 -4
- package/hooks/verification.cjs +358 -0
- package/package.json +6 -3
- package/plugin.json +2 -34
- package/profiles.json +1 -0
- package/schemas/implementation.schema.json +204 -5
- package/schemas/journey.schema.json +3 -3
- package/schemas/profiles.schema.json +359 -0
- package/schemas/verification.schema.json +126 -0
- package/skills/{set-bearings → architectural-alignment}/SKILL.md +17 -13
- package/skills/{set-bearings → architectural-alignment}/templates/workspace.md +1 -1
- package/skills/bearing-lite/SKILL.md +22 -22
- package/skills/bearing-lite/references/assurance-policy.md +32 -16
- package/skills/bearing-lite/references/lineups.md +7 -110
- package/skills/bearing-lite/references/owner-stops.md +13 -13
- package/skills/bearing-lite/references/peer-synthesis.md +11 -12
- package/skills/bearing-lite/references/profiles.md +149 -0
- package/skills/bearing-lite/references/resume.md +30 -0
- package/skills/bearing-lite/references/review-policy.md +3 -3
- package/skills/bearing-lite/references/role-routing.mmd +14 -14
- package/skills/bearing-lite/references/task-state.md +10 -10
- package/skills/bearing-lite/references/task-state.mmd +2 -2
- package/skills/bearing-lite/references/verification.md +52 -0
- package/skills/bearing-lite/templates/task.md +29 -28
- package/skills/{explorer → coordinator}/SKILL.md +16 -16
- package/skills/{crewmate → implementer}/SKILL.md +17 -15
- package/skills/{repository-fit → intake}/SKILL.md +10 -9
- package/skills/integration-engineer/SKILL.md +17 -12
- package/skills/light-implementer/SKILL.md +6 -5
- package/skills/onboard-bearing/SKILL.md +46 -0
- package/skills/plan-integrator/SKILL.md +14 -14
- package/skills/{map-the-route → planning-and-design}/SKILL.md +27 -27
- package/skills/{map-the-route → planning-and-design}/references/artifact-grammar.md +29 -27
- package/skills/prompt/SKILL.md +245 -0
- package/skills/requirements-engineer/SKILL.md +11 -11
- package/skills/{park-ranger → reviewer}/SKILL.md +16 -13
- package/skills/{gather-supplies → scope-definition}/SKILL.md +13 -13
- package/skills/scribe/SKILL.md +8 -8
- package/skills/systems-modeler/SKILL.md +5 -3
- package/skills/test-engineer/SKILL.md +16 -13
- package/templates/dod-manifest-v1.html +648 -0
- package/tools/render-dod-manifest.mjs +1743 -0
- package/lineups.json +0 -1
- package/schemas/lineups.schema.json +0 -145
- package/skills/navigator/SKILL.md +0 -36
- package/skills/surveyor/SKILL.md +0 -48
- package/skills/validator/SKILL.md +0 -37
- package/skills/validator/references/grading-rubric.md +0 -40
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
# Assurance budget policy
|
|
2
2
|
|
|
3
|
-
Decision source: `
|
|
4
|
-
`ROUTER-EMV-CADENCE-IMPLEMENTATION-001`.
|
|
3
|
+
Decision source: `DEC-BDL-007`, `DEC-BDL-030`, `DEC-BDL-047`, `DES-BDL-007`.
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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": "
|
|
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": "
|
|
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 `
|
|
35
|
-
from the frozen declaration
|
|
36
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
#
|
|
1
|
+
# Obsolete lineup catalog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
`lineups.json` is not live Bearing configuration. Use
|
|
4
|
+
`references/profiles.md` and `~/.agents/bearing-lite/profiles.json`.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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 |
|
|
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
|
|
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
|
|
22
|
+
owner changes the frozen profile or grants authority.
|
|
23
23
|
|
|
24
24
|
## Approval and authority
|
|
25
25
|
|
|
26
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
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
|
|
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
|
-
|
|
|
23
|
-
|
|
|
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":
|
|
12
|
-
"reviewer_slots_max":
|
|
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
|
-
|
|
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
|
|
2
|
+
O[Owner Authority] <--> R[Stateful Bearing Lite Orchestrator]
|
|
3
3
|
R --> P{Next missing planning stage?}
|
|
4
|
-
P -->|
|
|
5
|
-
P -->|
|
|
6
|
-
P -->|
|
|
7
|
-
P -->|
|
|
8
|
-
|
|
9
|
-
R -->
|
|
10
|
-
|
|
11
|
-
I -->|change|
|
|
12
|
-
I -->|approve
|
|
13
|
-
I -->|approve
|
|
14
|
-
I -->|approve
|
|
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 -->|
|
|
19
|
-
A -->|
|
|
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` |
|
|
16
|
-
| `ACCEPTANCE` |
|
|
17
|
-
| `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
|
|
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
|
-
-
|
|
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,
|
|
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
|
|
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
|
|
52
|
-
competing
|
|
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-
|
|
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`.
|