@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.
- package/CONTRIBUTING.md +11 -6
- package/README.md +224 -121
- package/com.github.copilot/hooks/hooks.json +33 -0
- package/hooks/assurance-budget.cjs +33 -11
- package/hooks/closeout.cjs +17 -0
- package/hooks/com.anthropic.claude-code/mapping.md +35 -16
- package/hooks/owner-stops.cjs +154 -0
- 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 +24 -4
- package/hooks/verification.cjs +358 -0
- package/package.json +6 -3
- package/plugin.json +2 -34
- package/profiles.json +1 -0
- package/schemas/authority.schema.json +55 -34
- package/schemas/implementation.schema.json +204 -5
- package/schemas/journey.schema.json +142 -48
- 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 +23 -23
- package/skills/bearing-lite/references/assurance-policy.md +32 -16
- package/skills/bearing-lite/references/lineups.md +7 -105
- package/skills/bearing-lite/references/owner-stops.md +122 -0
- 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 +8 -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 +19 -19
- 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/planning-and-design/SKILL.md +60 -0
- 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 +12 -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/map-the-route/SKILL.md +0 -59
- 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,107 +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
|
-
|
|
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
|
|
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
|
|
@@ -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
|
|
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
|