agent-bios 0.13.0 → 0.15.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/README.md +2 -2
- package/claude/CLAUDE.md +8 -8
- package/claude/guides/claude-prompting.md +59 -7
- package/claude/guides/cli-multi-model-workflow.md +6 -1
- package/claude/guides/coding-staged-workflow.md +12 -0
- package/claude/guides/gpt-prompting.md +60 -4
- package/claude/guides/learning-flow.md +4 -1
- package/claude/guides/llm-capability-boundary-patterns.md +8 -0
- package/claude/guides/review-request.md +13 -0
- package/claude/guides/session-distill-workflow.md +21 -9
- package/claude/guides/tooling-gotchas.md +181 -14
- package/claude/guides/verification-discipline.md +71 -3
- package/claude/hooks/tooling-gotchas-hook.py +50 -0
- package/codex/AGENTS.md +8 -8
- package/codex/guides/claude-prompting.md +59 -7
- package/codex/guides/cli-multi-model-workflow.md +6 -1
- package/codex/guides/coding-staged-workflow.md +12 -0
- package/codex/guides/gpt-prompting.md +60 -4
- package/codex/guides/learning-flow.md +4 -1
- package/codex/guides/llm-capability-boundary-patterns.md +8 -0
- package/codex/guides/review-request.md +13 -0
- package/codex/guides/session-distill-workflow.md +21 -9
- package/codex/guides/tooling-gotchas.md +181 -14
- package/codex/guides/verification-discipline.md +71 -3
- package/compose/corpus-state.py +1170 -0
- package/compose/write-update-cache.py +53 -0
- package/install.sh +198 -11
- package/launch/agent-launch.py +112 -6
- package/launch/agent-launch.zsh +109 -6
- package/launch/i18n/en.toml +1 -0
- package/launch/i18n/ja.toml +1 -0
- package/launch/i18n/ko.toml +1 -0
- package/learn/collect-learning.py +593 -62
- package/learn/redact.py +2 -1
- package/package.json +4 -2
- package/provenance.json +1 -1
|
@@ -34,11 +34,21 @@ the depth first:
|
|
|
34
34
|
over persisted real artifacts rather than re-running the whole pipeline to observe it.
|
|
35
35
|
- Probe at N=1 with the inputs precondition-checked. A single well-chosen case that reaches the
|
|
36
36
|
real path outranks a hundred that stop short of it.
|
|
37
|
+
- Bound the N=1 probe to reachability. One case settles whether a path works — never how often a
|
|
38
|
+
stochastic behavior holds. Before quoting a rate-shaped property (determinism, flake rate, an
|
|
39
|
+
A/B effect), confirm the mechanism honors your controls, establish the noise floor from runs on
|
|
40
|
+
hand, then sample enough to bound the rate against a no-treatment control on the real path. A
|
|
41
|
+
floor larger than the effect breaks the premise — record it before redesigning.
|
|
37
42
|
- Reserve the full design-review-plus-live-verification treatment for first-of-kind work and for
|
|
38
43
|
changes that move authority — who may decide, who may write, what is irreversible.
|
|
39
44
|
- Proportion assurance to the deployment context. A single-user tool operating on its owner's own
|
|
40
45
|
data does not warrant production-grade assurance, and treating it as if it did buys nothing
|
|
41
46
|
while delaying delivery. Prefer shipping.
|
|
47
|
+
- Census the population before a costed or irreversible batch. Read its current state cheaply and
|
|
48
|
+
deterministically — status distribution, version, presence of the artifacts the plan expects —
|
|
49
|
+
and compare that against the premise the batch rests on, halting to re-diagnose when the
|
|
50
|
+
distribution contradicts it. A probe validates the path; only the census validates that the
|
|
51
|
+
population is what the plan assumes. A cheap idempotent batch over a few items needs none.
|
|
42
52
|
|
|
43
53
|
The failure this prevents is not under-testing. It is spending the verification budget on the
|
|
44
54
|
cheap half of the risk and having nothing left for the part that could actually hurt.
|
|
@@ -62,10 +72,14 @@ cheapest one to write.
|
|
|
62
72
|
- Config or data: real parsers, schema checks, fixture validation, and sample transformations.
|
|
63
73
|
- Spreadsheets: static workbook checks, fixture-based output checks, cross-sheet flow checks, visual/layout checks, and real Microsoft Excel engine recalculation for formula-dependent results.
|
|
64
74
|
- Docs: links, terminology, current behavior alignment, and references to isolated historical notes.
|
|
75
|
+
- Multi-subject prose: when deliverables draw on material about different people, companies, or cases, bind every captured item to its subject and confirmation status at capture, and narrate nothing under a subject until that binding is confirmed. Cross-check subject-specific proper nouns and figures across all outputs before delivery — one subject's term under another is the signature of context bleed. Keep a figure in the same sentence as its composition, since a detached number is read at its worst.
|
|
65
76
|
- Release or distribution: after publishing to multiple independently writable channels (signed manifest, object storage, release host, embedded updater), digest-verify every referenced object against the staging original per channel — publish success and upload order are not evidence — and run the real installer/updater through its default path.
|
|
66
77
|
- A/B or on/off measurements: before accepting a null result, verify the arms actually received different treatment in the mechanism under test — a shared default or unconditional upstream step can silently apply the treatment to both arms.
|
|
78
|
+
- Multi-stage pipelines with nondeterministic stages: a final-output diff cannot attribute an effect or a regression to a stage — it conflates the change with run-to-run variance. Persist every stage's output, tabulate what each creates, may edit, and only guards, restrict the suspects to the stages that edit the content in question, and find the first stage where the intended effect disappears or the defect appears. Fix there, preferring a structural recheck over another prompt-level instruction that already failed.
|
|
79
|
+
- Before/after comparisons: pin the input to an immutable copy — a snapshot or versioned artifact — and run both arms against it, because a live artifact (a growing log, a regenerated upstream stage) drifts between runs and any diff over it, a matching one included, is evidence of nothing; when the arms are metered, restore the baseline's exact upstream inputs and re-run only the changed stage. This is input identity, not the separate unit-and-denominator basis rule.
|
|
67
80
|
- Model-behavior guardrails: verify by changed behavior, not recitation — a staged battery from named-trigger cases through disguised, deconfounded, category-wide, and single-variable framings; a clean pass means "no known defect", so re-run the battery when the model changes.
|
|
68
81
|
- Branch/version test builds against real data: explicitly separate every state sink the app touches (files, DB, OS-level stores that ignore env overrides), confirm the launch path propagates the isolation to child processes, and back up live data before the first run — a mismatched schema that drops unknown fields on write is data loss, not a no-op.
|
|
82
|
+
- Sandbox, replay, or re-adjudication runs on production-derived config: enumerate every outbound channel the stage can reach — publish, upload, notify, external write — and disable or redirect each one before the run, proving each disarm fires as you would prove a path guard; a guard on the input or target path alone leaves egress armed. Fingerprint every external destination before the run and diff it after, so an escaped write is caught by the run rather than by a recipient.
|
|
69
83
|
- Irreversible capture switches: when activation itself has unreproducible cost (a capture window that cannot be replayed), prove the downstream consumption path against existing samples before enabling — reversibility of the code path alone is not enough.
|
|
70
84
|
|
|
71
85
|
## Deriving the case space
|
|
@@ -108,6 +122,12 @@ someone typed once.
|
|
|
108
122
|
interrupted, a restore sitting after it never runs and the plant survives into a
|
|
109
123
|
commit. Plant in a copy where the shape allows it, and when it must be in place, snapshot
|
|
110
124
|
first and restore from the snapshot as its own step rather than trusting the probe to finish.
|
|
125
|
+
- Attribute a fault by a controlled contrast before choosing a remedy. Hold everything constant —
|
|
126
|
+
principal, path, input — vary only the candidate variable, and read a countable difference
|
|
127
|
+
(element dimensions, request count, status-code family). A missing error report is not
|
|
128
|
+
exoneration: channels can be suppressed, unobserved, or unwired from the mechanism at fault, so
|
|
129
|
+
"no violations logged" rules a cause out only when the contrast shows none either. Read the
|
|
130
|
+
contrast the evidence already holds before proposing a policy loosening.
|
|
111
131
|
|
|
112
132
|
## When a green means nothing
|
|
113
133
|
|
|
@@ -121,17 +141,65 @@ produce a green with no evidence behind it:
|
|
|
121
141
|
confirm its inputs satisfy the live branch's entry guard. A copied fixture that fails the new
|
|
122
142
|
guard routes silently into the about-to-be-deleted dead branch and stays green after the real
|
|
123
143
|
behavior breaks.
|
|
144
|
+
- **The fixture the producer never emits.** A test's input is evidence only when the thing that
|
|
145
|
+
produces it in production produced it. A wire fixture must be a raw response captured through
|
|
146
|
+
the same client that will parse it, never a rendered listing or a hand-written payload; a gated
|
|
147
|
+
feature's E2E must run with the gate in its production setting, on the state its real upstream
|
|
148
|
+
leaves. Replay against the live producer once, then probe every sibling built the same way.
|
|
124
149
|
- **The permissive fallback in the checker.** A `a || b` inside a gate absorbs a wrong assumption
|
|
125
150
|
and keeps passing. Checker code must assert the shape it expects and fail loud.
|
|
126
151
|
- **The suspiciously fast or empty run.** When a check goes green unexpectedly quickly, or reports
|
|
127
152
|
nothing at all, dump what it actually ran over before believing it. A harness that crashed early
|
|
128
153
|
and one that found nothing produce the same exit code.
|
|
154
|
+
- **The control that failed by crashing.** A negative control is evidence only when it fails
|
|
155
|
+
through the assertion it names: a traceback and a caught violation share an exit code, and an
|
|
156
|
+
early crash can pre-empt every control after it. Treat each traceback in a control run as a
|
|
157
|
+
defect until the run reports one named failure per planted violation. Run any unattended gate
|
|
158
|
+
with stdin closed, so a path reaching a prompt fails at once instead of hanging.
|
|
129
159
|
- **The control that went quiet.** A negative control indexing a live list stops testing when that
|
|
130
160
|
list empties, and says nothing about it. New controls build their own subject; resolving an item
|
|
131
161
|
means re-reading the controls for ones that have gone silent.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
162
|
+
- **The silent log.** Absence of activity is not evidence of non-use. Before retiring an
|
|
163
|
+
identity, key, or endpoint on a quiet log, show that the queried field is the one recording the
|
|
164
|
+
subject — delegated actions are attributed to the caller, with the target in another field, so
|
|
165
|
+
the wrong field returns clean silence — and that no live binding still references it, since a
|
|
166
|
+
reference proves use while emitting no traffic. Only a demonstrated "this use would have been
|
|
167
|
+
logged" evidences non-use.
|
|
168
|
+
- **The population that shrank.** A gate scanning an explicit list of files sees only "listed but
|
|
169
|
+
empty": a subject that migrates to an unlisted surface leaves the scanned set smaller yet
|
|
170
|
+
non-empty, so the empty-subject guard never fires while coverage erodes. Retarget the gate in
|
|
171
|
+
the same change that moves the code, and pin a floor so any decrease fails loudly — proved by
|
|
172
|
+
moving one subject out. A floor is a ratchet: never lower it to pass a run.
|
|
173
|
+
- **The mutant that never ran.** A mutation verdict counts only if the mutant is valid: it
|
|
174
|
+
compiled, sits on a path the exercised test traverses, and changes the guarded behavior, not
|
|
175
|
+
healed downstream or coinciding with a default. The runner must report build failure,
|
|
176
|
+
unreachable, and equivalent distinctly from KILLED and SURVIVED, and halt on a moved anchor.
|
|
177
|
+
More tests red than the mutation should touch indicts it; classify a survivor (rebuild,
|
|
178
|
+
discard, genuine gap) before writing a test.
|
|
179
|
+
- **The probe that measured the original.** A copied script that derives its root or targets from
|
|
180
|
+
its own location (`$0`, `BASH_SOURCE`, a `cd` to its parent) scans the original tree, not the
|
|
181
|
+
copy, so its verdict says nothing about the mutation you planted. Pin the subject in the copy,
|
|
182
|
+
copy the whole tree, or plant in place with a snapshot-restore. The tell is a result identical
|
|
183
|
+
to the unmutated run; a script taking its subject as an argument is safe to copy.
|
|
184
|
+
|
|
185
|
+
The discipline that covers every shape above: after adding a check, revert the fix it guards and
|
|
186
|
+
watch the check fail. A control that survives a faithful revert was never testing the thing it
|
|
187
|
+
names. Prove the plant landed: assert the altered input differs from the original and that the
|
|
188
|
+
control's cases reach the mutated branch before asserting rejection. Construct corruption
|
|
189
|
+
deterministically: scanning for a flip site yields no-op mutations reporting a rejection nothing
|
|
190
|
+
exercised.
|
|
191
|
+
|
|
192
|
+
## Before blaming code for a metric change
|
|
193
|
+
|
|
194
|
+
When a live metric collapses or crosses a pre-declared threshold, localize the change in time
|
|
195
|
+
before diagnosing the feature: confirm every inbound source is alive, compare only
|
|
196
|
+
contemporaneous cohorts, never re-processed rows, then bracket the transition to the finest unit
|
|
197
|
+
available and read the deploy log around that instant.
|
|
198
|
+
|
|
199
|
+
A change landing seconds from the last-good point is the prime suspect; a step in a window with
|
|
200
|
+
no deploys is an input-population shift, fixed by scoping the measured population, not the model
|
|
201
|
+
or the code. Declare the threshold before looking, and confirm a failure from the fleet's vantage
|
|
202
|
+
rather than your own — this does not replace fixing the comparison basis, which comes first.
|
|
135
203
|
|
|
136
204
|
## Keeping E2E honest
|
|
137
205
|
|