@juzser/blacksmith 0.3.0 → 0.5.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/.claude/agents/{auditor.md → bs-auditor.md} +8 -5
- package/.claude/agents/{coder.md → bs-coder.md} +8 -7
- package/.claude/agents/{grader.md → bs-grader.md} +16 -9
- package/.claude/agents/{merger.md → bs-merger.md} +4 -4
- package/.claude/agents/{planner.md → bs-planner.md} +20 -6
- package/.claude/agents/{researcher.md → bs-researcher.md} +6 -5
- package/.claude/agents/{reviewer.md → bs-reviewer.md} +16 -5
- package/.claude/agents/{scribe.md → bs-scribe.md} +11 -2
- package/.claude/agents/{security-reviewer.md → bs-security-reviewer.md} +9 -6
- package/.claude/agents/{spec-reviewer.md → bs-spec-reviewer.md} +18 -10
- package/.claude/agents/{tester.md → bs-tester.md} +40 -12
- package/.claude/agents/bs-uiux.md +257 -0
- package/.claude/agents/{verifier.md → bs-verifier.md} +7 -4
- package/.claude/agents/{wave-runner.md → bs-wave-runner.md} +14 -5
- package/.claude/skills/bs/SKILL.md +99 -21
- package/.claude/skills/bs/audit.md +45 -31
- package/.claude/skills/bs/dispatch.md +133 -47
- package/.claude/skills/bs/lessons.md +28 -14
- package/.claude/skills/bs/mcp.md +4 -4
- package/.claude/skills/bs/new.md +3 -3
- package/.claude/skills/bs/plan.md +57 -16
- package/.claude/skills/bs/report.md +11 -11
- package/.claude/skills/bs/run.md +190 -52
- package/.claude/skills/bs/status.md +14 -7
- package/.claude/skills/bs/ui.md +21 -5
- package/.claude/skills/bs/waivers.md +78 -2
- package/.claude/skills/bs/wave.md +143 -50
- package/README.md +53 -32
- package/factory/orchestrator/dist/agentNames.js +43 -0
- package/factory/orchestrator/dist/agents-registry.js +11 -4
- package/factory/orchestrator/dist/agentsSync.js +70 -13
- package/factory/orchestrator/dist/artifacts.js +31 -0
- package/factory/orchestrator/dist/attribution.js +4 -0
- package/factory/orchestrator/dist/audit.js +245 -20
- package/factory/orchestrator/dist/autonomy.js +6 -2
- package/factory/orchestrator/dist/budgetAlarm.js +132 -37
- package/factory/orchestrator/dist/budgets.js +302 -84
- package/factory/orchestrator/dist/claims.js +9 -19
- package/factory/orchestrator/dist/cli.js +1087 -116
- package/factory/orchestrator/dist/cliName.js +27 -0
- package/factory/orchestrator/dist/crossFinding.js +20 -0
- package/factory/orchestrator/dist/crosscheck.js +136 -8
- package/factory/orchestrator/dist/daemon.js +352 -67
- package/factory/orchestrator/dist/db/projector.js +327 -54
- package/factory/orchestrator/dist/db/queries.js +1831 -94
- package/factory/orchestrator/dist/db/schema.js +57 -4
- package/factory/orchestrator/dist/declaredArtifactLine.js +18 -0
- package/factory/orchestrator/dist/delegation.js +86 -19
- package/factory/orchestrator/dist/diffstat.js +15 -8
- package/factory/orchestrator/dist/dispatchLint.js +108 -0
- package/factory/orchestrator/dist/effort.js +14 -2
- package/factory/orchestrator/dist/effortTiers.js +13 -0
- package/factory/orchestrator/dist/env.js +26 -0
- package/factory/orchestrator/dist/epic.js +494 -42
- package/factory/orchestrator/dist/epicBudget.js +93 -0
- package/factory/orchestrator/dist/epicWidth.js +22 -5
- package/factory/orchestrator/dist/errorIssues.js +182 -11
- package/factory/orchestrator/dist/escalation.js +2 -2
- package/factory/orchestrator/dist/events.js +164 -14
- package/factory/orchestrator/dist/feedback.js +169 -0
- package/factory/orchestrator/dist/findingContext.js +26 -0
- package/factory/orchestrator/dist/findings.js +108 -14
- package/factory/orchestrator/dist/gate.js +120 -10
- package/factory/orchestrator/dist/gh.js +19 -2
- package/factory/orchestrator/dist/git.js +20 -2
- package/factory/orchestrator/dist/goalCheck.js +2 -2
- package/factory/orchestrator/dist/harness.js +25 -17
- package/factory/orchestrator/dist/hookDecision.js +411 -39
- package/factory/orchestrator/dist/integration.js +20 -8
- package/factory/orchestrator/dist/issueReporter.js +81 -16
- package/factory/orchestrator/dist/judgePreflight.js +25 -4
- package/factory/orchestrator/dist/judgeRoles.js +47 -0
- package/factory/orchestrator/dist/judgeStopHook.js +239 -0
- package/factory/orchestrator/dist/judges.js +419 -21
- package/factory/orchestrator/dist/lessons.js +190 -11
- package/factory/orchestrator/dist/logCache.js +291 -0
- package/factory/orchestrator/dist/mcp.js +6 -6
- package/factory/orchestrator/dist/paths.js +20 -7
- package/factory/orchestrator/dist/plan.js +399 -33
- package/factory/orchestrator/dist/planQuorum.js +5 -2
- package/factory/orchestrator/dist/policy.js +1275 -30
- package/factory/orchestrator/dist/projectName.js +25 -0
- package/factory/orchestrator/dist/projects.js +12 -1
- package/factory/orchestrator/dist/promptCapture.js +306 -0
- package/factory/orchestrator/dist/promptHook.js +33 -0
- package/factory/orchestrator/dist/promptImport.js +281 -0
- package/factory/orchestrator/dist/prompts.js +13 -0
- package/factory/orchestrator/dist/providers/schema-validate.js +2 -2
- package/factory/orchestrator/dist/providers/types.js +1 -1
- package/factory/orchestrator/dist/queue.js +471 -30
- package/factory/orchestrator/dist/quorum.js +18 -5
- package/factory/orchestrator/dist/results.js +25 -7
- package/factory/orchestrator/dist/roadmap.js +10 -5
- package/factory/orchestrator/dist/run-cli.js +15 -10
- package/factory/orchestrator/dist/runner.js +2 -2
- package/factory/orchestrator/dist/scheduler.js +3 -3
- package/factory/orchestrator/dist/schemas.js +56 -8
- package/factory/orchestrator/dist/severity.js +8 -4
- package/factory/orchestrator/dist/spec.js +246 -12
- package/factory/orchestrator/dist/specChange.js +13 -9
- package/factory/orchestrator/dist/stack.js +6 -6
- package/factory/orchestrator/dist/storeRoot.js +90 -0
- package/factory/orchestrator/dist/symbols.js +261 -6
- package/factory/orchestrator/dist/taskEvents.js +192 -31
- package/factory/orchestrator/dist/taskStatus.js +14 -0
- package/factory/orchestrator/dist/taxonomy.js +11 -0
- package/factory/orchestrator/dist/testerAudit.js +31 -12
- package/factory/orchestrator/dist/testgate.js +20 -16
- package/factory/orchestrator/dist/uiuxGate.js +83 -0
- package/factory/orchestrator/dist/usage.js +113 -48
- package/factory/orchestrator/dist/waivers.js +99 -12
- package/factory/orchestrator/dist/waveBudget.js +2 -0
- package/factory/orchestrator/dist/waveConcurrency.js +143 -7
- package/factory/orchestrator/dist/waveSchedule.js +84 -0
- package/factory/orchestrator/dist/workroot.js +1 -1
- package/factory/orchestrator/dist/worktree.js +76 -21
- package/factory/orchestrator/drizzle/0013_operator_feedback.sql +19 -0
- package/factory/orchestrator/drizzle/0014_misty_madripoor.sql +2 -0
- package/factory/orchestrator/drizzle/0015_gifted_omega_flight.sql +1 -0
- package/factory/orchestrator/drizzle/0016_milestones_project_default.sql +30 -0
- package/factory/orchestrator/drizzle/0017_events_raw_cli_session_id.sql +2 -0
- package/factory/orchestrator/drizzle/meta/_journal.json +35 -0
- package/factory/policies/budgets.yml +123 -33
- package/factory/policies/crosscheck.yml +51 -13
- package/factory/policies/delegation.yml +3 -3
- package/factory/policies/effort.yml +18 -10
- package/factory/policies/guardrails.yml +8 -6
- package/factory/policies/harness.yml +5 -5
- package/factory/policies/lessons.md +53 -2
- package/factory/policies/scheduler.yml +4 -4
- package/factory/policies/sensitive-paths.yml +1 -1
- package/factory/policies/severity.yml +13 -1
- package/factory/policies/stack.yml +6 -6
- package/factory/policies/taxonomy.yml +9 -3
- package/factory/policies/worktree.yml +15 -9
- package/factory/specs/roadmap.md +27 -3
- package/factory/specs/schema/event.schema.json +8 -1
- package/factory/specs/schema/result.schema.json +21 -8
- package/factory/specs/schema/task-spec.schema.json +12 -0
- package/package.json +16 -12
- package/.claude/agents/uiux.md +0 -133
package/.claude/skills/bs/mcp.md
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Every project leaving the factory ships an MCP surface
|
|
4
4
|
(`docs/standards/mcp.md`). It is due **late** — at the mandatory
|
|
5
5
|
`<project> — mcp surface` milestone, once the tools worth exposing are known.
|
|
6
|
-
Running this at `
|
|
6
|
+
Running this at `bs new` time would produce a manifest declaring nothing,
|
|
7
7
|
which is the rubber stamp the standard exists to prevent.
|
|
8
8
|
|
|
9
|
-
1. Run `
|
|
9
|
+
1. Run `bs mcp init <project>`. It layers `src/mcp/`, `test/mcp/`, and a
|
|
10
10
|
root `mcp.manifest.json` onto the already-scaffolded project, merges the
|
|
11
11
|
`mcp:serve` script and the pinned SDK dependency into its `package.json`,
|
|
12
12
|
and appends the `mcp surface` milestone to `factory/specs/roadmap.md`.
|
|
@@ -22,8 +22,8 @@ which is the rubber stamp the standard exists to prevent.
|
|
|
22
22
|
`main`) are not allowed at all (mcp.md MCP-S3). A signed `destructive` tool
|
|
23
23
|
is permission to act inside the project, never a way around an operator
|
|
24
24
|
gate.
|
|
25
|
-
4. Run `
|
|
25
|
+
4. Run `bs mcp check <project>` before closing anything under that
|
|
26
26
|
milestone. Exit 0 means green; exit 1 prints one `{ rule, path, message }`
|
|
27
|
-
per violation. `
|
|
27
|
+
per violation. `bs epic close` runs the same check and refuses while it
|
|
28
28
|
is red — the only way past it is `--override-rationale`, which is the
|
|
29
29
|
operator's call and their name in the event log, never yours.
|
package/.claude/skills/bs/new.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# `/bs new <project> [--ui]` — scaffold a target project
|
|
2
2
|
|
|
3
|
-
1. Ask where the project should live, then run `
|
|
3
|
+
1. Ask where the project should live, then run `bs new <project> [--ui]
|
|
4
4
|
[--target-dir <dir>]`. Without `--target-dir` it lands beside the clone, in
|
|
5
|
-
`<repo-parent>/<project>` — or, when `
|
|
5
|
+
`<repo-parent>/<project>` — or, when `bs` is an installed package rather
|
|
6
6
|
than a clone, in the directory you run it from, never inside the package.
|
|
7
7
|
Either way that is a default rather than a requirement —
|
|
8
8
|
the answer becomes the `<project-dir>` every later command takes, so take
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
bootstrap milestone in `factory/specs/roadmap.md` — all in one call.
|
|
16
16
|
An answer the templates cannot build (`frontend: react`) makes it **refuse
|
|
17
17
|
before creating anything**, rather than quietly handing over the frontend
|
|
18
|
-
they do ship. `
|
|
18
|
+
they do ship. `bs stack check` says in advance which answers are
|
|
19
19
|
honoured, merely recorded, or refused.
|
|
20
20
|
2. The gate run is `pnpm install` then `lint`, `typecheck`, `test:coverage`,
|
|
21
21
|
`build` — `ci.yml`'s order, so the lockfile lands in the first commit and no
|
|
@@ -11,8 +11,8 @@ one — and it scales steps 3–4 below plus most of `/bs run`. Ask, do not
|
|
|
11
11
|
recall:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
bs effort show --effort <small|medium|huge> # no plan file exists yet
|
|
15
|
+
bs effort show --plan factory/specs/active/<epic>/plan-vN.json
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
`profile` is what this epic buys, and every step below that a tier touches
|
|
@@ -34,17 +34,41 @@ there means "not looked at", not "looked at and clean".
|
|
|
34
34
|
|
|
35
35
|
1. **Static analysis for claims first.** Before any decomposition, get the
|
|
36
36
|
target repo's import/dependency graph so claims are computed, not
|
|
37
|
-
guessed (architecture §5) — dispatch `researcher`
|
|
38
|
-
(`.claude/agents/researcher.md`) for an unfamiliar repo, or do it
|
|
37
|
+
guessed (architecture §5) — dispatch `bs-researcher`
|
|
38
|
+
(`.claude/agents/bs-researcher.md`) for an unfamiliar repo, or do it
|
|
39
39
|
directly with Grep/Read for a small one.
|
|
40
|
-
2. Dispatch a **`planner`** session (`.claude/agents/planner.md`, frontier
|
|
40
|
+
2. Dispatch a **`bs-planner`** session (`.claude/agents/bs-planner.md`, frontier
|
|
41
41
|
tier) with the goal + the claims analysis. It drafts the epic spec and
|
|
42
42
|
task specs (`factory/specs/schema/task-spec.schema.json` shape).
|
|
43
|
-
3. Dispatch a **`spec-reviewer`** session (`.claude/agents/spec-reviewer.md`)
|
|
43
|
+
3. Dispatch a **`bs-spec-reviewer`** session (`.claude/agents/bs-spec-reviewer.md`)
|
|
44
44
|
— a *different model* than the planner's, per its own frontmatter — to
|
|
45
45
|
hunt spec gaps/ambiguities/missing-nonfunctional clauses
|
|
46
46
|
(`docs/standards/agent-constraints.md` "planner"; `severity.yml`: most
|
|
47
|
-
spec gaps land S2, blocking sign-off).
|
|
47
|
+
spec gaps land S2, blocking sign-off). Name the review focus in the
|
|
48
|
+
dispatch itself, as a short list of at most six items, so findings come
|
|
49
|
+
back tagged to one of them:
|
|
50
|
+
|
|
51
|
+
1. Claims and dependency edges, cross-checked against
|
|
52
|
+
`bs claims impact`.
|
|
53
|
+
2. TDD-ability -- a named failing test per task, before its code.
|
|
54
|
+
3. Nonfunctional and security clauses.
|
|
55
|
+
4. Budget and diff-cap fit.
|
|
56
|
+
5. Acceptance-criterion coverage -- every epic criterion maps to a task.
|
|
57
|
+
6. From round 2 on, only the previous round's findings plus any task
|
|
58
|
+
that changed since then.
|
|
59
|
+
|
|
60
|
+
The prompt also carries, inline on its own line,
|
|
61
|
+
`Declared artifact: /abs/path/to/state/results/<epic-id>.spec-review.json`
|
|
62
|
+
— the absolute form of the path `bs-spec-reviewer.md` names. The PreToolUse
|
|
63
|
+
guard refuses a judge dispatch without it.
|
|
64
|
+
|
|
65
|
+
When `size.small` reads true on the draft (`bs wave schedule` or
|
|
66
|
+
`bs plan ingest`'s `parallelism.size`, run against the draft plan
|
|
67
|
+
file), recommend effort tier `small` -- single-pass spec review -- to
|
|
68
|
+
the operator unless a security trigger floors it first, and say why in
|
|
69
|
+
the same message: a plan that cannot spread past a few tasks and a
|
|
70
|
+
handful of claim paths does not need a second review round to find what
|
|
71
|
+
one pass already covers.
|
|
48
72
|
4. Planner fixes flagged issues; repeat 2–3 until the spec-reviewer has
|
|
49
73
|
nothing S1/S2 left — or exactly once when `profile.specReviewRounds` is
|
|
50
74
|
`single-pass` (`small`), where the planner fixes what came back and
|
|
@@ -55,9 +79,10 @@ there means "not looked at", not "looked at and clean".
|
|
|
55
79
|
confidence) for you:
|
|
56
80
|
|
|
57
81
|
```bash
|
|
58
|
-
|
|
82
|
+
bs plan quorum --plan <the draft's plan.json> --plan-version <n> \
|
|
59
83
|
--session <session-id> --causal-parent <event-id> \
|
|
60
84
|
--confidence <your own 0–1 confidence in this plan> \
|
|
85
|
+
--project <project-dir> \
|
|
61
86
|
--out <scratch>/quorum-v<n>.json
|
|
62
87
|
```
|
|
63
88
|
|
|
@@ -67,7 +92,10 @@ there means "not looked at", not "looked at and clean".
|
|
|
67
92
|
exist. (`--epic <epic>` instead of `--plan` critiques a version already
|
|
68
93
|
filed.) The draft's own `epic_id`/`version` must be the ones the command
|
|
69
94
|
names, or it refuses (`plan.identity-mismatch`) rather than record one
|
|
70
|
-
plan's identity with another plan's triggers. `--
|
|
95
|
+
plan's identity with another plan's triggers. `--project <project-dir>`
|
|
96
|
+
has no worktree to derive from at this step — no task has one yet — so
|
|
97
|
+
name it directly, or a `<project-dir>/.blacksmith/crosscheck.yml` overlay
|
|
98
|
+
never reaches the providers this quorum weighs. `--out` keeps the outcome
|
|
71
99
|
— three rationales of several kB each — where step 5 can hand it to the
|
|
72
100
|
operator whole instead of quoting a terminal.
|
|
73
101
|
|
|
@@ -90,10 +118,10 @@ there means "not looked at", not "looked at and clean".
|
|
|
90
118
|
"planner: autonomy — spec sign-off per epic").
|
|
91
119
|
6. On approval, write task specs to
|
|
92
120
|
`factory/specs/active/<epic>/plan-v1.json` and validate:
|
|
93
|
-
`
|
|
121
|
+
`bs plan validate factory/specs/active/<epic>/plan-v1.json` must
|
|
94
122
|
report `{"valid":true}` before anything else touches this plan. Write the
|
|
95
123
|
tier onto the plan file as a top-level `"effort": "<tier>"` — that is
|
|
96
|
-
where `/bs run` reads it, and `
|
|
124
|
+
where `/bs run` reads it, and `bs plan amend` carries it into
|
|
97
125
|
v(n+1) so a re-plan is not a fresh choice. Omit the field to take the
|
|
98
126
|
policy default; a value that is not `small`/`medium`/`huge` fails
|
|
99
127
|
validation rather than degrading to it.
|
|
@@ -102,7 +130,7 @@ there means "not looked at", not "looked at and clean".
|
|
|
102
130
|
against it:
|
|
103
131
|
|
|
104
132
|
```bash
|
|
105
|
-
|
|
133
|
+
bs wave schedule factory/specs/active/<epic>/plan-v1.json \
|
|
106
134
|
--session <session-id> --repo <project-dir>
|
|
107
135
|
```
|
|
108
136
|
|
|
@@ -127,10 +155,15 @@ there means "not looked at", not "looked at and clean".
|
|
|
127
155
|
decide whether to re-slice, and say which you chose when you present the
|
|
128
156
|
plan.
|
|
129
157
|
|
|
158
|
+
The same JSON also carries `size` -- `{tasks, claims, small}` over live
|
|
159
|
+
tasks only -- the block `plan ingest` prints again under `parallelism`
|
|
160
|
+
at step 7; `small` is true at or under 3 live tasks and 10 distinct
|
|
161
|
+
claim paths, and this is where the step 3 tier read gets confirmed.
|
|
162
|
+
|
|
130
163
|
Beside the schedule, the read that names what it only counts:
|
|
131
164
|
|
|
132
165
|
```bash
|
|
133
|
-
|
|
166
|
+
bs claims impact --plan factory/specs/active/<epic>/plan-v1.json \
|
|
134
167
|
<task-id>... --repo <project-dir>
|
|
135
168
|
```
|
|
136
169
|
|
|
@@ -138,8 +171,8 @@ there means "not looked at", not "looked at and clean".
|
|
|
138
171
|
at; `promised` holds the ones a producer's `keeps_exports` already
|
|
139
172
|
answers, which the schedule admits and the diff is later checked against.
|
|
140
173
|
7. Log the sign-off itself as a decision checkpoint (this is exactly what
|
|
141
|
-
`
|
|
142
|
-
`
|
|
174
|
+
`bs dream`'s "plan sign-off" extraction looks for, `lessons.ts`):
|
|
175
|
+
`bs event append '{"session_id":"...","actor":"operator",
|
|
143
176
|
"event_type":"plan-version-created","plan_version":1,
|
|
144
177
|
"causal_parent":"...","payload":{"epic_id":"<epic>","version":1,
|
|
145
178
|
"note":"<operator's own words>"}}'`.
|
|
@@ -148,7 +181,7 @@ there means "not looked at", not "looked at and clean".
|
|
|
148
181
|
the sign-off event:
|
|
149
182
|
|
|
150
183
|
```bash
|
|
151
|
-
|
|
184
|
+
bs plan ingest factory/specs/active/<epic>/plan-v1.json --project <project-dir> \
|
|
152
185
|
--session <session-id> --plan-version 1 --causal-parent <sign-off event id>
|
|
153
186
|
```
|
|
154
187
|
|
|
@@ -163,6 +196,14 @@ there means "not looked at", not "looked at and clean".
|
|
|
163
196
|
UI check found behind two epics. It is idempotent, so run it again on a
|
|
164
197
|
resumed session; read `added` and `edges` back, and say so when either is
|
|
165
198
|
0 on a plan that has tasks or edges.
|
|
199
|
+
|
|
200
|
+
Read `parallelism.widest` back from that same output, too. `parallel_with`
|
|
201
|
+
underneath it is claims-and-edges only -- import-graph crossings stay
|
|
202
|
+
`wave schedule --repo`'s job, not this key's -- so it can only ever name
|
|
203
|
+
a width that job would not contradict. A `widest` of 1 on a
|
|
204
|
+
plan of two or more tasks means every task the wave loop will ever run
|
|
205
|
+
sits behind some claim or edge that serializes it: flag that to the
|
|
206
|
+
operator now, before a run discovers it as a stalled wave.
|
|
166
207
|
8. If this epic opens a new roadmap milestone, add it to
|
|
167
208
|
`factory/specs/roadmap.md` (planner-maintained, architecture §12) — a
|
|
168
209
|
roadmap change is itself a scope change and needs the same operator nod.
|
|
@@ -8,8 +8,8 @@ duties, v3.2)"), plus running the scheduler first — a report that omits
|
|
|
8
8
|
pending proposals lets them sit invisible instead of surfacing them.
|
|
9
9
|
|
|
10
10
|
1. **Ask what the factory is answerable for, then run the scheduler.**
|
|
11
|
-
`
|
|
12
|
-
register `
|
|
11
|
+
`bs projects list` reads the roadmap's `- project:` bullets — the
|
|
12
|
+
register `bs new` writes to — and prints the factory itself plus every
|
|
13
13
|
project it built that has a checkout, ending in the `--project` line to
|
|
14
14
|
pass on. Do not assemble that list from memory: the maintenance pass
|
|
15
15
|
reads one lockfile per flag and reports one proposal per repo, so a repo
|
|
@@ -17,9 +17,9 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
17
17
|
mentioned. (The daemon raises `unwatched-project` for a child project with
|
|
18
18
|
a checkout that is left off the line — not for the factory itself, which is in
|
|
19
19
|
the pass by default, and not for a declared project with no checkout at
|
|
20
|
-
all, which `
|
|
20
|
+
all, which `bs projects list` marks with `?` instead of leaving it
|
|
21
21
|
off the printed list. The two surfaces no longer answer the same
|
|
22
|
-
question.) Then run `
|
|
22
|
+
question.) Then run `bs scheduler run
|
|
23
23
|
[--dry] --session <id> [--project <dir>...]` with those flags — a
|
|
24
24
|
deterministic pass over the event log, it never dispatches an agent
|
|
25
25
|
itself (`factory/policies/scheduler.yml`, architecture §12). Read its
|
|
@@ -42,7 +42,7 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
42
42
|
where the planner reads the living spec/analytics/recheck outcomes
|
|
43
43
|
and proposes new epics — the operator's tick is required regardless
|
|
44
44
|
of confidence, same as any other plan sign-off.
|
|
45
|
-
2. **Ask who may say yes.** `
|
|
45
|
+
2. **Ask who may say yes.** `bs scheduler admit --session <id>
|
|
46
46
|
[--project <dir>...]`, with the same flag line step 1 printed, re-reads
|
|
47
47
|
the same proposals and classifies
|
|
48
48
|
each one `auto` or `operator` against `scheduler.yml`'s `autonomy:`
|
|
@@ -66,9 +66,9 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
66
66
|
`confidence_floor` is an operator decision about standing policy, not
|
|
67
67
|
a way past one proposal — and a `security-surface` denial is the one
|
|
68
68
|
nothing in the file can lift.
|
|
69
|
-
3. Gather `
|
|
69
|
+
3. Gather `bs stats overview [--session <id>]` and `bs stats roadmap
|
|
70
70
|
[--session <id>]` (milestone progress + budget burn per milestone).
|
|
71
|
-
4. **Read back the disagreements.** `
|
|
71
|
+
4. **Read back the disagreements.** `bs judge escalations --session
|
|
72
72
|
<id>` folds the lineage for `quorum-decision` events whose latest word
|
|
73
73
|
was `escalate` — a gate finding, an epic verdict or a plan critique the
|
|
74
74
|
cross-provider quorum could not settle. It exits `1` on an open
|
|
@@ -83,7 +83,7 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
83
83
|
`mode: shadow` disagreement, which the gate outcome never reported to
|
|
84
84
|
anyone). Resolving one is an operator reading, never this session
|
|
85
85
|
deciding on its own which provider was right.
|
|
86
|
-
5. **Read back the parallelism.** `
|
|
86
|
+
5. **Read back the parallelism.** `bs wave audit --session <id>
|
|
87
87
|
[--epic <id>]` folds every `wave-admitted` against the
|
|
88
88
|
`dispatch_decision` intervals underneath it and says whether a wave
|
|
89
89
|
admitted N wide actually *ran* N wide. `wave check` only ever certified
|
|
@@ -97,11 +97,11 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
97
97
|
check before reporting it as a stall. A `partial` verdict is **not** a
|
|
98
98
|
finding; put `widest` in the digest as the one number that says how wide
|
|
99
99
|
this factory has ever actually run.
|
|
100
|
-
6. Dispatch **`scribe`** (`.claude/agents/scribe.md`, small tier) with that
|
|
100
|
+
6. Dispatch **`bs-scribe`** (`.claude/agents/bs-scribe.md`, small tier) with that
|
|
101
101
|
JSON plus step 2's admissions as input: shipped / in-flight / blocked /
|
|
102
102
|
budget burn / next milestone / **N rechecks pending, M maintenance
|
|
103
103
|
bumps auto-schedulable** (never silently dropped), ≤300 words, linking
|
|
104
|
-
into the dashboard (`
|
|
104
|
+
into the dashboard (`bs ui serve`'s URL) — never paraphrase numbers
|
|
105
105
|
the query didn't return.
|
|
106
106
|
7. This fires automatically on a weekly cadence and immediately on any
|
|
107
107
|
milestone completion (architecture §12) — for an ad hoc `/bs report`,
|
|
@@ -114,7 +114,7 @@ pending proposals lets them sit invisible instead of surfacing them.
|
|
|
114
114
|
|
|
115
115
|
**Provider calibration note (Phase 8).** While any provider in
|
|
116
116
|
`factory/policies/crosscheck.yml` is still `mode: shadow`, run
|
|
117
|
-
`
|
|
117
|
+
`bs stats providers [--session <id>] [--since <iso-date>]` alongside the
|
|
118
118
|
scheduler pass and fold a one-line mention into the digest when a provider
|
|
119
119
|
has accumulated enough runs to review (`runs`, `verdicts`, `agreementRate`,
|
|
120
120
|
`schemaFailureRate`, `transportFailureRate`, `failuresByCode` per provider —
|