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.
Files changed (36) hide show
  1. package/README.md +2 -2
  2. package/claude/CLAUDE.md +8 -8
  3. package/claude/guides/claude-prompting.md +59 -7
  4. package/claude/guides/cli-multi-model-workflow.md +6 -1
  5. package/claude/guides/coding-staged-workflow.md +12 -0
  6. package/claude/guides/gpt-prompting.md +60 -4
  7. package/claude/guides/learning-flow.md +4 -1
  8. package/claude/guides/llm-capability-boundary-patterns.md +8 -0
  9. package/claude/guides/review-request.md +13 -0
  10. package/claude/guides/session-distill-workflow.md +21 -9
  11. package/claude/guides/tooling-gotchas.md +181 -14
  12. package/claude/guides/verification-discipline.md +71 -3
  13. package/claude/hooks/tooling-gotchas-hook.py +50 -0
  14. package/codex/AGENTS.md +8 -8
  15. package/codex/guides/claude-prompting.md +59 -7
  16. package/codex/guides/cli-multi-model-workflow.md +6 -1
  17. package/codex/guides/coding-staged-workflow.md +12 -0
  18. package/codex/guides/gpt-prompting.md +60 -4
  19. package/codex/guides/learning-flow.md +4 -1
  20. package/codex/guides/llm-capability-boundary-patterns.md +8 -0
  21. package/codex/guides/review-request.md +13 -0
  22. package/codex/guides/session-distill-workflow.md +21 -9
  23. package/codex/guides/tooling-gotchas.md +181 -14
  24. package/codex/guides/verification-discipline.md +71 -3
  25. package/compose/corpus-state.py +1170 -0
  26. package/compose/write-update-cache.py +53 -0
  27. package/install.sh +198 -11
  28. package/launch/agent-launch.py +112 -6
  29. package/launch/agent-launch.zsh +109 -6
  30. package/launch/i18n/en.toml +1 -0
  31. package/launch/i18n/ja.toml +1 -0
  32. package/launch/i18n/ko.toml +1 -0
  33. package/learn/collect-learning.py +593 -62
  34. package/learn/redact.py +2 -1
  35. package/package.json +4 -2
  36. 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
- The discipline that covers all five: after adding a check, revert the fix it guards and watch the
134
- check fail. A control that survives a faithful revert was never testing the thing it names.
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