{"owner":"ben-manes","repo":"caffeine","hasSkills":true,"totalSkillsCount":155,"totalTokensCount":55473,"categories":["anthropic-skill","root-instruction","claude-rule","codex-rule","copilot-instructions","subagent-persona"],"hasMcp":false,"mcpConfig":null,"found":[".claude/skills/audit-build-ci/SKILL.md",".claude/skills/audit-arithmetic/SKILL.md",".claude/skills/audit-adversarial/SKILL.md",".claude/skills/audit-adaptivity/SKILL.md",".claude/skills/audit-adversarial-input/SKILL.md",".claude/skills/audit-contract-drift/SKILL.md",".claude/skills/audit-coverage-gaps/SKILL.md",".claude/skills/audit-feature-interaction/SKILL.md",".claude/skills/audit-correctness-proof/SKILL.md",".claude/skills/audit-exception-safety/SKILL.md",".claude/skills/audit-jcache-conformance/SKILL.md",".claude/skills/audit-iteration/SKILL.md",".claude/skills/audit-jdk-seam/SKILL.md",".claude/skills/audit-jmm/SKILL.md",".claude/skills/audit-lifecycle/SKILL.md",".claude/skills/audit-linearizability/SKILL.md",".claude/skills/audit-liveness/SKILL.md",".claude/skills/audit-map-contract/SKILL.md",".claude/skills/audit-memory-retention/SKILL.md",".claude/skills/audit-performance/SKILL.md",".claude/skills/audit-redundancy/SKILL.md",".claude/skills/audit-reentrancy/SKILL.md",".claude/skills/audit-regret/SKILL.md",".claude/skills/audit-serialization/SKILL.md",".claude/skills/audit-sibling-divergence/SKILL.md",".claude/skills/audit-state-machine/SKILL.md",".claude/skills/audit-subsystem-safety/SKILL.md",".claude/skills/audit-temporal-walk/SKILL.md",".claude/skills/audit-third-party-contracts/SKILL.md",".claude/skills/climber-gate/SKILL.md",".claude/skills/climber-minimize/SKILL.md",".claude/skills/optimize-cache/SKILL.md",".claude/skills/review-change/SKILL.md",".claude/skills/sim-analyze/SKILL.md",".claude/skills/sim-compare/SKILL.md","AGENTS.md",".claude/CLAUDE.md",".codex/config.toml",".github/copilot-instructions.md",".claude/agents/auditor.md",".claude/rules/async-cache.md",".claude/rules/code-comments.md",".claude/rules/concurrency.md",".claude/rules/design-decisions.md",".claude/rules/errorprone.md",".claude/rules/generated-code.md",".claude/rules/github-actions.md",".claude/rules/gradle-build.md",".claude/rules/guava-adapter.md",".claude/rules/jcache-adapter.md",".claude/rules/simulator.md",".claude/rules/testing.md",".codex/agents/auditor.toml",".claude/skills/audit-jdk-seam/fetch-openjdk.sh",".claude/skills/audit-jdk-seam/jbs.py",".claude/skills/audit-regret/regret.py",".claude/skills/audit-regret/search.py",".claude/skills/audit-regret/tenants.py",".claude/skills/audit-regret/test_csv.py",".claude/skills/audit-regret/workload.py",".claude/skills/audit-temporal-walk/README.md",".claude/skills/audit-temporal-walk/audit_paths.py",".claude/skills/audit-temporal-walk/fix-audit.txt",".claude/skills/audit-temporal-walk/invariant-ledger.txt",".claude/skills/audit-temporal-walk/lens-deletion.txt",".claude/skills/audit-temporal-walk/lens-intent.txt",".claude/skills/audit-temporal-walk/lens-sibling.txt",".claude/skills/audit-temporal-walk/per-commit.txt",".claude/skills/audit-temporal-walk/run.py",".claude/skills/audit-temporal-walk/test-walk.txt",".claude/skills/audit-temporal-walk/verify.py",".claude/skills/audit-temporal-walk/verify.txt",".claude/skills/audit-temporal-walk/walker.py",".claude/skills/climber-gate/a1_tenant.py",".claude/skills/climber-gate/admission.py",".claude/skills/climber-gate/admission_harness.py",".claude/skills/climber-gate/blind_gen.py",".claude/skills/climber-gate/blindlock.py",".claude/skills/climber-gate/byworkload.py",".claude/skills/climber-gate/census.py",".claude/skills/climber-gate/corner.py",".claude/skills/climber-gate/crashnoise.py",".claude/skills/climber-gate/demoflood.py",".claude/skills/climber-gate/descent.py",".claude/skills/climber-gate/escgen.py",".claude/skills/climber-gate/exposure.py",".claude/skills/climber-gate/floors.py",".claude/skills/climber-gate/frozen_matched.py",".claude/skills/climber-gate/gate.py",".claude/skills/climber-gate/gen.py",".claude/skills/climber-gate/gen2.py",".claude/skills/climber-gate/gen_adv.py",".claude/skills/climber-gate/gen_attacks.py",".claude/skills/climber-gate/gen_blindlock.py",".claude/skills/climber-gate/gen_h4c1.py",".claude/skills/climber-gate/gen_jam.py",".claude/skills/climber-gate/gen_moat.py",".claude/skills/climber-gate/gen_norank.py",".claude/skills/climber-gate/gen_straddle.py",".claude/skills/climber-gate/harness.py",".claude/skills/climber-gate/kvcache.py",".claude/skills/climber-gate/lcs2lirs.py",".claude/skills/climber-gate/marginal.py",".claude/skills/climber-gate/mechanism.py",".claude/skills/climber-gate/mixnoise.py",".claude/skills/climber-gate/pair.py",".claude/skills/climber-gate/probe.py",".claude/skills/climber-gate/real.py",".claude/skills/climber-gate/repeat.py",".claude/skills/climber-gate/run.py",".claude/skills/climber-gate/screen.py",".claude/skills/climber-gate/slowswap.py",".claude/skills/climber-gate/startwin.py",".claude/skills/climber-gate/sweep.py",".claude/skills/climber-gate/test_seed_tools.py",".claude/skills/climber-gate/traceio.py",".claude/skills/climber-gate/whisper.py",".claude/skills/climber-gate/whisper_mod.py",".claude/skills/climber-minimize/ablate.py",".claude/skills/audit-regret/specs/absolve.json",".claude/skills/audit-regret/specs/absolve_p8.json",".claude/skills/audit-regret/specs/bandrider.json",".claude/skills/audit-regret/specs/crestpast.json",".claude/skills/audit-regret/specs/deadpark.json",".claude/skills/audit-regret/specs/deadphase.json",".claude/skills/audit-regret/specs/drift.json",".claude/skills/audit-regret/specs/entryduty.json",".claude/skills/audit-regret/specs/flashpark.json",".claude/skills/audit-regret/specs/ghostclaim.json",".claude/skills/audit-regret/specs/hazefloor.json",".claude/skills/audit-regret/specs/jumpslide.json",".claude/skills/audit-regret/specs/jumpslide_260.json",".claude/skills/audit-regret/specs/jumpslide_period26.json",".claude/skills/audit-regret/specs/latebloom.json",".claude/skills/audit-regret/specs/latebloom_min.json",".claude/skills/audit-regret/specs/lifecycle_fit_scan.json",".claude/skills/audit-regret/specs/lowbar.json",".claude/skills/audit-regret/specs/mainsat.json",".claude/skills/audit-regret/specs/mixture.json",".claude/skills/audit-regret/specs/needle.json",".claude/skills/audit-regret/specs/needle_wide.json",".claude/skills/audit-regret/specs/norank.json",".claude/skills/audit-regret/specs/parkveil.json",".claude/skills/audit-regret/specs/parkveil_min.json",".claude/skills/audit-regret/specs/phases.json",".claude/skills/audit-regret/specs/pure_scan.json",".claude/skills/audit-regret/specs/ramp_retest.json",".claude/skills/audit-regret/specs/scarburst.json",".claude/skills/audit-regret/specs/shallowmoat.json",".claude/skills/audit-regret/specs/sidecliff.json",".claude/skills/audit-regret/specs/stillness_starve.json",".claude/skills/audit-regret/specs/stillness_starve_min.json",".claude/skills/audit-regret/specs/whisper.json",".claude/skills/optimize-cache/references/measurement.md",".claude/skills/optimize-cache/scripts/jmh-session.init.gradle"],"skills":{".claude/skills/audit-build-ci/SKILL.md":"---\nname: audit-build-ci\ndescription: Audit build and CI configuration for correctness risks\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the build and CI configuration for subtle correctness risks.\n\nRead the build files and CI workflows before analyzing:\n- `build.gradle.kts` (root and caffeine module)\n- `gradle/plugins/` (custom Gradle plugins)\n- `.github/workflows/` (GitHub Actions)\n- `gradle.properties`\n\nConsider:\n- Misconfigured dependency scopes\n- Incorrect test isolation\n- Non-reproducible builds\n- Incorrect Gradle cache configuration\n- Missing failure modes (tests passing when they shouldn't)\n- Incorrect CI matrix coverage\n- Silent test skipping\n- Multi-line YAML values that get interpolated elsewhere (a `>` folded scalar\n  keeps a trailing newline; splicing one into another folded scalar embeds that\n  newline mid-string, so a consumer splitting on literal spaces mis-parses the\n  spliced-in value's last token)\n- Performance problems in the build\n- Security issues (dependency vulnerabilities, secret exposure)\n- Bad practices that could cause false confidence\n- Retry and re-run paths (in-job retry loops, `workflow_run` re-runners) and what each treats\n  as infrastructure. A job that exceeds `timeout-minutes` concludes `cancelled`, not `failure`,\n  and a hung test reaches CI that way\n- Matrix legs that name a JDK distribution: without a vendor constraint, toolchain resolution\n  may pick another detected JDK of the same version\n\nReport only issues that could cause incorrect artifacts, missing\nfailures, or false confidence in test results.\n\nPrice a CI finding against live history, not only the YAML: `gh api` for the ruleset and\ncheck-run conclusions, `gh run view <id> --log` (with `--attempt`/`--job`) for what a green run\nactually hid. A mechanism in a workflow and a run that concealed a failure are separate claims.\nRead-only queries only.\n",".claude/skills/audit-arithmetic/SKILL.md":"---\nname: audit-arithmetic\ndescription: Audit for arithmetic and boundary bugs (overflow, off-by-one, drift)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume there is at least one arithmetic or boundary bug in this code.\n\nAudit for:\n- Off-by-one errors\n- Incorrect inequality direction (< vs <=, > vs >=)\n- Overflow / underflow (int, long, specifically nanoTime arithmetic)\n- Implicit narrowing or widening conversion\n- Incorrect rounding or truncation\n- Sign errors\n- Sentinel value collisions (can a valid value equal a sentinel?)\n- Counter drift (can a counter diverge from the quantity it tracks\n  over a long-running cache?)\n- Timer wheel bucket arithmetic (modular arithmetic, wrap-around)\n- Frequency sketch counter saturation and reset arithmetic\n- Hill climber / adaptive sizing: window vs main partition adjustment; the density and\n  probe-verdict log-ratios (`ln((x+ε)/(y+ε))`), the probation-capacity denominator\n  (`max(1, maximum − windowMaximum − mainProtectedMaximum)`), the saturated `4·maximum`\n  sample period, and the stride/commitment rung tables\n  (percentage calculations, rounding, overshoot, oscillation)\n- FrequencySketch table size calculation (ensureCapacity rounding to\n  power of two, interaction with maximumSize)\n- Weight delta computation in UpdateTask (sign conventions, can\n  intermediate sums overflow when weights are near Integer.MAX_VALUE?)\n\nFor each suspected issue:\n- Provide a concrete input (specific key, value, weight, time values)\n- Show step-by-step evaluation through the code\n- Show expected vs actual behavior\n- If it requires billions of operations, state the count needed\n\nIgnore style and performance.\nOnly report high-confidence defects supported by evaluation traces.\n",".claude/skills/audit-adversarial/SKILL.md":"---\nname: audit-adversarial\ndescription: Hostile full-codebase review by parallel adversarial agents with no design context — finds bugs that domain familiarity masks\nargument-hint: \"[subsystem or file to focus on, default: all source files]\"\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent\n---\n\nRun a hostile adversarial review of the Caffeine source code. Unlike the other\naudit skills which use the auditor agent (with design context), this skill\ndeliberately gives reviewers NO project context — they review with fresh eyes\nand a hostile mindset.\n\n## Target\n\n$ARGUMENTS\n\nIf no argument, review all source files in `caffeine/src/main/java/`,\n`guava/src/main/java/`, `jcache/src/main/java/`, `simulator/src/main/java/`,\nand `examples/*/src/main/java/`. The adapters hold the same quality bar as the\ncore. The examples are sketches: report one failing at what it shows, not\nhardening it leaves to the user (`ruled-out.md` §examples).\n\n## Step 1: Inventory source files\n\nList all Java source files in scope. Group into 6-8 subsystems for parallel\nreview — core subsystems plus one group per non-core module (examples reviewed\nagainst the contracts of the third-party libraries they compose).\n\n## Step 2: Launch parallel hostile reviewers\n\nSpawn 4-6 subagents simultaneously. Each reviews one subsystem. Critically:\n**DO NOT give them design-decisions.md, synchronization.md, or any .claude/docs.**\nThey should review from first principles only.\n\nEach agent gets this prompt (adapted to their subsystem):\n\n```\nYou are a senior Java concurrency expert performing a hostile code review.\nA competitor built this library and it's gaining adoption over your work.\nYou want to find every flaw to demonstrate it's not production-worthy.\n\nYour reputation is on the line. Be ruthless but precise — cite methods,\ntrace code paths, construct failing scenarios.\n\nRules:\n- Dig deep. Zero findings are allowed ONLY with a coverage proof listing\n  files inspected, methods traced, interleavings attempted, and attack\n  surfaces checked. If coverage is shallow, keep looking.\n- Every finding must include: exact location, concrete evidence, a\n  falsifiable scenario, and confidence (high/medium).\n- Only report issues provable with code evidence\n- Construct concrete interleavings, inputs, or scenarios\n- Do not critique style — focus on correctness and robustness\n- Do not accept \"by design\" — if the design has consequences, document them\n- Read the actual source code before making claims\n- Look for what's MISSING, not just what's wrong\n\nAttack surfaces:\n1. Memory model violations — insufficient access modes, missing happens-before\n2. State corruption interleavings — weight divergence, deque corruption, stuck drain status\n3. Resource leaks under failure — OOME/SOE leaving unrecoverable state\n4. Silent data loss — values dropped without notification\n5. Specification violations — ConcurrentMap contract, Javadoc promises\n6. Denial of service — O(n) operations on O(1) paths\n7. Sentinel value collisions — can valid input equal an internal sentinel?\n8. Validation gaps — inputs accepted at parse time but rejected later\n9. API surprises — public methods returning nonsensical values\n10. Notification asymmetries — some paths notify, equivalent paths don't\n11. Third-party API contract misuse — error/dispose paths, duplicate keys,\n    empty batches, cancellation semantics assumed rather than verified\n\nRate each finding: critical/high/medium/low\nFormat: numbered list with file:method, description, evidence\n```\n\n## Step 3: Validate completeness\n\nIf any agent returns zero findings, require a coverage summary from that\nagent (scope inspected, attack surfaces checked, interleavings attempted).\nRe-launch with a more specific prompt only if coverage is shallow. Zero\nfindings with thorough coverage proof is acceptable.\n\n## Step 3.5: Evaluator challenge (per reviewer)\n\nFor each reviewer that returned findings OR a zero-findings coverage proof,\nspawn a separate evaluator subagent. The evaluator gets ONLY the reviewer's\nreport — no source code, no design docs.\n\n```\nYou are a hostile evaluator reviewing another auditor's report of a Java\ncache library. Your job is to find what the auditor MISSED.\n\n1. For each confirmed invariant, construct a 2-thread interleaving that\n   would violate it. If you cannot, explain what prevents it.\n2. For each zero-finding claim, identify the most likely bug category\n   the auditor could have missed given their stated coverage.\n3. For each finding, check whether the evidence is concrete or hand-wavy.\n   Flag findings that assert a bug without a specific interleaving.\n\nOutput: prioritized list of challenges for the reviewer to address.\n```\n\nHave the original reviewer address each challenge by re-reading source code.\nDrop findings the reviewer cannot defend. Add new findings from challenges\nthe reviewer confirms.\n\n## Step 4: Consolidate and deduplicate\n\nCollect findings from all agents. Deduplicate (same issue found by multiple\nagents = higher confidence). Remove findings that are clearly wrong (misreading\nthe code). Keep findings even if they might be \"by design\" — the point is to\nsurface things domain familiarity masks.\n\n**Confidence decay check**: If any reviewer's findings are >60% medium-confidence,\nnote this in the report — that reviewer's area may need a more targeted follow-up\naudit rather than more speculative findings.\n\n**Escalation**: If any reviewer flagged issues they could not resolve statically\n(e.g., \"depends on JDK internal behavior\"), mark these as ESCALATED for dynamic\ntesting (Fray, LinCheck, JCStress) rather than guessing.\n\n## Step 5: Adjudicate against design docs\n\nNOW read `.claude/docs/design-decisions.md`, `.claude/rules/design-decisions.md`,\nthe relevant module rules, and `.claude/docs/ruled-out.md`'s standing principles\nand module section. For JCache, consult the relevant topic in\n`.claude/docs/jsr107-conformance.md` and verify surviving conformance claims\nagainst its JSR-107 1.1.1 specification and API sources. State any normative\nsource that was not consulted. For each finding, check whether it is an\nintentional trade-off and reclassify it:\n- **confirmed** — supported evidence violates an applicable contract or invariant;\n  absence of a design explanation alone is insufficient\n- **intentional** — documented design decision, not a defect\n- **ambiguous** — needs more evidence or maintainer input\n\nKeep intentional findings in the report (labeled as such) but do not count\nthem as bugs. The value is surfacing them for review, not asserting they're wrong.\n\n## Step 6: Triage confirmed findings\n\nClassify using `.claude/docs/finding-taxonomy.md` for severity and categories.\nAdditionally tag each confirmed finding:\n- **bug** — incorrect behavior, provably wrong\n- **api-issue** — public API returns surprising/incorrect values\n- **validation-gap** — input accepted when it shouldn't be\n- **robustness** — works but fragile, could break with minor changes\n- **cosmetic** — dead code, wasteful patterns, poor diagnostics\n\n## Step 7: Report\n\nWrite the full report to `.local/audits/<model>/audit-adversarial.md`\n(see `.claude/docs/audit-output.md`).\n\nFormat:\n```\n# Adversarial Review: Caffeine Source Code\n\n[N] parallel auditors reviewed [M] source files (~K lines).\nFindings consolidated, deduplicated, and triaged by severity.\n\n## Likely Bugs\n...\n\n## API/Behavioral Issues\n...\n\n## Robustness/Validation Gaps\n...\n\n## Design/Maintenance Concerns\n...\n\n## Summary\n[N] likely bugs, [M] API issues, [K] validation gaps, [J] concerns.\n[N] evaluator challenges received across [M] reviewers.\n```\n",".claude/skills/audit-adaptivity/SKILL.md":"---\nname: audit-adaptivity\ndescription: Audit the adaptive window hill-climber and region-resize logic for implementation defects (not algorithm quality)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the adaptive W-TinyLFU control loop and the admission-window / main-region\nresize logic for IMPLEMENTATION defects. This is the one eviction subsystem not in\n`/audit-subsystem-safety`'s scope, and it was recently rebuilt — the climber now lives in the\npackage-private `WindowClimber` class (reached through the generated `climber` field), with a new\ndensity-signal + probe-machine large tier (>4096) — so it has elevated bug density.\n\n## Scope boundary — implementation correctness, NOT algorithm quality\n\nThe adaptation policy itself is at its tuned frontier. Out of scope: convergence\nrate, hit-rate, oscillation-as-a-design-tradeoff, and the choice of the tuning\nconstants. (Behavioral hit-rate regression against the adversarial trap suite is\n`/climber-gate`'s job, not this audit's.) Do NOT report \"the climber could converge faster / oscillates / constant\nX should be Y.\" Report only defects: arithmetic that yields a wrong value, a sign\nerror, a state that violates a structural invariant, a race, a NaN, or an overflow.\n\n## Methods in scope\n\n- `climb`, `determineAdjustment` — the feedback step (reactive: hit-rate delta; density:\n  within-sample densities → step → adjustment). `determineAdjustment` carries\n  `mainProtectedMaximum` to size the probation capacity for the probe verdict\n- `densityClimb`, `armProbe`, `walkStep`, `probeEnding`, `undoProbe`, `DensityClimber.steer` — the\n  large tier's signal, probe machine, and verdict internals (all on `WindowClimber`)\n- `increaseWindow`, `decreaseWindow`, `demoteFromMainProtected` — region transfer\n- `setMaximumSize` — initial window/main split, plus `WindowClimber.resized` (the\n  `SLOW_ADAPT_THRESHOLD` step-sign flip and the probe-machine reset)\n- `evictFromWindow` / `evictFromMain` — they consume the region maxima the climber sets\n\nProbe machine (>4096, in `WindowClimber`): starved samples (region hits below\nmax(4, requestCount >> MIN_SIGNAL_SHIFT)) at a blind corner launch a bold-driver walk.\nEndings: crash-abort (full undo, refractory re-armed WITHOUT doubling), reversal-through-base and\nbudget expiry (failed experiments: full undo + ladder x2), adjudication at >=4x the bar under the\ncommitted depth (confirm keeps the position + ladder resets to 1; anything else fails with a full\nundo). The verdict is asymmetric BY DESIGN: an up-probe confirms iff\n`ln((windowDensity+eps)/(walk.baseProbationDensity+eps)) > 0` — the probation-marginal baseline\nFROZEN in `armProbe` — while a down-probe uses the average-density sign test (`error*dir > 0`).\nLadder: PROBE_BACKOFF_INITIAL (16) doubling to _MAX (64). Invariants to audit:\n1 <= starvation.rung <= 64; 0 <= refractoryLeft <= starvation.rung, which both oracles assert\ndirectly — the walk budget is a separate field (`Walk.samples`, bounded by PROBE_WALK_BUDGET) on\nan object that exists only while walking, so the two can no longer alias; probe state fully reset\nby resized; an undo returns exactly to `walk.baseWindow`; the below-floor lift cannot exceed the\nfloor; `sample.probationHits <= sample.hits - sample.windowHits`;\n`walk.baseProbationDensity` is written ONLY in `armProbe` (each re-arm re-snapshots) and is\nnon-negative and finite; the probation capacity denominator is\n`max(1, maximum - windowMaximum - mainProtectedMaximum)` — capacities, never occupancy.\n\nNOT bugs (adjudicated design; read `hill-climber.md` §4 before flagging): the up/down verdict\nasymmetry (the window has no marginal substructure to price against); the frozen — hence\nstale-looking — baseline (judging against the LIVE probation rate is an absorbing false-veto: the\nwalk's own demotions enrich it — the demoflood gate row; a cold-start-transient baseline is\nbounded and self-heals because every re-arm re-snapshots); probation attribution captured\nBEFORE `reorderProbation` can promote the entry in `onAccess` (the promoting access counts as a\nprobation hit, the next as protected); a zero baseline auto-confirming any >=4x-bar earnings\n(the opportunity cost of a dead boundary is ~zero — nullchurn stays harmless); and the lowmix\nnamed trade (a gate sentinel). A walk's bases (`down`, `baseHitRate`, `baseWindow`,\n`baseProbationDensity`) are `final` on the `Walk` object, which exists only while one is in\nflight — \"dead state while not probing\" is the absent object, so there is nothing to go stale.\n\nCache-side fields: `windowMaximum`, `mainProtectedMaximum`, `windowWeightedSize`,\n`mainProtectedWeightedSize`; `QUEUE_TRANSFER_THRESHOLD`.\n\n`WindowClimber` owns `adjustment`, `sample` (`Sample`: `hits`, `misses`, `windowHits`,\n`probationHits`, `previousHitRate`), and `tier` (a `ReactiveClimber` or `DensityClimber`).\nThe `Climber` base class owns `step` (`Step`: `size`), initialized from the maximum and the\nstrategy's chosen direction at construction. `DensityClimber` owns `refractoryLeft`, `retreatLeft`,\n`undoRemaining`, and its helper objects: `walk` (`Walk`, null while none is in flight:\n`ladder`, `isAudit`, `down`, `baseWindow`, `baseHitRate`, `baseSmoothedRate`,\n`baseProbationDensity`, `samples`, `belowBarStreak`, `aboveStreak`, `beatBase`), `starvation` and\n`audit` (a `Ladder` each: `rung`, `crashStreak`), `auditClock` (`AuditClock`: `down`,\n`waitSamples`, `stillSamples`, `lastWindow`), `anchor` (`Anchor`: `window`, `rate`, `held`,\n`freshLeft`, `returning`, `returnLeft`, `shortfallStreak`), and `rates` (`Rates`: `smoothed`,\n`deviation`). `Reading` is the per-sample derived view, computed once and read-only.\n\nThe 38 constants live with the mechanism each tunes, so a knob names its owner:\n`WindowClimber` — `RESTART_THRESHOLD`;\n`DensityClimber` — `DENSITY_THRESHOLD`, `DENSITY_GAIN`, `SAMPLE_MULTIPLIER`;\n`Step` — `STEP_PERCENT`, `STEP_DECAY_RATE`, `MIN_INITIAL_STEP`;\n`ReactiveClimber` — `SLOW_ADAPT_THRESHOLD`, `SLOW_ADAPT_RATIO_CAP`, `SLOW_ADAPT_DECAY_RATE`;\n`Reading` — `STABLE_BAND_FRACTION`, `MAX_STEP_FRACTION`, `WINDOW_FLOOR_FRACTION`,\n`DENSITY_EPSILON`, `MIN_SIGNAL_SHIFT`, `MIN_STARVATION_BAR`;\n`Rates` — `VETO_MARGIN_MIN`, `RATE_SMOOTHING`, `DEVIATION_SEED`, `VETO_MARGIN_SCALE`;\n`AuditClock` — `AUDIT_WAIT_INITIAL`, `AUDIT_WAIT_FIRST`, `AUDIT_WAIT_MAX`;\n`Anchor` — `VETO_STREAK`, `VETO_RETURN_BUDGET`;\n`Walk` — `PROBE_WALK_BUDGET`, `PROBE_BAR_CAP`, `PROBE_EXIT_BAR_MULTIPLE`,\n`AUDIT_CRASH_PERSISTENCE`, `AUDIT_COMMITMENT`, `AUDIT_CONFIRM_STREAK`;\n`Ladder` — `PROBE_BACKOFF_INITIAL`, `PROBE_BACKOFF_MAX`, `PROBE_CRASH_ESCALATION`,\n`PROBE_STRIDE_SCALE_MID`, `PROBE_STRIDE_SCALE_DEEP`, `PROBE_COMMITMENT_MID`,\n`PROBE_COMMITMENT_DEEP`.\n\n## Structural invariants to attack (violations are real bugs)\n\n1. **Region partition sum**: `windowMaximum + mainMaximum` (probation + protected)\n   must equal `maximum` after every climb and every resize. Can any single transfer,\n   or a sequence capped by `QUEUE_TRANSFER_THRESHOLD`, drift the sum?\n2. **Non-negative maxima**: can `windowMaximum` or `mainProtectedMaximum` go negative\n   — a quota larger than the donor region, or repeated `decreaseWindow` at the floor?\n   EXCEPTION (adjudicated 2026-07, F1; duration priced 2026-08-22, M1): a transiently\n   negative `policyWeight` — the sanctioned telescoping race, an out-of-order UpdateTask\n   drain — can over-shift the caps beyond the commanded adjustment, even past these\n   bounds. Tolerated by design: the caps are policy targets (eviction is driven by the\n   telescoping `weightedSize`/`maximum`), and they walk back only by the weight each later\n   transfer moves, so a swing larger than a cycle's transfer suspends the split for many\n   cycles with the total still bounded. Report cap drift only with a mechanism that never\n   walks back.\n3. **Quota accounting**: in `increaseWindow`/`decreaseWindow` the `quota` is decremented\n   per transferred node by `policyWeight`. With weighted entries, can `quota` underflow,\n   skip/over-run the loop, or transfer the wrong count? Does the\n   `QUEUE_TRANSFER_THRESHOLD` cap leave the regions half-adjusted such that the next\n   `climb` mis-reads them? (Same F1 exception as #2 for the negative transient.)\n4. **`determineAdjustment` math**:\n   - `requestCount = hits + misses`; the early return guards `requestCount <\n     effectiveSampleSize`. Is the `hitRate` division ever reachable with\n     `requestCount == 0`?\n   - small-cache branch (`ReactiveClimber.samplePeriod`): `(long) (sketchSampleSize * ratio)`,\n     where `ratio = clamp(initialStep / magnitude)`. Can `initialStep` be 0 (maximum 0 or\n     tiny) making `magnitude` 0 → division by zero? Can the `(long)` cast truncate\n     `ratio` so it defeats the intended sample-period growth?\n   - `ReactiveClimber.climb` uses `Math.copySign(Step.restartMagnitude(max), amount)`. For\n     `amount == 0.0` / `-0.0`, does `copySign` choose the intended direction? Can `step.size`\n     become NaN or 0 and **permanently stall** adaptation (a stuck-window *bug*, distinct from\n     slow convergence)?\n5. **`setMaximumSize` at boundaries**: the step-sign flip at `max <= SLOW_ADAPT_THRESHOLD`\n   plus a *runtime* maximum change via `Policy.eviction.setMaximum` — when `maximum`\n   crosses `SLOW_ADAPT_THRESHOLD` in either direction, do the window/main split, the\n   `step.size` sign, and the sample state stay mutually consistent?\n6. **Stale `adjustment` and sample memory across the gates**: `climb` calls\n   `determineAdjustment` then `increaseWindow`/`decreaseWindow` off the climber's `adjustment`.\n   The tier is skipped on three paths: an uninitialized sketch (`resetSample`), a sub-period\n   sample, and a cache below half occupancy (`discardSample`, which resets a full sample). Can a\n   stale `adjustment` from a prior cycle be re-applied? The half-full gate is reachable mid-life\n   while the tier's walk, anchor and rates persist, so also check what each path does to the\n   cross-sample `previousHitRate` that the reactive step, the stand-down trigger\n   (`isWorkloadShift`) and the walk's bold driver (`nextStride`) compare against.\n7. **Layer ownership of the ladders, streaks, and schedules** — the highest-yield row, because\n   it has produced two real bugs and both were invisible from a single code path.\n   `hill-climber.md` §4 carries a **write-owner table** (observation / active walk / starvation\n   retry / audit retry+schedule / goal guard / motion out). Enumerate **every** write to\n   `starvation.rung`, `starvation.crashStreak`, `audit.rung`, `audit.crashStreak`,\n   `auditClock.waitSamples`, `auditClock.stillSamples`, `anchor.held`, `anchor.freshLeft` and\n   check each against its owner —\n   *including endings that are not crashes*. Both landed defects were exactly this shape: the\n   shared crash streak let exogenous pulses pair separate audit crashes into a rung ratchet\n   (H4-C1), and later a non-crash ending (budget expiry, reversal-through-base) still cleared\n   the **other** layer's streak, which disarmed that layer's escalation and its\n   `AUDIT_CRASH_PERSISTENCE` tolerance — so an interleaved blind corner reached around the first\n   fix. One cross-write is sanctioned, journaled: an audit confirm rewards the starvation\n   ladder (`starvation.reward`) and zeroes its refractory. An audit's undo leaves the\n   refractory alone (since 2026-08-16, pinned by\n   `undoProbe_auditRetreat_leavesTheStarvationRefractoryAlone`). Anything else is a finding.\n   Checkable products the oracles already\n   assert, and which a new invariant should join: `anchor.freshLeft > 0 ⇒ anchor.held`,\n   `anchor.held ⇒ anchor.isPlanted`, `walk != null ⇒ undoRemaining == 0`, and\n   `auditClock.waitSamples > PROBE_BACKOFF_MAX ⇒ audit.rung == PROBE_BACKOFF_MAX` (the ratchet as\n   an invariant). Note the one *legitimate* coupling so it is not reported: the audit clock is a\n   function of window position, so any layer that moves the window decays `stillSamples` — that\n   is the intended semantics, and it is the remaining path by which frequent blind corners defer\n   audits.\n\n## Output\n\nFor each defect: give concrete maximum/weight/access values, trace the arithmetic\nstep by step, show the resulting invariant violation or wrong region size, and a\nVerification (a `BoundedLocalCacheTest` white-box method plus the required `-P` flags).\n\nEverything here runs under `evictionLock` (single-writer), so most findings will be\narithmetic / state-corruption, not races — but explicitly check whether any\nclimber-written field (`adjustment`, `step.size`, the region maxima) is also read\noff-lock by a concurrent reader before concluding \"single-writer, cannot race.\"\n",".claude/skills/audit-adversarial-input/SKILL.md":"---\nname: audit-adversarial-input\ndescription: Analyze behavior under adversarial or extreme API inputs\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects triggered by adversarial or extreme API inputs.\n\nFor each category, construct concrete inputs and trace the code path:\n\n1. **Weight extremes**: Integer.MAX_VALUE for every entry (overflow?),\n   MAX_VALUE→1 delta (overflow?), 0 for all (unbounded growth?),\n   inconsistent weigher (divergence?).\n\n2. **Expiry extremes**: Long.MAX_VALUE nanos (timer wheel overflow?),\n   0 or negative (infinite loops?), MAX→0 transitions, alternating durations.\n\n3. **Maximum size extremes**: Long.MAX_VALUE (arithmetic overflow?),\n   maximumSize(0) (graceful degeneration?), maximumSize(1) (temporary oversize?).\n\n4. **Key/value adversarial behavior**: constant hashCode(0) (sketch degeneration?),\n   slow equals() (lock hold explosion?), mutating hashCode (silent corruption?),\n   huge values (allocation failure handling?).\n\n5. **Concurrency extremes**: 10K threads on same computeIfAbsent, puts exceeding\n   maintenance throughput (backpressure?), refresh storms from short refreshAfterWrite.\n\n6. **Frequency sketch saturation**: all accesses to same key, all unique keys\n   (reset cost?), counter overflow beyond 4-bit limit.\n\n7. **Time extremes**: nanoTime near Long.MAX_VALUE (wrap-around?), non-monotonic\n   ticker, large time jumps (timer wheel handling?).\n\nFor each issue: state input values, trace computation, state whether it causes\nincorrect behavior / OOM / infinite loop / degraded performance / graceful handling.\n\nDo not report issues requiring API contract violations (e.g., null keys)\nunless the violation is undetected and causes silent corruption.\n",".claude/skills/audit-contract-drift/SKILL.md":"---\nname: audit-contract-drift\ndescription: Find places where documented API contracts and the implementation diverge\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nMost audits read code; this one reads documentation first and then traces each\npromise to every implementation path that should honor it. The bugs caught here\nare not concurrency or arithmetic defects — they are quiet contradictions\nbetween what the javadoc promises and what the code does.\n\nBuild a list of behavioral promises from public API docs, then trace each one\nto every code path that should honor it.\n\nSources of contracts to enumerate:\n\n- `Caffeine.java` — every `<b>Note:</b>` and `<b>Warning:</b>` block in a\n  builder method's javadoc. Pay particular attention to:\n  - `weakKeys`, `weakValues`, `softValues` — equality semantics flip to\n    identity (`==`) for the configured strength\n  - `expireAfter*`, `refreshAfterWrite` — duration constraints, what\n    \"expired\" means at boundaries\n  - `maximumSize`, `maximumWeight` — eviction triggering and amortization\n  - `removalListener`, `evictionListener` — when and how notifications fire\n- `Cache.java`, `LoadingCache.java`, `AsyncCache.java`, `AsyncLoadingCache.java`\n  — javadoc of every method, especially \"must\", \"will\", \"guarantees\",\n  \"for any reason\" language.\n- `Policy.java` — every method's documented behavior.\n- `Weigher.java`, `Expiry.java`, `RemovalListener.java`, `RemovalCause.java`\n  — user-facing contracts referenced by the cache.\n- **Internal obligations** — \"callers must\" contracts stated in\n  `.claude/rules/*.md` and in internal-class javadoc across all modules (e.g.\n  jcache's EventDispatcher requires every publishing thread to drain via\n  awaitSynchronous/ignoreSynchronous; async operations must register with the\n  in-flight set). Enumerate each obligation, then verify every call site honors\n  it — including executor-thread and refresh paths that don't flow through the\n  obvious entry points.\n\nFor each contract, record the exact wording, the configurations that activate\nit, and the set of operations affected.\n\nThen trace each promise through every code path that should honor it:\n\n- Direct API calls on `Cache` / `LoadingCache` / `AsyncCache`\n- `asMap()` view methods (`size`, `isEmpty`, `containsKey`, `containsValue`,\n  `get`, `put`, `remove(k)`, `remove(k,v)`, `replace`, `compute*`, `merge`,\n  `equals`, `hashCode`)\n- `asMap().keySet()` / `values()` / `entrySet()` — `contains`, `remove`,\n  `removeAll`, `retainAll`, `removeIf`, `iterator`, `spliterator`\n- Bulk operations (`putAll`, `getAll`, `getAllPresent`, `invalidateAll`)\n- `AsyncCache.synchronous()` round-trip — does the sync view honor the same\n  contract as the async cache?\n- Serialization round-trip — does the deserialized cache honor the same\n  promises about expiration durations, loader presence, etc.?\n\nA path that uses a different equivalence, ordering, or visibility from what\nthe contract promises is a **contract drift** finding. So is a path that\nsilently downgrades a configuration on round-trip.\n\nCommon drift patterns to check explicitly:\n\n- **Identity vs. equals on weak/soft caches**: `weakKeys`/`weakValues`/\n  `softValues` promise identity, but view collections that use\n  `o.equals(value)` or `Collection.contains(value)` may apply the user's\n  equality semantics instead.\n- **Cardinality vs. presence asymmetry**: methods documented as treating\n  in-flight async values as absent must align with `size`, `isEmpty`,\n  `equals`, `hashCode`, and iterators on the same view.\n- **Notification \"for any reason\"**: `removalListener` documented to fire\n  for any cause, but async paths may drop notifications for null or\n  exceptional completions.\n- **Cross-version serialization**: serialized fields renamed or defaulted\n  differently across versions can silently lose configuration or throw\n  on round-trip.\n- **Same-instance return semantics**: e.g., `compute(k, (k,v) -> v)` is\n  documented one way but updates timestamps/weight regardless.\n- **`size()` documented as estimate**: this is an explicit out — verify it\n  is actually documented as an estimate everywhere it diverges from logical\n  presence.\n- **Synchronous vs. asynchronous view divergence**: the `synchronous()`\n  view's `asMap()` may treat in-flight entries inconsistently across query,\n  mutation, and cardinality methods.\n\nEach finding should anchor both sides of the drift — the source of the\ncontract (file + javadoc snippet) and the divergent implementation (file +\nmethod) — and include a minimal user-observable scenario where the docs and\nthe code disagree.\n",".claude/skills/audit-coverage-gaps/SKILL.md":"---\nname: audit-coverage-gaps\ndescription: Discover test coverage gaps that could hide correctness defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume the existing tests miss at least one real defect.\n\n1. For each public method, identify the hardest-to-test edge cases:\n   - Null values (where permitted)\n   - Maximum/minimum weight\n   - Zero-duration expiration\n   - Mapping functions that return the same instance\n   - Mapping functions that throw\n   - Weighers that throw\n   - Expiry callbacks that throw\n   - CompletableFuture values (async cache edge cases)\n   - Keys/values with adversarial hashCode/equals\n\n2. For each edge case, trace the code path. Does the code handle it correctly?\n\n3. Identify combinatorially hard behavioral dimensions:\n   - Operation A on expired entry during concurrent operation B\n   - Exception in user callback X while holding lock Y\n   - GC collecting reference R between code points P and Q\n   - Fast path falls through to slow path under contention (e.g.,\n     entry appears expired on fast path, recovers under lock on slow path)\n   - Async cache: future completes between check and action (e.g.,\n     isComputingAsync returns true, but future completes before\n     the code that depends on that check executes)\n\n4. For each candidate gap, provide a minimal test case with the specific\n   cache configuration and thread interleaving needed to reach the code path.\n\nPriority ordering:\n- Paths involving the catch-commit-rethrow pattern (doComputeIfAbsent, remap)\n- Slow paths reachable only via contention (synchronized blocks after optimistic checks)\n- Interactions between expiration and the async value lifecycle (ASYNC_EXPIRY, isComputingAsync)\n\nFocus only on behavioral coverage gaps that could hide correctness bugs.\n",".claude/skills/audit-feature-interaction/SKILL.md":"---\nname: audit-feature-interaction\ndescription: Analyze feature interaction pairs and triples for concurrent defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects arising from multiple features operating\nsimultaneously on the same entry.\n\nAssume at least one feature interaction bug exists. If your analysis yields\nzero findings, re-examine the top-priority pairs below — explain specifically\nwhy no interleaving produces a bug.\n\nPriority ranking (from confirmed historical bugs):\n1. **Refresh + expiration** (D+B) — most-bugged interaction historically\n2. **Reference collection + any feature** (C+*) — value reference visibility\n3. **Async completion + any feature** (F+*) — future lifecycle edge cases\n4. **Eviction + weight change** (A+H) — counter drift during transitions\n\nFeatures:\nA. Eviction (size/weight limit exceeded)\nB. Expiration (afterAccess, afterWrite, variable)\nC. Reference collection (weak key, weak value, soft value GC)\nD. Refresh (automatic reload)\nE. Loading (CacheLoader / computeIfAbsent)\nF. Async completion (CompletableFuture values)\nG. Listener notification (removal listener, eviction listener)\nH. Weight change (Weigher returning different weight for new value)\n\nFor each pair (A,B), (A,C), ..., (G,H) — 28 pairs total:\n\n1. Can both features trigger simultaneously on the same entry?\n2. If yes, construct the most adversarial interleaving.\n3. Trace step-by-step: correct processing? notifications? final state? cleanup?\n\nAfter all pairs, identify highest-risk TRIPLE interactions:\n- Eviction + expiration + listener exception\n- Refresh + async completion + GC collection\n- Weight change + eviction + compute\n\nHigh-risk pairwise combinations:\n- Eviction during refresh (entry evicted while refreshing)\n- Expiration during compute (entry expires mid-computation)\n- GC during async completion (future completes after weak ref collected)\n- Weight change during eviction\n- Listener exception during any other feature\n\nFor each defect: state the features involved, provide the interleaving,\nstate the incorrect behavior.\n",".claude/skills/audit-correctness-proof/SKILL.md":"---\nname: audit-correctness-proof\ndescription: Attempt formal correctness proofs for all public cache methods\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAttempt to PROVE the correctness of the cache, not to find bugs.\n\nFor each public method (get, put, remove, compute, computeIfAbsent, merge,\nreplace, size, clear):\n\n1. State the method's specification: preconditions, postconditions,\n   concurrent behavior promises.\n2. Identify the synchronization protocol ensuring the postcondition.\n   For an expiring entry the clock is part of that state: place each\n   ticker read that dates the entry or judges its expiry relative to the\n   linearization point. A read taken before a step that can block (a\n   hash-bin lock, a node monitor, a user callback) dates or judges\n   against a stale clock, so check the paths that create an entry as\n   well as the ones that test it.\n3. Write a proof sketch:\n   a. Assume the precondition holds\n   b. Identify the critical section(s)\n   c. Show the postcondition is established within the critical section\n   d. Show no concurrent operation can invalidate it before the caller observes\n\n4. If you CANNOT complete the proof at any step, stop and report:\n   - Which step fails\n   - What additional assumption would be needed\n   - Whether the code guarantees that assumption\n\nGaps in the proof are more valuable than speculative bug reports — a gap\ntells us exactly where to look.\n\nDo not provide praise or style commentary.\n",".claude/skills/audit-exception-safety/SKILL.md":"---\nname: audit-exception-safety\ndescription: Audit exception safety and failure atomicity across all throw sites\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the cache for exception safety defects. For every code path where\nexceptions can be thrown, determine whether the cache is left consistent.\n\nAssume at least one exception safety bug exists. If your analysis yields\nzero findings, re-examine catch-commit-rethrow paths — explain specifically\nwhy no exception scenario leaves inconsistent state.\n\n**Priority #1: catch-commit-rethrow in doComputeIfAbsent and remap.** This is\nthe most commonly misunderstood pattern and historically the most fragile.\nTrace the EXACT sequence of committed mutations, notification delivery, and\nexception propagation for every exception type.\n\nUser-provided code that can throw:\n1. CacheLoader.load / loadAll / reload\n2. Weigher.weigh\n3. Expiry.expireAfterCreate / expireAfterUpdate / expireAfterRead\n4. Mapping functions passed to compute, computeIfAbsent, merge\n5. RemovalListener.onRemoval / EvictionListener\n\nRuntime exceptions:\n6. OutOfMemoryError during node/reference allocation\n7. StackOverflowError from deep re-entrancy\n8. RejectedExecutionException from executor\n\nIn the jcache adapter, also trace: CacheWriter.write/writeAll/delete/deleteAll\n(the spec requires partial-failure bookkeeping), EntryProcessor.process,\nExpiryPolicy methods, and Copier/serialization failures in store-by-value mode.\n\nFor each throw site:\n\n1. List every mutation already committed before the throw point.\n2. Determine whether the catch block rolls back or commits.\n3. Check for:\n   - **Phantom entries**: Node in CHM but invisible to eviction/expiration\n   - **Orphaned references**: WeakReference created but node rolled back\n   - **Counter drift**: weightedSize out of sync with actual entries\n   - **Lost notifications**: notifyEviction without notifyRemoval, or vice versa\n   - **Leaked futures**: CompletableFuture never completed\n   - **Stuck refresh**: refresh flag set but never cleared\n\n4. For catch-commit-rethrow (doComputeIfAbsent, remap), verify:\n   - Catches Throwable, not just RuntimeException\n   - Committed state is fully consistent\n   - Original exception is preserved\n\n5. For OutOfMemoryError specifically:\n   - Can AddTask/UpdateTask OOME orphan a CHM entry?\n   - Can WeakKeyReference/WeakValueReference OOME leave half-constructed node?\n\nFor each defect: state the throw site, mutations committed, inconsistent\nstate, and a concrete triggering scenario.\n",".claude/skills/audit-jcache-conformance/SKILL.md":"---\nname: audit-jcache-conformance\ndescription: JSR-107 (JCache) spec-conformance audit\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent, Write\n---\n\n# Audit: JSR-107 Conformance\n\nThis audit verifies the `jcache/` adapter against the **full JSR-107 1.1.1\nspecification** — every normative domain, not just the corners the last bug\ntouched. It walks the spec surface and allocates depth by where the TCK is blind.\n\n**Why the TCK is the floor, not the verification.** The TCK frequently asserts\nonly the observable **end-state** (`containsKey`/`get`), not the **event stream**\n(`CREATED`/`UPDATED`/`EXPIRED`/`REMOVED`) or the **statistics** (`CachePuts`,\nhits/misses, removals, evictions). Two implementations with different events and\ndifferent counts both pass. Every real bug found in this adapter recently lived in\nexactly that TCK-blind gap (zero-creation-expiry phantom `CREATED`;\nzero-update-expiry `put`-family suppressing `UPDATED`). So the audit goes **DEEP**\n(full spec→RI→ecosystem→internal-parity differential) on the event/statistic/\nexpiry/write-through surface, and runs a **COVERAGE** pass (spec-text correctness +\nconfirm a test pins it) over the rest of the spec — escalating any COVERAGE clause\nthat turns out to hide a TCK-invisible event or statistic to the DEEP differential.\n\nThis is a focused, resource-heavy specialization of `/audit-sibling-divergence`\nGroup G2. Read **`.claude/docs/jsr107-conformance.md` first** — it is the resource\nmap (live-fetch recipes, RI/ecosystem class locations for every domain below), the\ndifferential methodology, the parity-test pattern, and the catalogue of\nalready-resolved divergences (do not re-flag those).\n\nFor this skill, the reference and its standing rulings are read before analysis, overriding the\nauditor's Phase 1.5 reading order for that document. Verify applicable rulings against current\ncontracts and source before using them to adjudicate a finding.\n\n## When to run\n\n- After any change to `jcache/src/main` touching `CacheProxy`, `LoadingCacheProxy`,\n  `EntryProcessorEntry`/`postProcess`, `EventDispatcher`, expiry, statistics,\n  the write-through (`CacheWriter`) path, or store-by-value copying.\n- Before a release, as a comprehensive 1.1.1 re-verification.\n- Once per quarter as a conformance baseline.\n- When a `/audit-sibling-divergence` run raises a Group G2 finding — use this to\n  resolve the *direction* (the static audit cannot, and has guessed wrong before).\n- Not for adapter concurrency: this audit is a single-threaded spec differential.\n  Concurrency windows (live-view vs snapshot races, obligation pairing on\n  executor threads, close/destroy symmetry) belong to `/audit-subsystem-safety`,\n  `/audit-memory-retention`, `/audit-lifecycle`, and `/audit-contract-drift`'s\n  obligation sweep.\n\nHeavyweight (fetches the spec, clones/fetches the ecosystem, may spawn\nsub-auditors). Not for routine pre-commit review.\n\n## Step 0: Load the spec and the resource map\n\nRead `.claude/docs/jsr107-conformance.md`. Fetch the live spec:\n\n```bash\nDOC=1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA\ncurl -fsSL \"https://docs.google.com/document/d/$DOC/export?format=txt\" -o /tmp/jsr107_spec.txt\n```\n\nConfirm it fetched the real spec (grep for `getExpiryForUpdate`), not an auth page.\nThe export reflows; reference the spec by **section name** (the 1.1.1 section\nheadings are listed per-domain in the matrix below). Locate the TCK sources\n(`find ~/.gradle/caches -name 'cache-tests-1.1.1-test-sources.jar'` and\n`jcache/build/tck/`).\n\n## Step 1: Build the spec-surface matrix\n\nWalk the **whole** 1.1.1 spec. Map each normative domain to its spec section, its\nadapter code, and the **depth** it warrants. Do not stop at the write-path/expiry\nfamily — that is one DEEP domain among several, and the recent bugs there created a\nrecency bias this matrix exists to correct.\n\n**Depth = DEEP** — the TCK does not pin the event stream / statistic / expiry\ntiming, so it can mask a real divergence. Run the full differential (Step 2) and\nadd a parity-matrix test.\n**Depth = COVERAGE** — the spec text is unambiguous and the TCK's end-state\nassertion is sufficient. Confirm (a) the adapter matches the spec text and (b) a\ntest pins it; cite the test. Escalate to DEEP the moment a hidden event/stat\nappears.\n\n| # | Domain | 1.1.1 section | Depth | Verify |\n|---|--------|---------------|-------|--------|\n| A | Write ops × expiry | *Expiry Policies*; *Statistics Effects* | **DEEP** | `put`/`putAll`/`putIfAbsent`/`getAndPut`/`replace(K,V)`/`replace(K,V,V)`/`getAndReplace` — creation-vs-update `ZERO`/`ETERNAL`/`null` expiry; `CREATED`/`UPDATED` emission; `CachePuts` count. **Internal parity across all siblings.** |\n| B | Read & access | *Expiry Policies*; *Integration*; *Statistics Effects* | **DEEP** | `get`/`getAll`/`containsKey`/`iterator` — `getExpiryForAccess` `ZERO`/`null`/finite; `CacheHits`/`CacheMisses` (containsKey must not count); read-through load as `get`-miss-not-put |\n| C | Remove ops | *Cache Entry Listeners*; *Integration*; *Statistics Effects* | **DEEP** | `remove(K)`/`remove(K,V)`/`getAndRemove`/`removeAll(keys)`/`removeAll()`/`clear()` — `REMOVED` event + `oldValue`; **`removeAll()` counts removals, `clear()` does not**; removal-stat gating on an already-expired entry; `CacheWriter.delete` |\n| D | Entry processors | *Entry Processors*; *Statistics Effects* | **DEEP** | `invoke`/`invokeAll` — `EntryProcessorEntry.Action` machine (NONE→READ/CREATED/UPDATED/LOADED/DELETED) vs RI `MutableEntryOperation`; per-op events + stats; read-through `getValue()` ending in `LOADED` counts a miss, not a put (catalogued — confirm, don't re-flag) |\n| E | Events | *Cache Entry Listeners* | **DEEP** | `CREATED`/`UPDATED`/`REMOVED`/`EXPIRED` payload (`isOldValueAvailable`/`getOldValue`); synchronous vs asynchronous dispatch; `CacheEntryEventFilter`; per-key ordering (`EventDispatcher` CompletableFuture chains); runtime register/deregister |\n| F | Statistics | *Statistics Effects of Cache Operations* | **DEEP** | The **full** `CacheStatisticsMXBean` matrix: `CacheHits`/`Misses`/`Gets`/`Puts`/`Removals`/`Evictions` × every op. Failed `putIfAbsent`/`replace` accounting; **`CacheEvictions` (the Caffeine-native-eviction→JCache-stat bridge — no sibling resolves this identically)**; `CacheStatisticsMXBean.clear()` resets every counter and timer; averages (the RI divides all three by `CacheGets`, so its put and remove means read 0 until a get) |\n| G | Integration — writer | *Integration* | **DEEP** | Write-through: `CacheWriter.write`/`delete` ordering vs store and vs event/stat; **a writer exception must suppress the event and the `CachePuts` increment**; `writeAll`/`deleteAll` partial-failure collection mutation; `CacheWriterException` wrapping |\n| H | Integration — loader | *Integration* | **DEEP** | Read-through `get`/`getAll`/`invoke`; `loadAll` `replaceExistingValues` + completion listener; `CacheLoaderException` wrapping (still required by the 1.1.1 `CacheLoaderException` javadoc, and asserted by the TCK for `get` and `loadAll`) |\n| I | Store-by-value | *Store-By-Value and Store-By-Reference* | COVERAGE | Copy points (`put`/`get`/`iterator`/event payloads); caller-mutation isolation; `RISerializingInternalConverter` vs `RIReferenceInternalConverter`. Escalate if a copy is skipped on an event/stat path |\n| J | Types | *Configuration* | COVERAGE | `getKeyType`/`getValueType` metadata; exact type matching in `getCache(name, K, V)` (`ClassCastException` on mismatch); optional runtime type checking on `put`/`get` |\n| K | Configuration | *Configuration* | COVERAGE | `MutableConfiguration` snapshot-on-create; `Factory<CacheLoader/CacheWriter/ExpiryPolicy>`; read-through/write-through/store-by-value/stats/mgmt flags |\n| L | Lifecycle | *Caching Providers* | COVERAGE | `close`/`isClosed` → `IllegalStateException` on every op; `CacheManager` create(dup→`CacheException`)/get/destroy; `getCacheNames` immutable iterator; provider URI/classloader/properties |\n| M | Management | *Caching Providers* (MXBeans) | COVERAGE | `CacheMXBean` attributes; JMX `ObjectName` sanitize (catalogued); enable/disable statistics & management at runtime |\n| N | Null / adversarial inputs | method javadocs | COVERAGE | `NullPointerException` contract on null key/value/map/filter/processor args across the full API |\n\n(*Annotations* — CDI/Spring `@CacheResult` etc. — is a separate spec section the\nadapter does not implement; out of scope.)\n\n## Step 2: Run the differential\n\nFor each **DEEP** domain corner, in order, until the reference behavior is\nunambiguous:\n\n1. **Spec text** — read the governing javadoc/table in `/tmp/jsr107_spec.txt`. Note\n   deliberately-different wording between sibling operations (create-vs-update is\n   the canonical trap).\n2. **TCK** — find the test and read *what it asserts*. End-state only → it cannot\n   settle the event/stat question; proceed. (When TCK and spec javadoc disagree,\n   **TCK wins** — see `.claude/rules/jcache-adapter.md`.)\n3. **RI** — read the oracle class for that domain (the doc's resource map names one\n   per domain: `RICache` write/remove paths, `RICacheStatisticsMXBean`,\n   `RICacheEventDispatcher`, `RICache.writeCacheEntry`/`deleteCacheEntry`, etc.).\n4. **≥3 ecosystem impls** — fetch the adapter files named in the doc. Classify each;\n   record any split.\n5. **Caffeine internal parity** — verify every sibling path agrees with the\n   reference *and with each other*. Internal disagreement = the highest-signal\n   finding (one side is provably wrong).\n\nFor each **COVERAGE** domain: confirm the adapter's behavior matches the spec text,\nand that a TCK or unit test pins it — cite the test by name. If the only test\nasserts end-state and the clause hides an event/stat (e.g. does `clear()` fire\n`REMOVED`? does a store-by-value copy happen on the event payload?), **escalate that\ncorner to DEEP** and run the ladder above. A COVERAGE domain with a correct-but-\nuntested clause is a coverage finding, not a pass.\n\nSpawn one sub-auditor per domain-group — **write/read/remove (A–C)**, **entry\nprocessors (D)**, **events (E)**, **statistics (F)**, **integration loader+writer\n(G–H)**, **store-by-value/types/config/lifecycle/management (I–N)** — each with the\ndoc + the fetched spec as context, each required to return a concrete witness\n(operation sequence → divergent event/stat/end-state, or the test that pins the\nclause). Sub-agents cannot read session memory — **paste the doc's divergence\ncatalogue inline** so they do not re-derive known false-positives. Direct each\nsub-auditor to write its report to a **group-suffixed path**\n(`.local/audits/<model>/audit-jcache-conformance-<group>.md`), never the canonical path:\nparallel groups writing `audit-jcache-conformance.md` overwrite each other (the\n2026-07 run lost two group reports this way and had to recover them from agent\ntranscripts).\n\n## Step 3: Resolve and pin\n\nFor each confirmed real divergence:\n\n- State the spec text, the RI behavior, the ecosystem tally, and the Caffeine\n  internal-parity result. The fix direction follows the spec + RI; if the static\n  finding assumed the opposite direction, **say so** (this has happened — the\n  zero-update-expiry fix direction was inverted from what the static audit guessed).\n- Implement the fix as a minimal, surgical change, then add a **parity-matrix\n  test** (`writeOp_*`/`readOp_*`/`removeOp_*` over every sibling op) asserting they\n  all produce the same event count, statistic delta, and end-state. The TCK is not\n  the regression guard — the parity test is.\n- Run `:jcache:test` **and** `:jcache:tckTest` (per `.claude/rules/jcache-adapter.md`;\n  the TCK encodes interpretations unit tests miss).\n- Update `.claude/docs/jsr107-conformance.md`'s catalogue and ecosystem matrix so\n  the next run does not re-litigate it.\n\nFor a COVERAGE-tier clause that is correct but **untested**, record it as a coverage\ngap (which test to add), not a bug.\n\n## Output\n\nThe orchestrator (not the sub-auditors) writes\n`.local/audits/<model>/audit-jcache-conformance.md` — the consolidated adjudication\nacross the group-suffixed reports — using the standard\n`.claude/docs/finding-taxonomy.md` schema (severity / category / confidence /\nclassification).\n\nLead with the **spec-surface coverage matrix**: every domain A–N → depth → verdict\n(conformant / divergence / coverage-gap) → the witness or the pinning-test citation.\nA clean run must show *every domain was reached*, so \"clean\" means the full 1.1.1\nsurface was walked — not just the recent-bug corners.\n\nThen, for each finding: the spec citation (by section name), the RI behavior, the\necosystem tally, the Caffeine internal-parity result, the witness (operation →\ndivergent observable), and the resolution direction with its justification. A\nfinding with no spec/RI/ecosystem backing for its *direction* is not ready — record\nit as escalated, not as a fix.\n",".claude/skills/audit-iteration/SKILL.md":"---\nname: audit-iteration\ndescription: Analyze concurrent iteration and view consistency guarantees\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the concurrent iteration and view behavior of the cache.\n\nAssume at least one view operation can observe inconsistent state under\nconcurrent modification. If your analysis yields zero findings, re-examine\nexpired-but-present entries and dead/retired node visibility — explain\nspecifically why no user-observable inconsistency is possible.\n\nView operations to analyze:\n- asMap().entrySet/keySet/values() iteration\n- asMap().forEach()\n- asMap().size()\n- asMap().containsValue()\n- Snapshot operations (policy().eviction().hottest/coldest)\n\nFor each:\n1. What consistency guarantee? (Snapshot? Weakly consistent? Sequentially consistent?)\n2. Can iteration observe:\n   - A retired or dead node?\n   - An entry whose key/value has been garbage collected?\n   - An expired but not-yet-cleaned-up entry?\n   - A node with inconsistent key/value (key from one version, value from another)?\n3. Can concurrent put/remove/compute cause the iterator to:\n   - Skip an entry that existed for the entire iteration?\n   - Return the same entry twice?\n   - Throw ConcurrentModificationException?\n4. Does wrapping ConcurrentHashMap iterators introduce issues CHM wouldn't have?\n\nFor each issue: construct a concrete interleaving and state whether it violates\nthe documented contract or is expected weakly-consistent behavior.\n",".claude/skills/audit-jdk-seam/SKILL.md":"# audit-jdk-seam\n\nPath: `.claude/skills/audit-jdk-seam/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/SKILL.md)",".claude/skills/audit-jmm/SKILL.md":"# audit-jmm\n\nPath: `.claude/skills/audit-jmm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jmm/SKILL.md)",".claude/skills/audit-lifecycle/SKILL.md":"# audit-lifecycle\n\nPath: `.claude/skills/audit-lifecycle/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-lifecycle/SKILL.md)",".claude/skills/audit-linearizability/SKILL.md":"# audit-linearizability\n\nPath: `.claude/skills/audit-linearizability/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-linearizability/SKILL.md)",".claude/skills/audit-liveness/SKILL.md":"# audit-liveness\n\nPath: `.claude/skills/audit-liveness/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-liveness/SKILL.md)",".claude/skills/audit-map-contract/SKILL.md":"# audit-map-contract\n\nPath: `.claude/skills/audit-map-contract/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-map-contract/SKILL.md)",".claude/skills/audit-memory-retention/SKILL.md":"# audit-memory-retention\n\nPath: `.claude/skills/audit-memory-retention/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-memory-retention/SKILL.md)",".claude/skills/audit-performance/SKILL.md":"# audit-performance\n\nPath: `.claude/skills/audit-performance/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-performance/SKILL.md)",".claude/skills/audit-redundancy/SKILL.md":"# audit-redundancy\n\nPath: `.claude/skills/audit-redundancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-redundancy/SKILL.md)",".claude/skills/audit-reentrancy/SKILL.md":"# audit-reentrancy\n\nPath: `.claude/skills/audit-reentrancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-reentrancy/SKILL.md)",".claude/skills/audit-regret/SKILL.md":"# audit-regret\n\nPath: `.claude/skills/audit-regret/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/SKILL.md)",".claude/skills/audit-serialization/SKILL.md":"# audit-serialization\n\nPath: `.claude/skills/audit-serialization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-serialization/SKILL.md)",".claude/skills/audit-sibling-divergence/SKILL.md":"# audit-sibling-divergence\n\nPath: `.claude/skills/audit-sibling-divergence/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-sibling-divergence/SKILL.md)",".claude/skills/audit-state-machine/SKILL.md":"# audit-state-machine\n\nPath: `.claude/skills/audit-state-machine/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-state-machine/SKILL.md)",".claude/skills/audit-subsystem-safety/SKILL.md":"# audit-subsystem-safety\n\nPath: `.claude/skills/audit-subsystem-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-subsystem-safety/SKILL.md)",".claude/skills/audit-temporal-walk/SKILL.md":"# audit-temporal-walk\n\nPath: `.claude/skills/audit-temporal-walk/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/SKILL.md)",".claude/skills/audit-third-party-contracts/SKILL.md":"# audit-third-party-contracts\n\nPath: `.claude/skills/audit-third-party-contracts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-third-party-contracts/SKILL.md)",".claude/skills/climber-gate/SKILL.md":"# climber-gate\n\nPath: `.claude/skills/climber-gate/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/SKILL.md)",".claude/skills/climber-minimize/SKILL.md":"# climber-minimize\n\nPath: `.claude/skills/climber-minimize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/SKILL.md)",".claude/skills/optimize-cache/SKILL.md":"# optimize-cache\n\nPath: `.claude/skills/optimize-cache/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/SKILL.md)",".claude/skills/review-change/SKILL.md":"# review-change\n\nPath: `.claude/skills/review-change/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/review-change/SKILL.md)",".claude/skills/sim-analyze/SKILL.md":"# sim-analyze\n\nPath: `.claude/skills/sim-analyze/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-analyze/SKILL.md)",".claude/skills/sim-compare/SKILL.md":"# sim-compare\n\nPath: `.claude/skills/sim-compare/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-compare/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/AGENTS.md)",".claude/CLAUDE.md":"# .claude - Claude Agent Guidelines & System Prompt\n\nPath: `.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/CLAUDE.md)",".codex/config.toml":"# Codex Directive: config.toml\n\nPath: `.codex/config.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/config.toml)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.github/copilot-instructions.md)",".claude/agents/auditor.md":"# Subagent: auditor\n\nPath: `.claude/agents/auditor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/agents/auditor.md)",".claude/rules/async-cache.md":"# Rules Skill\n\nPath: `.claude/rules/async-cache.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/async-cache.md)",".claude/rules/code-comments.md":"# Rules Skill\n\nPath: `.claude/rules/code-comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/code-comments.md)",".claude/rules/concurrency.md":"# Rules Skill\n\nPath: `.claude/rules/concurrency.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/concurrency.md)",".claude/rules/design-decisions.md":"# Rules Skill\n\nPath: `.claude/rules/design-decisions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/design-decisions.md)",".claude/rules/errorprone.md":"# Rules Skill\n\nPath: `.claude/rules/errorprone.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/errorprone.md)",".claude/rules/generated-code.md":"# Rules Skill\n\nPath: `.claude/rules/generated-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/generated-code.md)",".claude/rules/github-actions.md":"# Rules Skill\n\nPath: `.claude/rules/github-actions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/github-actions.md)",".claude/rules/gradle-build.md":"# Rules Skill\n\nPath: `.claude/rules/gradle-build.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/gradle-build.md)",".claude/rules/guava-adapter.md":"# Rules Skill\n\nPath: `.claude/rules/guava-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/guava-adapter.md)",".claude/rules/jcache-adapter.md":"# Rules Skill\n\nPath: `.claude/rules/jcache-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/jcache-adapter.md)",".claude/rules/simulator.md":"# Rules Skill\n\nPath: `.claude/rules/simulator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/simulator.md)",".claude/rules/testing.md":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/testing.md)",".codex/agents/auditor.toml":"# Codex Directive: auditor.toml\n\nPath: `.codex/agents/auditor.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/agents/auditor.toml)",".claude/skills/audit-jdk-seam/fetch-openjdk.sh":"# Claude Directive: fetch-openjdk.sh\n\nPath: `.claude/skills/audit-jdk-seam/fetch-openjdk.sh`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/fetch-openjdk.sh)",".claude/skills/audit-jdk-seam/jbs.py":"# Claude Directive: jbs.py\n\nPath: `.claude/skills/audit-jdk-seam/jbs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/jbs.py)",".claude/skills/audit-regret/regret.py":"# Claude Directive: regret.py\n\nPath: `.claude/skills/audit-regret/regret.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/regret.py)",".claude/skills/audit-regret/search.py":"# Claude Directive: search.py\n\nPath: `.claude/skills/audit-regret/search.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/search.py)",".claude/skills/audit-regret/tenants.py":"# Claude Directive: tenants.py\n\nPath: `.claude/skills/audit-regret/tenants.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/tenants.py)",".claude/skills/audit-regret/test_csv.py":"# Claude Directive: test_csv.py\n\nPath: `.claude/skills/audit-regret/test_csv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/test_csv.py)",".claude/skills/audit-regret/workload.py":"# Claude Directive: workload.py\n\nPath: `.claude/skills/audit-regret/workload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/workload.py)",".claude/skills/audit-temporal-walk/README.md":"# Audit-temporal-walk Skill\n\nPath: `.claude/skills/audit-temporal-walk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/README.md)",".claude/skills/audit-temporal-walk/audit_paths.py":"# Claude Directive: audit_paths.py\n\nPath: `.claude/skills/audit-temporal-walk/audit_paths.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/audit_paths.py)",".claude/skills/audit-temporal-walk/fix-audit.txt":"# Claude Directive: fix-audit.txt\n\nPath: `.claude/skills/audit-temporal-walk/fix-audit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/fix-audit.txt)",".claude/skills/audit-temporal-walk/invariant-ledger.txt":"# Claude Directive: invariant-ledger.txt\n\nPath: `.claude/skills/audit-temporal-walk/invariant-ledger.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/invariant-ledger.txt)",".claude/skills/audit-temporal-walk/lens-deletion.txt":"# Claude Directive: lens-deletion.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-deletion.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-deletion.txt)",".claude/skills/audit-temporal-walk/lens-intent.txt":"# Claude Directive: lens-intent.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-intent.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-intent.txt)",".claude/skills/audit-temporal-walk/lens-sibling.txt":"# Claude Directive: lens-sibling.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-sibling.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-sibling.txt)",".claude/skills/audit-temporal-walk/per-commit.txt":"# Claude Directive: per-commit.txt\n\nPath: `.claude/skills/audit-temporal-walk/per-commit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/per-commit.txt)",".claude/skills/audit-temporal-walk/run.py":"# Claude Directive: run.py\n\nPath: `.claude/skills/audit-temporal-walk/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/run.py)",".claude/skills/audit-temporal-walk/test-walk.txt":"# Claude Directive: test-walk.txt\n\nPath: `.claude/skills/audit-temporal-walk/test-walk.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/test-walk.txt)",".claude/skills/audit-temporal-walk/verify.py":"# Claude Directive: verify.py\n\nPath: `.claude/skills/audit-temporal-walk/verify.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.py)",".claude/skills/audit-temporal-walk/verify.txt":"# Claude Directive: verify.txt\n\nPath: `.claude/skills/audit-temporal-walk/verify.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.txt)",".claude/skills/audit-temporal-walk/walker.py":"# Claude Directive: walker.py\n\nPath: `.claude/skills/audit-temporal-walk/walker.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/walker.py)",".claude/skills/climber-gate/a1_tenant.py":"# Claude Directive: a1_tenant.py\n\nPath: `.claude/skills/climber-gate/a1_tenant.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/a1_tenant.py)",".claude/skills/climber-gate/admission.py":"# Claude Directive: admission.py\n\nPath: `.claude/skills/climber-gate/admission.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission.py)",".claude/skills/climber-gate/admission_harness.py":"# Claude Directive: admission_harness.py\n\nPath: `.claude/skills/climber-gate/admission_harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission_harness.py)",".claude/skills/climber-gate/blind_gen.py":"# Claude Directive: blind_gen.py\n\nPath: `.claude/skills/climber-gate/blind_gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blind_gen.py)",".claude/skills/climber-gate/blindlock.py":"# Claude Directive: blindlock.py\n\nPath: `.claude/skills/climber-gate/blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blindlock.py)",".claude/skills/climber-gate/byworkload.py":"# Claude Directive: byworkload.py\n\nPath: `.claude/skills/climber-gate/byworkload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/byworkload.py)",".claude/skills/climber-gate/census.py":"# Claude Directive: census.py\n\nPath: `.claude/skills/climber-gate/census.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/census.py)",".claude/skills/climber-gate/corner.py":"# Claude Directive: corner.py\n\nPath: `.claude/skills/climber-gate/corner.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/corner.py)",".claude/skills/climber-gate/crashnoise.py":"# Claude Directive: crashnoise.py\n\nPath: `.claude/skills/climber-gate/crashnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/crashnoise.py)",".claude/skills/climber-gate/demoflood.py":"# Claude Directive: demoflood.py\n\nPath: `.claude/skills/climber-gate/demoflood.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/demoflood.py)",".claude/skills/climber-gate/descent.py":"# Claude Directive: descent.py\n\nPath: `.claude/skills/climber-gate/descent.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/descent.py)",".claude/skills/climber-gate/escgen.py":"# Claude Directive: escgen.py\n\nPath: `.claude/skills/climber-gate/escgen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/escgen.py)",".claude/skills/climber-gate/exposure.py":"# Claude Directive: exposure.py\n\nPath: `.claude/skills/climber-gate/exposure.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/exposure.py)",".claude/skills/climber-gate/floors.py":"# Claude Directive: floors.py\n\nPath: `.claude/skills/climber-gate/floors.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/floors.py)",".claude/skills/climber-gate/frozen_matched.py":"# Claude Directive: frozen_matched.py\n\nPath: `.claude/skills/climber-gate/frozen_matched.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/frozen_matched.py)",".claude/skills/climber-gate/gate.py":"# Claude Directive: gate.py\n\nPath: `.claude/skills/climber-gate/gate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gate.py)",".claude/skills/climber-gate/gen.py":"# Claude Directive: gen.py\n\nPath: `.claude/skills/climber-gate/gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen.py)",".claude/skills/climber-gate/gen2.py":"# Claude Directive: gen2.py\n\nPath: `.claude/skills/climber-gate/gen2.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen2.py)",".claude/skills/climber-gate/gen_adv.py":"# Claude Directive: gen_adv.py\n\nPath: `.claude/skills/climber-gate/gen_adv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_adv.py)",".claude/skills/climber-gate/gen_attacks.py":"# Claude Directive: gen_attacks.py\n\nPath: `.claude/skills/climber-gate/gen_attacks.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_attacks.py)",".claude/skills/climber-gate/gen_blindlock.py":"# Claude Directive: gen_blindlock.py\n\nPath: `.claude/skills/climber-gate/gen_blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_blindlock.py)",".claude/skills/climber-gate/gen_h4c1.py":"# Claude Directive: gen_h4c1.py\n\nPath: `.claude/skills/climber-gate/gen_h4c1.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_h4c1.py)",".claude/skills/climber-gate/gen_jam.py":"# Claude Directive: gen_jam.py\n\nPath: `.claude/skills/climber-gate/gen_jam.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_jam.py)",".claude/skills/climber-gate/gen_moat.py":"# Claude Directive: gen_moat.py\n\nPath: `.claude/skills/climber-gate/gen_moat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_moat.py)",".claude/skills/climber-gate/gen_norank.py":"# Claude Directive: gen_norank.py\n\nPath: `.claude/skills/climber-gate/gen_norank.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_norank.py)",".claude/skills/climber-gate/gen_straddle.py":"# Claude Directive: gen_straddle.py\n\nPath: `.claude/skills/climber-gate/gen_straddle.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_straddle.py)",".claude/skills/climber-gate/harness.py":"# Claude Directive: harness.py\n\nPath: `.claude/skills/climber-gate/harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/harness.py)",".claude/skills/climber-gate/kvcache.py":"# Claude Directive: kvcache.py\n\nPath: `.claude/skills/climber-gate/kvcache.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/kvcache.py)",".claude/skills/climber-gate/lcs2lirs.py":"# Claude Directive: lcs2lirs.py\n\nPath: `.claude/skills/climber-gate/lcs2lirs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/lcs2lirs.py)",".claude/skills/climber-gate/marginal.py":"# Claude Directive: marginal.py\n\nPath: `.claude/skills/climber-gate/marginal.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/marginal.py)",".claude/skills/climber-gate/mechanism.py":"# Claude Directive: mechanism.py\n\nPath: `.claude/skills/climber-gate/mechanism.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mechanism.py)",".claude/skills/climber-gate/mixnoise.py":"# Claude Directive: mixnoise.py\n\nPath: `.claude/skills/climber-gate/mixnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mixnoise.py)",".claude/skills/climber-gate/pair.py":"# Claude Directive: pair.py\n\nPath: `.claude/skills/climber-gate/pair.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/pair.py)",".claude/skills/climber-gate/probe.py":"# Claude Directive: probe.py\n\nPath: `.claude/skills/climber-gate/probe.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/probe.py)",".claude/skills/climber-gate/real.py":"# Claude Directive: real.py\n\nPath: `.claude/skills/climber-gate/real.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/real.py)",".claude/skills/climber-gate/repeat.py":"# Claude Directive: repeat.py\n\nPath: `.claude/skills/climber-gate/repeat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/repeat.py)",".claude/skills/climber-gate/run.py":"# Claude Directive: run.py\n\nPath: `.claude/skills/climber-gate/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/run.py)",".claude/skills/climber-gate/screen.py":"# Claude Directive: screen.py\n\nPath: `.claude/skills/climber-gate/screen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/screen.py)",".claude/skills/climber-gate/slowswap.py":"# Claude Directive: slowswap.py\n\nPath: `.claude/skills/climber-gate/slowswap.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/slowswap.py)",".claude/skills/climber-gate/startwin.py":"# Claude Directive: startwin.py\n\nPath: `.claude/skills/climber-gate/startwin.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/startwin.py)",".claude/skills/climber-gate/sweep.py":"# Claude Directive: sweep.py\n\nPath: `.claude/skills/climber-gate/sweep.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/sweep.py)",".claude/skills/climber-gate/test_seed_tools.py":"# Claude Directive: test_seed_tools.py\n\nPath: `.claude/skills/climber-gate/test_seed_tools.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/test_seed_tools.py)",".claude/skills/climber-gate/traceio.py":"# Claude Directive: traceio.py\n\nPath: `.claude/skills/climber-gate/traceio.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/traceio.py)",".claude/skills/climber-gate/whisper.py":"# Claude Directive: whisper.py\n\nPath: `.claude/skills/climber-gate/whisper.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper.py)",".claude/skills/climber-gate/whisper_mod.py":"# Claude Directive: whisper_mod.py\n\nPath: `.claude/skills/climber-gate/whisper_mod.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper_mod.py)",".claude/skills/climber-minimize/ablate.py":"# Claude Directive: ablate.py\n\nPath: `.claude/skills/climber-minimize/ablate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/ablate.py)",".claude/skills/audit-regret/specs/absolve.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve.json)",".claude/skills/audit-regret/specs/absolve_p8.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve_p8.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve_p8.json)",".claude/skills/audit-regret/specs/bandrider.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/bandrider.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/bandrider.json)",".claude/skills/audit-regret/specs/crestpast.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/crestpast.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/crestpast.json)",".claude/skills/audit-regret/specs/deadpark.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadpark.json)",".claude/skills/audit-regret/specs/deadphase.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadphase.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadphase.json)",".claude/skills/audit-regret/specs/drift.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/drift.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/drift.json)",".claude/skills/audit-regret/specs/entryduty.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/entryduty.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/entryduty.json)",".claude/skills/audit-regret/specs/flashpark.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/flashpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/flashpark.json)",".claude/skills/audit-regret/specs/ghostclaim.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ghostclaim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ghostclaim.json)",".claude/skills/audit-regret/specs/hazefloor.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/hazefloor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/hazefloor.json)",".claude/skills/audit-regret/specs/jumpslide.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide.json)",".claude/skills/audit-regret/specs/jumpslide_260.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_260.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_260.json)",".claude/skills/audit-regret/specs/jumpslide_period26.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_period26.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_period26.json)",".claude/skills/audit-regret/specs/latebloom.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom.json)",".claude/skills/audit-regret/specs/latebloom_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom_min.json)",".claude/skills/audit-regret/specs/lifecycle_fit_scan.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lifecycle_fit_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lifecycle_fit_scan.json)",".claude/skills/audit-regret/specs/lowbar.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lowbar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lowbar.json)",".claude/skills/audit-regret/specs/mainsat.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mainsat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mainsat.json)",".claude/skills/audit-regret/specs/mixture.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mixture.json)",".claude/skills/audit-regret/specs/needle.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle.json)",".claude/skills/audit-regret/specs/needle_wide.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle_wide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle_wide.json)",".claude/skills/audit-regret/specs/norank.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/norank.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/norank.json)",".claude/skills/audit-regret/specs/parkveil.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil.json)",".claude/skills/audit-regret/specs/parkveil_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil_min.json)",".claude/skills/audit-regret/specs/phases.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/phases.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/phases.json)",".claude/skills/audit-regret/specs/pure_scan.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/pure_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/pure_scan.json)",".claude/skills/audit-regret/specs/ramp_retest.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ramp_retest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ramp_retest.json)",".claude/skills/audit-regret/specs/scarburst.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/scarburst.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/scarburst.json)",".claude/skills/audit-regret/specs/shallowmoat.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/shallowmoat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/shallowmoat.json)",".claude/skills/audit-regret/specs/sidecliff.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/sidecliff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/sidecliff.json)",".claude/skills/audit-regret/specs/stillness_starve.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve.json)",".claude/skills/audit-regret/specs/stillness_starve_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve_min.json)",".claude/skills/audit-regret/specs/whisper.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/whisper.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/whisper.json)",".claude/skills/optimize-cache/references/measurement.md":"# References Skill\n\nPath: `.claude/skills/optimize-cache/references/measurement.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/references/measurement.md)",".claude/skills/optimize-cache/scripts/jmh-session.init.gradle":"# Claude Directive: jmh-session.init.gradle\n\nPath: `.claude/skills/optimize-cache/scripts/jmh-session.init.gradle`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/scripts/jmh-session.init.gradle)"},"files":{".claude/skills/audit-build-ci/SKILL.md":"---\nname: audit-build-ci\ndescription: Audit build and CI configuration for correctness risks\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the build and CI configuration for subtle correctness risks.\n\nRead the build files and CI workflows before analyzing:\n- `build.gradle.kts` (root and caffeine module)\n- `gradle/plugins/` (custom Gradle plugins)\n- `.github/workflows/` (GitHub Actions)\n- `gradle.properties`\n\nConsider:\n- Misconfigured dependency scopes\n- Incorrect test isolation\n- Non-reproducible builds\n- Incorrect Gradle cache configuration\n- Missing failure modes (tests passing when they shouldn't)\n- Incorrect CI matrix coverage\n- Silent test skipping\n- Multi-line YAML values that get interpolated elsewhere (a `>` folded scalar\n  keeps a trailing newline; splicing one into another folded scalar embeds that\n  newline mid-string, so a consumer splitting on literal spaces mis-parses the\n  spliced-in value's last token)\n- Performance problems in the build\n- Security issues (dependency vulnerabilities, secret exposure)\n- Bad practices that could cause false confidence\n- Retry and re-run paths (in-job retry loops, `workflow_run` re-runners) and what each treats\n  as infrastructure. A job that exceeds `timeout-minutes` concludes `cancelled`, not `failure`,\n  and a hung test reaches CI that way\n- Matrix legs that name a JDK distribution: without a vendor constraint, toolchain resolution\n  may pick another detected JDK of the same version\n\nReport only issues that could cause incorrect artifacts, missing\nfailures, or false confidence in test results.\n\nPrice a CI finding against live history, not only the YAML: `gh api` for the ruleset and\ncheck-run conclusions, `gh run view <id> --log` (with `--attempt`/`--job`) for what a green run\nactually hid. A mechanism in a workflow and a run that concealed a failure are separate claims.\nRead-only queries only.\n",".claude/skills/audit-arithmetic/SKILL.md":"---\nname: audit-arithmetic\ndescription: Audit for arithmetic and boundary bugs (overflow, off-by-one, drift)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume there is at least one arithmetic or boundary bug in this code.\n\nAudit for:\n- Off-by-one errors\n- Incorrect inequality direction (< vs <=, > vs >=)\n- Overflow / underflow (int, long, specifically nanoTime arithmetic)\n- Implicit narrowing or widening conversion\n- Incorrect rounding or truncation\n- Sign errors\n- Sentinel value collisions (can a valid value equal a sentinel?)\n- Counter drift (can a counter diverge from the quantity it tracks\n  over a long-running cache?)\n- Timer wheel bucket arithmetic (modular arithmetic, wrap-around)\n- Frequency sketch counter saturation and reset arithmetic\n- Hill climber / adaptive sizing: window vs main partition adjustment; the density and\n  probe-verdict log-ratios (`ln((x+ε)/(y+ε))`), the probation-capacity denominator\n  (`max(1, maximum − windowMaximum − mainProtectedMaximum)`), the saturated `4·maximum`\n  sample period, and the stride/commitment rung tables\n  (percentage calculations, rounding, overshoot, oscillation)\n- FrequencySketch table size calculation (ensureCapacity rounding to\n  power of two, interaction with maximumSize)\n- Weight delta computation in UpdateTask (sign conventions, can\n  intermediate sums overflow when weights are near Integer.MAX_VALUE?)\n\nFor each suspected issue:\n- Provide a concrete input (specific key, value, weight, time values)\n- Show step-by-step evaluation through the code\n- Show expected vs actual behavior\n- If it requires billions of operations, state the count needed\n\nIgnore style and performance.\nOnly report high-confidence defects supported by evaluation traces.\n",".claude/skills/audit-adversarial/SKILL.md":"---\nname: audit-adversarial\ndescription: Hostile full-codebase review by parallel adversarial agents with no design context — finds bugs that domain familiarity masks\nargument-hint: \"[subsystem or file to focus on, default: all source files]\"\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent\n---\n\nRun a hostile adversarial review of the Caffeine source code. Unlike the other\naudit skills which use the auditor agent (with design context), this skill\ndeliberately gives reviewers NO project context — they review with fresh eyes\nand a hostile mindset.\n\n## Target\n\n$ARGUMENTS\n\nIf no argument, review all source files in `caffeine/src/main/java/`,\n`guava/src/main/java/`, `jcache/src/main/java/`, `simulator/src/main/java/`,\nand `examples/*/src/main/java/`. The adapters hold the same quality bar as the\ncore. The examples are sketches: report one failing at what it shows, not\nhardening it leaves to the user (`ruled-out.md` §examples).\n\n## Step 1: Inventory source files\n\nList all Java source files in scope. Group into 6-8 subsystems for parallel\nreview — core subsystems plus one group per non-core module (examples reviewed\nagainst the contracts of the third-party libraries they compose).\n\n## Step 2: Launch parallel hostile reviewers\n\nSpawn 4-6 subagents simultaneously. Each reviews one subsystem. Critically:\n**DO NOT give them design-decisions.md, synchronization.md, or any .claude/docs.**\nThey should review from first principles only.\n\nEach agent gets this prompt (adapted to their subsystem):\n\n```\nYou are a senior Java concurrency expert performing a hostile code review.\nA competitor built this library and it's gaining adoption over your work.\nYou want to find every flaw to demonstrate it's not production-worthy.\n\nYour reputation is on the line. Be ruthless but precise — cite methods,\ntrace code paths, construct failing scenarios.\n\nRules:\n- Dig deep. Zero findings are allowed ONLY with a coverage proof listing\n  files inspected, methods traced, interleavings attempted, and attack\n  surfaces checked. If coverage is shallow, keep looking.\n- Every finding must include: exact location, concrete evidence, a\n  falsifiable scenario, and confidence (high/medium).\n- Only report issues provable with code evidence\n- Construct concrete interleavings, inputs, or scenarios\n- Do not critique style — focus on correctness and robustness\n- Do not accept \"by design\" — if the design has consequences, document them\n- Read the actual source code before making claims\n- Look for what's MISSING, not just what's wrong\n\nAttack surfaces:\n1. Memory model violations — insufficient access modes, missing happens-before\n2. State corruption interleavings — weight divergence, deque corruption, stuck drain status\n3. Resource leaks under failure — OOME/SOE leaving unrecoverable state\n4. Silent data loss — values dropped without notification\n5. Specification violations — ConcurrentMap contract, Javadoc promises\n6. Denial of service — O(n) operations on O(1) paths\n7. Sentinel value collisions — can valid input equal an internal sentinel?\n8. Validation gaps — inputs accepted at parse time but rejected later\n9. API surprises — public methods returning nonsensical values\n10. Notification asymmetries — some paths notify, equivalent paths don't\n11. Third-party API contract misuse — error/dispose paths, duplicate keys,\n    empty batches, cancellation semantics assumed rather than verified\n\nRate each finding: critical/high/medium/low\nFormat: numbered list with file:method, description, evidence\n```\n\n## Step 3: Validate completeness\n\nIf any agent returns zero findings, require a coverage summary from that\nagent (scope inspected, attack surfaces checked, interleavings attempted).\nRe-launch with a more specific prompt only if coverage is shallow. Zero\nfindings with thorough coverage proof is acceptable.\n\n## Step 3.5: Evaluator challenge (per reviewer)\n\nFor each reviewer that returned findings OR a zero-findings coverage proof,\nspawn a separate evaluator subagent. The evaluator gets ONLY the reviewer's\nreport — no source code, no design docs.\n\n```\nYou are a hostile evaluator reviewing another auditor's report of a Java\ncache library. Your job is to find what the auditor MISSED.\n\n1. For each confirmed invariant, construct a 2-thread interleaving that\n   would violate it. If you cannot, explain what prevents it.\n2. For each zero-finding claim, identify the most likely bug category\n   the auditor could have missed given their stated coverage.\n3. For each finding, check whether the evidence is concrete or hand-wavy.\n   Flag findings that assert a bug without a specific interleaving.\n\nOutput: prioritized list of challenges for the reviewer to address.\n```\n\nHave the original reviewer address each challenge by re-reading source code.\nDrop findings the reviewer cannot defend. Add new findings from challenges\nthe reviewer confirms.\n\n## Step 4: Consolidate and deduplicate\n\nCollect findings from all agents. Deduplicate (same issue found by multiple\nagents = higher confidence). Remove findings that are clearly wrong (misreading\nthe code). Keep findings even if they might be \"by design\" — the point is to\nsurface things domain familiarity masks.\n\n**Confidence decay check**: If any reviewer's findings are >60% medium-confidence,\nnote this in the report — that reviewer's area may need a more targeted follow-up\naudit rather than more speculative findings.\n\n**Escalation**: If any reviewer flagged issues they could not resolve statically\n(e.g., \"depends on JDK internal behavior\"), mark these as ESCALATED for dynamic\ntesting (Fray, LinCheck, JCStress) rather than guessing.\n\n## Step 5: Adjudicate against design docs\n\nNOW read `.claude/docs/design-decisions.md`, `.claude/rules/design-decisions.md`,\nthe relevant module rules, and `.claude/docs/ruled-out.md`'s standing principles\nand module section. For JCache, consult the relevant topic in\n`.claude/docs/jsr107-conformance.md` and verify surviving conformance claims\nagainst its JSR-107 1.1.1 specification and API sources. State any normative\nsource that was not consulted. For each finding, check whether it is an\nintentional trade-off and reclassify it:\n- **confirmed** — supported evidence violates an applicable contract or invariant;\n  absence of a design explanation alone is insufficient\n- **intentional** — documented design decision, not a defect\n- **ambiguous** — needs more evidence or maintainer input\n\nKeep intentional findings in the report (labeled as such) but do not count\nthem as bugs. The value is surfacing them for review, not asserting they're wrong.\n\n## Step 6: Triage confirmed findings\n\nClassify using `.claude/docs/finding-taxonomy.md` for severity and categories.\nAdditionally tag each confirmed finding:\n- **bug** — incorrect behavior, provably wrong\n- **api-issue** — public API returns surprising/incorrect values\n- **validation-gap** — input accepted when it shouldn't be\n- **robustness** — works but fragile, could break with minor changes\n- **cosmetic** — dead code, wasteful patterns, poor diagnostics\n\n## Step 7: Report\n\nWrite the full report to `.local/audits/<model>/audit-adversarial.md`\n(see `.claude/docs/audit-output.md`).\n\nFormat:\n```\n# Adversarial Review: Caffeine Source Code\n\n[N] parallel auditors reviewed [M] source files (~K lines).\nFindings consolidated, deduplicated, and triaged by severity.\n\n## Likely Bugs\n...\n\n## API/Behavioral Issues\n...\n\n## Robustness/Validation Gaps\n...\n\n## Design/Maintenance Concerns\n...\n\n## Summary\n[N] likely bugs, [M] API issues, [K] validation gaps, [J] concerns.\n[N] evaluator challenges received across [M] reviewers.\n```\n",".claude/skills/audit-adaptivity/SKILL.md":"---\nname: audit-adaptivity\ndescription: Audit the adaptive window hill-climber and region-resize logic for implementation defects (not algorithm quality)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the adaptive W-TinyLFU control loop and the admission-window / main-region\nresize logic for IMPLEMENTATION defects. This is the one eviction subsystem not in\n`/audit-subsystem-safety`'s scope, and it was recently rebuilt — the climber now lives in the\npackage-private `WindowClimber` class (reached through the generated `climber` field), with a new\ndensity-signal + probe-machine large tier (>4096) — so it has elevated bug density.\n\n## Scope boundary — implementation correctness, NOT algorithm quality\n\nThe adaptation policy itself is at its tuned frontier. Out of scope: convergence\nrate, hit-rate, oscillation-as-a-design-tradeoff, and the choice of the tuning\nconstants. (Behavioral hit-rate regression against the adversarial trap suite is\n`/climber-gate`'s job, not this audit's.) Do NOT report \"the climber could converge faster / oscillates / constant\nX should be Y.\" Report only defects: arithmetic that yields a wrong value, a sign\nerror, a state that violates a structural invariant, a race, a NaN, or an overflow.\n\n## Methods in scope\n\n- `climb`, `determineAdjustment` — the feedback step (reactive: hit-rate delta; density:\n  within-sample densities → step → adjustment). `determineAdjustment` carries\n  `mainProtectedMaximum` to size the probation capacity for the probe verdict\n- `densityClimb`, `armProbe`, `walkStep`, `probeEnding`, `undoProbe`, `DensityClimber.steer` — the\n  large tier's signal, probe machine, and verdict internals (all on `WindowClimber`)\n- `increaseWindow`, `decreaseWindow`, `demoteFromMainProtected` — region transfer\n- `setMaximumSize` — initial window/main split, plus `WindowClimber.resized` (the\n  `SLOW_ADAPT_THRESHOLD` step-sign flip and the probe-machine reset)\n- `evictFromWindow` / `evictFromMain` — they consume the region maxima the climber sets\n\nProbe machine (>4096, in `WindowClimber`): starved samples (region hits below\nmax(4, requestCount >> MIN_SIGNAL_SHIFT)) at a blind corner launch a bold-driver walk.\nEndings: crash-abort (full undo, refractory re-armed WITHOUT doubling), reversal-through-base and\nbudget expiry (failed experiments: full undo + ladder x2), adjudication at >=4x the bar under the\ncommitted depth (confirm keeps the position + ladder resets to 1; anything else fails with a full\nundo). The verdict is asymmetric BY DESIGN: an up-probe confirms iff\n`ln((windowDensity+eps)/(walk.baseProbationDensity+eps)) > 0` — the probation-marginal baseline\nFROZEN in `armProbe` — while a down-probe uses the average-density sign test (`error*dir > 0`).\nLadder: PROBE_BACKOFF_INITIAL (16) doubling to _MAX (64). Invariants to audit:\n1 <= starvation.rung <= 64; 0 <= refractoryLeft <= starvation.rung, which both oracles assert\ndirectly — the walk budget is a separate field (`Walk.samples`, bounded by PROBE_WALK_BUDGET) on\nan object that exists only while walking, so the two can no longer alias; probe state fully reset\nby resized; an undo returns exactly to `walk.baseWindow`; the below-floor lift cannot exceed the\nfloor; `sample.probationHits <= sample.hits - sample.windowHits`;\n`walk.baseProbationDensity` is written ONLY in `armProbe` (each re-arm re-snapshots) and is\nnon-negative and finite; the probation capacity denominator is\n`max(1, maximum - windowMaximum - mainProtectedMaximum)` — capacities, never occupancy.\n\nNOT bugs (adjudicated design; read `hill-climber.md` §4 before flagging): the up/down verdict\nasymmetry (the window has no marginal substructure to price against); the frozen — hence\nstale-looking — baseline (judging against the LIVE probation rate is an absorbing false-veto: the\nwalk's own demotions enrich it — the demoflood gate row; a cold-start-transient baseline is\nbounded and self-heals because every re-arm re-snapshots); probation attribution captured\nBEFORE `reorderProbation` can promote the entry in `onAccess` (the promoting access counts as a\nprobation hit, the next as protected); a zero baseline auto-confirming any >=4x-bar earnings\n(the opportunity cost of a dead boundary is ~zero — nullchurn stays harmless); and the lowmix\nnamed trade (a gate sentinel). A walk's bases (`down`, `baseHitRate`, `baseWindow`,\n`baseProbationDensity`) are `final` on the `Walk` object, which exists only while one is in\nflight — \"dead state while not probing\" is the absent object, so there is nothing to go stale.\n\nCache-side fields: `windowMaximum`, `mainProtectedMaximum`, `windowWeightedSize`,\n`mainProtectedWeightedSize`; `QUEUE_TRANSFER_THRESHOLD`.\n\n`WindowClimber` owns `adjustment`, `sample` (`Sample`: `hits`, `misses`, `windowHits`,\n`probationHits`, `previousHitRate`), and `tier` (a `ReactiveClimber` or `DensityClimber`).\nThe `Climber` base class owns `step` (`Step`: `size`), initialized from the maximum and the\nstrategy's chosen direction at construction. `DensityClimber` owns `refractoryLeft`, `retreatLeft`,\n`undoRemaining`, and its helper objects: `walk` (`Walk`, null while none is in flight:\n`ladder`, `isAudit`, `down`, `baseWindow`, `baseHitRate`, `baseSmoothedRate`,\n`baseProbationDensity`, `samples`, `belowBarStreak`, `aboveStreak`, `beatBase`), `starvation` and\n`audit` (a `Ladder` each: `rung`, `crashStreak`), `auditClock` (`AuditClock`: `down`,\n`waitSamples`, `stillSamples`, `lastWindow`), `anchor` (`Anchor`: `window`, `rate`, `held`,\n`freshLeft`, `returning`, `returnLeft`, `shortfallStreak`), and `rates` (`Rates`: `smoothed`,\n`deviation`). `Reading` is the per-sample derived view, computed once and read-only.\n\nThe 38 constants live with the mechanism each tunes, so a knob names its owner:\n`WindowClimber` — `RESTART_THRESHOLD`;\n`DensityClimber` — `DENSITY_THRESHOLD`, `DENSITY_GAIN`, `SAMPLE_MULTIPLIER`;\n`Step` — `STEP_PERCENT`, `STEP_DECAY_RATE`, `MIN_INITIAL_STEP`;\n`ReactiveClimber` — `SLOW_ADAPT_THRESHOLD`, `SLOW_ADAPT_RATIO_CAP`, `SLOW_ADAPT_DECAY_RATE`;\n`Reading` — `STABLE_BAND_FRACTION`, `MAX_STEP_FRACTION`, `WINDOW_FLOOR_FRACTION`,\n`DENSITY_EPSILON`, `MIN_SIGNAL_SHIFT`, `MIN_STARVATION_BAR`;\n`Rates` — `VETO_MARGIN_MIN`, `RATE_SMOOTHING`, `DEVIATION_SEED`, `VETO_MARGIN_SCALE`;\n`AuditClock` — `AUDIT_WAIT_INITIAL`, `AUDIT_WAIT_FIRST`, `AUDIT_WAIT_MAX`;\n`Anchor` — `VETO_STREAK`, `VETO_RETURN_BUDGET`;\n`Walk` — `PROBE_WALK_BUDGET`, `PROBE_BAR_CAP`, `PROBE_EXIT_BAR_MULTIPLE`,\n`AUDIT_CRASH_PERSISTENCE`, `AUDIT_COMMITMENT`, `AUDIT_CONFIRM_STREAK`;\n`Ladder` — `PROBE_BACKOFF_INITIAL`, `PROBE_BACKOFF_MAX`, `PROBE_CRASH_ESCALATION`,\n`PROBE_STRIDE_SCALE_MID`, `PROBE_STRIDE_SCALE_DEEP`, `PROBE_COMMITMENT_MID`,\n`PROBE_COMMITMENT_DEEP`.\n\n## Structural invariants to attack (violations are real bugs)\n\n1. **Region partition sum**: `windowMaximum + mainMaximum` (probation + protected)\n   must equal `maximum` after every climb and every resize. Can any single transfer,\n   or a sequence capped by `QUEUE_TRANSFER_THRESHOLD`, drift the sum?\n2. **Non-negative maxima**: can `windowMaximum` or `mainProtectedMaximum` go negative\n   — a quota larger than the donor region, or repeated `decreaseWindow` at the floor?\n   EXCEPTION (adjudicated 2026-07, F1; duration priced 2026-08-22, M1): a transiently\n   negative `policyWeight` — the sanctioned telescoping race, an out-of-order UpdateTask\n   drain — can over-shift the caps beyond the commanded adjustment, even past these\n   bounds. Tolerated by design: the caps are policy targets (eviction is driven by the\n   telescoping `weightedSize`/`maximum`), and they walk back only by the weight each later\n   transfer moves, so a swing larger than a cycle's transfer suspends the split for many\n   cycles with the total still bounded. Report cap drift only with a mechanism that never\n   walks back.\n3. **Quota accounting**: in `increaseWindow`/`decreaseWindow` the `quota` is decremented\n   per transferred node by `policyWeight`. With weighted entries, can `quota` underflow,\n   skip/over-run the loop, or transfer the wrong count? Does the\n   `QUEUE_TRANSFER_THRESHOLD` cap leave the regions half-adjusted such that the next\n   `climb` mis-reads them? (Same F1 exception as #2 for the negative transient.)\n4. **`determineAdjustment` math**:\n   - `requestCount = hits + misses`; the early return guards `requestCount <\n     effectiveSampleSize`. Is the `hitRate` division ever reachable with\n     `requestCount == 0`?\n   - small-cache branch (`ReactiveClimber.samplePeriod`): `(long) (sketchSampleSize * ratio)`,\n     where `ratio = clamp(initialStep / magnitude)`. Can `initialStep` be 0 (maximum 0 or\n     tiny) making `magnitude` 0 → division by zero? Can the `(long)` cast truncate\n     `ratio` so it defeats the intended sample-period growth?\n   - `ReactiveClimber.climb` uses `Math.copySign(Step.restartMagnitude(max), amount)`. For\n     `amount == 0.0` / `-0.0`, does `copySign` choose the intended direction? Can `step.size`\n     become NaN or 0 and **permanently stall** adaptation (a stuck-window *bug*, distinct from\n     slow convergence)?\n5. **`setMaximumSize` at boundaries**: the step-sign flip at `max <= SLOW_ADAPT_THRESHOLD`\n   plus a *runtime* maximum change via `Policy.eviction.setMaximum` — when `maximum`\n   crosses `SLOW_ADAPT_THRESHOLD` in either direction, do the window/main split, the\n   `step.size` sign, and the sample state stay mutually consistent?\n6. **Stale `adjustment` and sample memory across the gates**: `climb` calls\n   `determineAdjustment` then `increaseWindow`/`decreaseWindow` off the climber's `adjustment`.\n   The tier is skipped on three paths: an uninitialized sketch (`resetSample`), a sub-period\n   sample, and a cache below half occupancy (`discardSample`, which resets a full sample). Can a\n   stale `adjustment` from a prior cycle be re-applied? The half-full gate is reachable mid-life\n   while the tier's walk, anchor and rates persist, so also check what each path does to the\n   cross-sample `previousHitRate` that the reactive step, the stand-down trigger\n   (`isWorkloadShift`) and the walk's bold driver (`nextStride`) compare against.\n7. **Layer ownership of the ladders, streaks, and schedules** — the highest-yield row, because\n   it has produced two real bugs and both were invisible from a single code path.\n   `hill-climber.md` §4 carries a **write-owner table** (observation / active walk / starvation\n   retry / audit retry+schedule / goal guard / motion out). Enumerate **every** write to\n   `starvation.rung`, `starvation.crashStreak`, `audit.rung`, `audit.crashStreak`,\n   `auditClock.waitSamples`, `auditClock.stillSamples`, `anchor.held`, `anchor.freshLeft` and\n   check each against its owner —\n   *including endings that are not crashes*. Both landed defects were exactly this shape: the\n   shared crash streak let exogenous pulses pair separate audit crashes into a rung ratchet\n   (H4-C1), and later a non-crash ending (budget expiry, reversal-through-base) still cleared\n   the **other** layer's streak, which disarmed that layer's escalation and its\n   `AUDIT_CRASH_PERSISTENCE` tolerance — so an interleaved blind corner reached around the first\n   fix. One cross-write is sanctioned, journaled: an audit confirm rewards the starvation\n   ladder (`starvation.reward`) and zeroes its refractory. An audit's undo leaves the\n   refractory alone (since 2026-08-16, pinned by\n   `undoProbe_auditRetreat_leavesTheStarvationRefractoryAlone`). Anything else is a finding.\n   Checkable products the oracles already\n   assert, and which a new invariant should join: `anchor.freshLeft > 0 ⇒ anchor.held`,\n   `anchor.held ⇒ anchor.isPlanted`, `walk != null ⇒ undoRemaining == 0`, and\n   `auditClock.waitSamples > PROBE_BACKOFF_MAX ⇒ audit.rung == PROBE_BACKOFF_MAX` (the ratchet as\n   an invariant). Note the one *legitimate* coupling so it is not reported: the audit clock is a\n   function of window position, so any layer that moves the window decays `stillSamples` — that\n   is the intended semantics, and it is the remaining path by which frequent blind corners defer\n   audits.\n\n## Output\n\nFor each defect: give concrete maximum/weight/access values, trace the arithmetic\nstep by step, show the resulting invariant violation or wrong region size, and a\nVerification (a `BoundedLocalCacheTest` white-box method plus the required `-P` flags).\n\nEverything here runs under `evictionLock` (single-writer), so most findings will be\narithmetic / state-corruption, not races — but explicitly check whether any\nclimber-written field (`adjustment`, `step.size`, the region maxima) is also read\noff-lock by a concurrent reader before concluding \"single-writer, cannot race.\"\n",".claude/skills/audit-adversarial-input/SKILL.md":"---\nname: audit-adversarial-input\ndescription: Analyze behavior under adversarial or extreme API inputs\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects triggered by adversarial or extreme API inputs.\n\nFor each category, construct concrete inputs and trace the code path:\n\n1. **Weight extremes**: Integer.MAX_VALUE for every entry (overflow?),\n   MAX_VALUE→1 delta (overflow?), 0 for all (unbounded growth?),\n   inconsistent weigher (divergence?).\n\n2. **Expiry extremes**: Long.MAX_VALUE nanos (timer wheel overflow?),\n   0 or negative (infinite loops?), MAX→0 transitions, alternating durations.\n\n3. **Maximum size extremes**: Long.MAX_VALUE (arithmetic overflow?),\n   maximumSize(0) (graceful degeneration?), maximumSize(1) (temporary oversize?).\n\n4. **Key/value adversarial behavior**: constant hashCode(0) (sketch degeneration?),\n   slow equals() (lock hold explosion?), mutating hashCode (silent corruption?),\n   huge values (allocation failure handling?).\n\n5. **Concurrency extremes**: 10K threads on same computeIfAbsent, puts exceeding\n   maintenance throughput (backpressure?), refresh storms from short refreshAfterWrite.\n\n6. **Frequency sketch saturation**: all accesses to same key, all unique keys\n   (reset cost?), counter overflow beyond 4-bit limit.\n\n7. **Time extremes**: nanoTime near Long.MAX_VALUE (wrap-around?), non-monotonic\n   ticker, large time jumps (timer wheel handling?).\n\nFor each issue: state input values, trace computation, state whether it causes\nincorrect behavior / OOM / infinite loop / degraded performance / graceful handling.\n\nDo not report issues requiring API contract violations (e.g., null keys)\nunless the violation is undetected and causes silent corruption.\n",".claude/skills/audit-contract-drift/SKILL.md":"---\nname: audit-contract-drift\ndescription: Find places where documented API contracts and the implementation diverge\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nMost audits read code; this one reads documentation first and then traces each\npromise to every implementation path that should honor it. The bugs caught here\nare not concurrency or arithmetic defects — they are quiet contradictions\nbetween what the javadoc promises and what the code does.\n\nBuild a list of behavioral promises from public API docs, then trace each one\nto every code path that should honor it.\n\nSources of contracts to enumerate:\n\n- `Caffeine.java` — every `<b>Note:</b>` and `<b>Warning:</b>` block in a\n  builder method's javadoc. Pay particular attention to:\n  - `weakKeys`, `weakValues`, `softValues` — equality semantics flip to\n    identity (`==`) for the configured strength\n  - `expireAfter*`, `refreshAfterWrite` — duration constraints, what\n    \"expired\" means at boundaries\n  - `maximumSize`, `maximumWeight` — eviction triggering and amortization\n  - `removalListener`, `evictionListener` — when and how notifications fire\n- `Cache.java`, `LoadingCache.java`, `AsyncCache.java`, `AsyncLoadingCache.java`\n  — javadoc of every method, especially \"must\", \"will\", \"guarantees\",\n  \"for any reason\" language.\n- `Policy.java` — every method's documented behavior.\n- `Weigher.java`, `Expiry.java`, `RemovalListener.java`, `RemovalCause.java`\n  — user-facing contracts referenced by the cache.\n- **Internal obligations** — \"callers must\" contracts stated in\n  `.claude/rules/*.md` and in internal-class javadoc across all modules (e.g.\n  jcache's EventDispatcher requires every publishing thread to drain via\n  awaitSynchronous/ignoreSynchronous; async operations must register with the\n  in-flight set). Enumerate each obligation, then verify every call site honors\n  it — including executor-thread and refresh paths that don't flow through the\n  obvious entry points.\n\nFor each contract, record the exact wording, the configurations that activate\nit, and the set of operations affected.\n\nThen trace each promise through every code path that should honor it:\n\n- Direct API calls on `Cache` / `LoadingCache` / `AsyncCache`\n- `asMap()` view methods (`size`, `isEmpty`, `containsKey`, `containsValue`,\n  `get`, `put`, `remove(k)`, `remove(k,v)`, `replace`, `compute*`, `merge`,\n  `equals`, `hashCode`)\n- `asMap().keySet()` / `values()` / `entrySet()` — `contains`, `remove`,\n  `removeAll`, `retainAll`, `removeIf`, `iterator`, `spliterator`\n- Bulk operations (`putAll`, `getAll`, `getAllPresent`, `invalidateAll`)\n- `AsyncCache.synchronous()` round-trip — does the sync view honor the same\n  contract as the async cache?\n- Serialization round-trip — does the deserialized cache honor the same\n  promises about expiration durations, loader presence, etc.?\n\nA path that uses a different equivalence, ordering, or visibility from what\nthe contract promises is a **contract drift** finding. So is a path that\nsilently downgrades a configuration on round-trip.\n\nCommon drift patterns to check explicitly:\n\n- **Identity vs. equals on weak/soft caches**: `weakKeys`/`weakValues`/\n  `softValues` promise identity, but view collections that use\n  `o.equals(value)` or `Collection.contains(value)` may apply the user's\n  equality semantics instead.\n- **Cardinality vs. presence asymmetry**: methods documented as treating\n  in-flight async values as absent must align with `size`, `isEmpty`,\n  `equals`, `hashCode`, and iterators on the same view.\n- **Notification \"for any reason\"**: `removalListener` documented to fire\n  for any cause, but async paths may drop notifications for null or\n  exceptional completions.\n- **Cross-version serialization**: serialized fields renamed or defaulted\n  differently across versions can silently lose configuration or throw\n  on round-trip.\n- **Same-instance return semantics**: e.g., `compute(k, (k,v) -> v)` is\n  documented one way but updates timestamps/weight regardless.\n- **`size()` documented as estimate**: this is an explicit out — verify it\n  is actually documented as an estimate everywhere it diverges from logical\n  presence.\n- **Synchronous vs. asynchronous view divergence**: the `synchronous()`\n  view's `asMap()` may treat in-flight entries inconsistently across query,\n  mutation, and cardinality methods.\n\nEach finding should anchor both sides of the drift — the source of the\ncontract (file + javadoc snippet) and the divergent implementation (file +\nmethod) — and include a minimal user-observable scenario where the docs and\nthe code disagree.\n",".claude/skills/audit-coverage-gaps/SKILL.md":"---\nname: audit-coverage-gaps\ndescription: Discover test coverage gaps that could hide correctness defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume the existing tests miss at least one real defect.\n\n1. For each public method, identify the hardest-to-test edge cases:\n   - Null values (where permitted)\n   - Maximum/minimum weight\n   - Zero-duration expiration\n   - Mapping functions that return the same instance\n   - Mapping functions that throw\n   - Weighers that throw\n   - Expiry callbacks that throw\n   - CompletableFuture values (async cache edge cases)\n   - Keys/values with adversarial hashCode/equals\n\n2. For each edge case, trace the code path. Does the code handle it correctly?\n\n3. Identify combinatorially hard behavioral dimensions:\n   - Operation A on expired entry during concurrent operation B\n   - Exception in user callback X while holding lock Y\n   - GC collecting reference R between code points P and Q\n   - Fast path falls through to slow path under contention (e.g.,\n     entry appears expired on fast path, recovers under lock on slow path)\n   - Async cache: future completes between check and action (e.g.,\n     isComputingAsync returns true, but future completes before\n     the code that depends on that check executes)\n\n4. For each candidate gap, provide a minimal test case with the specific\n   cache configuration and thread interleaving needed to reach the code path.\n\nPriority ordering:\n- Paths involving the catch-commit-rethrow pattern (doComputeIfAbsent, remap)\n- Slow paths reachable only via contention (synchronized blocks after optimistic checks)\n- Interactions between expiration and the async value lifecycle (ASYNC_EXPIRY, isComputingAsync)\n\nFocus only on behavioral coverage gaps that could hide correctness bugs.\n",".claude/skills/audit-feature-interaction/SKILL.md":"---\nname: audit-feature-interaction\ndescription: Analyze feature interaction pairs and triples for concurrent defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects arising from multiple features operating\nsimultaneously on the same entry.\n\nAssume at least one feature interaction bug exists. If your analysis yields\nzero findings, re-examine the top-priority pairs below — explain specifically\nwhy no interleaving produces a bug.\n\nPriority ranking (from confirmed historical bugs):\n1. **Refresh + expiration** (D+B) — most-bugged interaction historically\n2. **Reference collection + any feature** (C+*) — value reference visibility\n3. **Async completion + any feature** (F+*) — future lifecycle edge cases\n4. **Eviction + weight change** (A+H) — counter drift during transitions\n\nFeatures:\nA. Eviction (size/weight limit exceeded)\nB. Expiration (afterAccess, afterWrite, variable)\nC. Reference collection (weak key, weak value, soft value GC)\nD. Refresh (automatic reload)\nE. Loading (CacheLoader / computeIfAbsent)\nF. Async completion (CompletableFuture values)\nG. Listener notification (removal listener, eviction listener)\nH. Weight change (Weigher returning different weight for new value)\n\nFor each pair (A,B), (A,C), ..., (G,H) — 28 pairs total:\n\n1. Can both features trigger simultaneously on the same entry?\n2. If yes, construct the most adversarial interleaving.\n3. Trace step-by-step: correct processing? notifications? final state? cleanup?\n\nAfter all pairs, identify highest-risk TRIPLE interactions:\n- Eviction + expiration + listener exception\n- Refresh + async completion + GC collection\n- Weight change + eviction + compute\n\nHigh-risk pairwise combinations:\n- Eviction during refresh (entry evicted while refreshing)\n- Expiration during compute (entry expires mid-computation)\n- GC during async completion (future completes after weak ref collected)\n- Weight change during eviction\n- Listener exception during any other feature\n\nFor each defect: state the features involved, provide the interleaving,\nstate the incorrect behavior.\n",".claude/skills/audit-correctness-proof/SKILL.md":"---\nname: audit-correctness-proof\ndescription: Attempt formal correctness proofs for all public cache methods\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAttempt to PROVE the correctness of the cache, not to find bugs.\n\nFor each public method (get, put, remove, compute, computeIfAbsent, merge,\nreplace, size, clear):\n\n1. State the method's specification: preconditions, postconditions,\n   concurrent behavior promises.\n2. Identify the synchronization protocol ensuring the postcondition.\n   For an expiring entry the clock is part of that state: place each\n   ticker read that dates the entry or judges its expiry relative to the\n   linearization point. A read taken before a step that can block (a\n   hash-bin lock, a node monitor, a user callback) dates or judges\n   against a stale clock, so check the paths that create an entry as\n   well as the ones that test it.\n3. Write a proof sketch:\n   a. Assume the precondition holds\n   b. Identify the critical section(s)\n   c. Show the postcondition is established within the critical section\n   d. Show no concurrent operation can invalidate it before the caller observes\n\n4. If you CANNOT complete the proof at any step, stop and report:\n   - Which step fails\n   - What additional assumption would be needed\n   - Whether the code guarantees that assumption\n\nGaps in the proof are more valuable than speculative bug reports — a gap\ntells us exactly where to look.\n\nDo not provide praise or style commentary.\n",".claude/skills/audit-exception-safety/SKILL.md":"---\nname: audit-exception-safety\ndescription: Audit exception safety and failure atomicity across all throw sites\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the cache for exception safety defects. For every code path where\nexceptions can be thrown, determine whether the cache is left consistent.\n\nAssume at least one exception safety bug exists. If your analysis yields\nzero findings, re-examine catch-commit-rethrow paths — explain specifically\nwhy no exception scenario leaves inconsistent state.\n\n**Priority #1: catch-commit-rethrow in doComputeIfAbsent and remap.** This is\nthe most commonly misunderstood pattern and historically the most fragile.\nTrace the EXACT sequence of committed mutations, notification delivery, and\nexception propagation for every exception type.\n\nUser-provided code that can throw:\n1. CacheLoader.load / loadAll / reload\n2. Weigher.weigh\n3. Expiry.expireAfterCreate / expireAfterUpdate / expireAfterRead\n4. Mapping functions passed to compute, computeIfAbsent, merge\n5. RemovalListener.onRemoval / EvictionListener\n\nRuntime exceptions:\n6. OutOfMemoryError during node/reference allocation\n7. StackOverflowError from deep re-entrancy\n8. RejectedExecutionException from executor\n\nIn the jcache adapter, also trace: CacheWriter.write/writeAll/delete/deleteAll\n(the spec requires partial-failure bookkeeping), EntryProcessor.process,\nExpiryPolicy methods, and Copier/serialization failures in store-by-value mode.\n\nFor each throw site:\n\n1. List every mutation already committed before the throw point.\n2. Determine whether the catch block rolls back or commits.\n3. Check for:\n   - **Phantom entries**: Node in CHM but invisible to eviction/expiration\n   - **Orphaned references**: WeakReference created but node rolled back\n   - **Counter drift**: weightedSize out of sync with actual entries\n   - **Lost notifications**: notifyEviction without notifyRemoval, or vice versa\n   - **Leaked futures**: CompletableFuture never completed\n   - **Stuck refresh**: refresh flag set but never cleared\n\n4. For catch-commit-rethrow (doComputeIfAbsent, remap), verify:\n   - Catches Throwable, not just RuntimeException\n   - Committed state is fully consistent\n   - Original exception is preserved\n\n5. For OutOfMemoryError specifically:\n   - Can AddTask/UpdateTask OOME orphan a CHM entry?\n   - Can WeakKeyReference/WeakValueReference OOME leave half-constructed node?\n\nFor each defect: state the throw site, mutations committed, inconsistent\nstate, and a concrete triggering scenario.\n",".claude/skills/audit-jcache-conformance/SKILL.md":"---\nname: audit-jcache-conformance\ndescription: JSR-107 (JCache) spec-conformance audit\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent, Write\n---\n\n# Audit: JSR-107 Conformance\n\nThis audit verifies the `jcache/` adapter against the **full JSR-107 1.1.1\nspecification** — every normative domain, not just the corners the last bug\ntouched. It walks the spec surface and allocates depth by where the TCK is blind.\n\n**Why the TCK is the floor, not the verification.** The TCK frequently asserts\nonly the observable **end-state** (`containsKey`/`get`), not the **event stream**\n(`CREATED`/`UPDATED`/`EXPIRED`/`REMOVED`) or the **statistics** (`CachePuts`,\nhits/misses, removals, evictions). Two implementations with different events and\ndifferent counts both pass. Every real bug found in this adapter recently lived in\nexactly that TCK-blind gap (zero-creation-expiry phantom `CREATED`;\nzero-update-expiry `put`-family suppressing `UPDATED`). So the audit goes **DEEP**\n(full spec→RI→ecosystem→internal-parity differential) on the event/statistic/\nexpiry/write-through surface, and runs a **COVERAGE** pass (spec-text correctness +\nconfirm a test pins it) over the rest of the spec — escalating any COVERAGE clause\nthat turns out to hide a TCK-invisible event or statistic to the DEEP differential.\n\nThis is a focused, resource-heavy specialization of `/audit-sibling-divergence`\nGroup G2. Read **`.claude/docs/jsr107-conformance.md` first** — it is the resource\nmap (live-fetch recipes, RI/ecosystem class locations for every domain below), the\ndifferential methodology, the parity-test pattern, and the catalogue of\nalready-resolved divergences (do not re-flag those).\n\nFor this skill, the reference and its standing rulings are read before analysis, overriding the\nauditor's Phase 1.5 reading order for that document. Verify applicable rulings against current\ncontracts and source before using them to adjudicate a finding.\n\n## When to run\n\n- After any change to `jcache/src/main` touching `CacheProxy`, `LoadingCacheProxy`,\n  `EntryProcessorEntry`/`postProcess`, `EventDispatcher`, expiry, statistics,\n  the write-through (`CacheWriter`) path, or store-by-value copying.\n- Before a release, as a comprehensive 1.1.1 re-verification.\n- Once per quarter as a conformance baseline.\n- When a `/audit-sibling-divergence` run raises a Group G2 finding — use this to\n  resolve the *direction* (the static audit cannot, and has guessed wrong before).\n- Not for adapter concurrency: this audit is a single-threaded spec differential.\n  Concurrency windows (live-view vs snapshot races, obligation pairing on\n  executor threads, close/destroy symmetry) belong to `/audit-subsystem-safety`,\n  `/audit-memory-retention`, `/audit-lifecycle`, and `/audit-contract-drift`'s\n  obligation sweep.\n\nHeavyweight (fetches the spec, clones/fetches the ecosystem, may spawn\nsub-auditors). Not for routine pre-commit review.\n\n## Step 0: Load the spec and the resource map\n\nRead `.claude/docs/jsr107-conformance.md`. Fetch the live spec:\n\n```bash\nDOC=1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA\ncurl -fsSL \"https://docs.google.com/document/d/$DOC/export?format=txt\" -o /tmp/jsr107_spec.txt\n```\n\nConfirm it fetched the real spec (grep for `getExpiryForUpdate`), not an auth page.\nThe export reflows; reference the spec by **section name** (the 1.1.1 section\nheadings are listed per-domain in the matrix below). Locate the TCK sources\n(`find ~/.gradle/caches -name 'cache-tests-1.1.1-test-sources.jar'` and\n`jcache/build/tck/`).\n\n## Step 1: Build the spec-surface matrix\n\nWalk the **whole** 1.1.1 spec. Map each normative domain to its spec section, its\nadapter code, and the **depth** it warrants. Do not stop at the write-path/expiry\nfamily — that is one DEEP domain among several, and the recent bugs there created a\nrecency bias this matrix exists to correct.\n\n**Depth = DEEP** — the TCK does not pin the event stream / statistic / expiry\ntiming, so it can mask a real divergence. Run the full differential (Step 2) and\nadd a parity-matrix test.\n**Depth = COVERAGE** — the spec text is unambiguous and the TCK's end-state\nassertion is sufficient. Confirm (a) the adapter matches the spec text and (b) a\ntest pins it; cite the test. Escalate to DEEP the moment a hidden event/stat\nappears.\n\n| # | Domain | 1.1.1 section | Depth | Verify |\n|---|--------|---------------|-------|--------|\n| A | Write ops × expiry | *Expiry Policies*; *Statistics Effects* | **DEEP** | `put`/`putAll`/`putIfAbsent`/`getAndPut`/`replace(K,V)`/`replace(K,V,V)`/`getAndReplace` — creation-vs-update `ZERO`/`ETERNAL`/`null` expiry; `CREATED`/`UPDATED` emission; `CachePuts` count. **Internal parity across all siblings.** |\n| B | Read & access | *Expiry Policies*; *Integration*; *Statistics Effects* | **DEEP** | `get`/`getAll`/`containsKey`/`iterator` — `getExpiryForAccess` `ZERO`/`null`/finite; `CacheHits`/`CacheMisses` (containsKey must not count); read-through load as `get`-miss-not-put |\n| C | Remove ops | *Cache Entry Listeners*; *Integration*; *Statistics Effects* | **DEEP** | `remove(K)`/`remove(K,V)`/`getAndRemove`/`removeAll(keys)`/`removeAll()`/`clear()` — `REMOVED` event + `oldValue`; **`removeAll()` counts removals, `clear()` does not**; removal-stat gating on an already-expired entry; `CacheWriter.delete` |\n| D | Entry processors | *Entry Processors*; *Statistics Effects* | **DEEP** | `invoke`/`invokeAll` — `EntryProcessorEntry.Action` machine (NONE→READ/CREATED/UPDATED/LOADED/DELETED) vs RI `MutableEntryOperation`; per-op events + stats; read-through `getValue()` ending in `LOADED` counts a miss, not a put (catalogued — confirm, don't re-flag) |\n| E | Events | *Cache Entry Listeners* | **DEEP** | `CREATED`/`UPDATED`/`REMOVED`/`EXPIRED` payload (`isOldValueAvailable`/`getOldValue`); synchronous vs asynchronous dispatch; `CacheEntryEventFilter`; per-key ordering (`EventDispatcher` CompletableFuture chains); runtime register/deregister |\n| F | Statistics | *Statistics Effects of Cache Operations* | **DEEP** | The **full** `CacheStatisticsMXBean` matrix: `CacheHits`/`Misses`/`Gets`/`Puts`/`Removals`/`Evictions` × every op. Failed `putIfAbsent`/`replace` accounting; **`CacheEvictions` (the Caffeine-native-eviction→JCache-stat bridge — no sibling resolves this identically)**; `CacheStatisticsMXBean.clear()` resets every counter and timer; averages (the RI divides all three by `CacheGets`, so its put and remove means read 0 until a get) |\n| G | Integration — writer | *Integration* | **DEEP** | Write-through: `CacheWriter.write`/`delete` ordering vs store and vs event/stat; **a writer exception must suppress the event and the `CachePuts` increment**; `writeAll`/`deleteAll` partial-failure collection mutation; `CacheWriterException` wrapping |\n| H | Integration — loader | *Integration* | **DEEP** | Read-through `get`/`getAll`/`invoke`; `loadAll` `replaceExistingValues` + completion listener; `CacheLoaderException` wrapping (still required by the 1.1.1 `CacheLoaderException` javadoc, and asserted by the TCK for `get` and `loadAll`) |\n| I | Store-by-value | *Store-By-Value and Store-By-Reference* | COVERAGE | Copy points (`put`/`get`/`iterator`/event payloads); caller-mutation isolation; `RISerializingInternalConverter` vs `RIReferenceInternalConverter`. Escalate if a copy is skipped on an event/stat path |\n| J | Types | *Configuration* | COVERAGE | `getKeyType`/`getValueType` metadata; exact type matching in `getCache(name, K, V)` (`ClassCastException` on mismatch); optional runtime type checking on `put`/`get` |\n| K | Configuration | *Configuration* | COVERAGE | `MutableConfiguration` snapshot-on-create; `Factory<CacheLoader/CacheWriter/ExpiryPolicy>`; read-through/write-through/store-by-value/stats/mgmt flags |\n| L | Lifecycle | *Caching Providers* | COVERAGE | `close`/`isClosed` → `IllegalStateException` on every op; `CacheManager` create(dup→`CacheException`)/get/destroy; `getCacheNames` immutable iterator; provider URI/classloader/properties |\n| M | Management | *Caching Providers* (MXBeans) | COVERAGE | `CacheMXBean` attributes; JMX `ObjectName` sanitize (catalogued); enable/disable statistics & management at runtime |\n| N | Null / adversarial inputs | method javadocs | COVERAGE | `NullPointerException` contract on null key/value/map/filter/processor args across the full API |\n\n(*Annotations* — CDI/Spring `@CacheResult` etc. — is a separate spec section the\nadapter does not implement; out of scope.)\n\n## Step 2: Run the differential\n\nFor each **DEEP** domain corner, in order, until the reference behavior is\nunambiguous:\n\n1. **Spec text** — read the governing javadoc/table in `/tmp/jsr107_spec.txt`. Note\n   deliberately-different wording between sibling operations (create-vs-update is\n   the canonical trap).\n2. **TCK** — find the test and read *what it asserts*. End-state only → it cannot\n   settle the event/stat question; proceed. (When TCK and spec javadoc disagree,\n   **TCK wins** — see `.claude/rules/jcache-adapter.md`.)\n3. **RI** — read the oracle class for that domain (the doc's resource map names one\n   per domain: `RICache` write/remove paths, `RICacheStatisticsMXBean`,\n   `RICacheEventDispatcher`, `RICache.writeCacheEntry`/`deleteCacheEntry`, etc.).\n4. **≥3 ecosystem impls** — fetch the adapter files named in the doc. Classify each;\n   record any split.\n5. **Caffeine internal parity** — verify every sibling path agrees with the\n   reference *and with each other*. Internal disagreement = the highest-signal\n   finding (one side is provably wrong).\n\nFor each **COVERAGE** domain: confirm the adapter's behavior matches the spec text,\nand that a TCK or unit test pins it — cite the test by name. If the only test\nasserts end-state and the clause hides an event/stat (e.g. does `clear()` fire\n`REMOVED`? does a store-by-value copy happen on the event payload?), **escalate that\ncorner to DEEP** and run the ladder above. A COVERAGE domain with a correct-but-\nuntested clause is a coverage finding, not a pass.\n\nSpawn one sub-auditor per domain-group — **write/read/remove (A–C)**, **entry\nprocessors (D)**, **events (E)**, **statistics (F)**, **integration loader+writer\n(G–H)**, **store-by-value/types/config/lifecycle/management (I–N)** — each with the\ndoc + the fetched spec as context, each required to return a concrete witness\n(operation sequence → divergent event/stat/end-state, or the test that pins the\nclause). Sub-agents cannot read session memory — **paste the doc's divergence\ncatalogue inline** so they do not re-derive known false-positives. Direct each\nsub-auditor to write its report to a **group-suffixed path**\n(`.local/audits/<model>/audit-jcache-conformance-<group>.md`), never the canonical path:\nparallel groups writing `audit-jcache-conformance.md` overwrite each other (the\n2026-07 run lost two group reports this way and had to recover them from agent\ntranscripts).\n\n## Step 3: Resolve and pin\n\nFor each confirmed real divergence:\n\n- State the spec text, the RI behavior, the ecosystem tally, and the Caffeine\n  internal-parity result. The fix direction follows the spec + RI; if the static\n  finding assumed the opposite direction, **say so** (this has happened — the\n  zero-update-expiry fix direction was inverted from what the static audit guessed).\n- Implement the fix as a minimal, surgical change, then add a **parity-matrix\n  test** (`writeOp_*`/`readOp_*`/`removeOp_*` over every sibling op) asserting they\n  all produce the same event count, statistic delta, and end-state. The TCK is not\n  the regression guard — the parity test is.\n- Run `:jcache:test` **and** `:jcache:tckTest` (per `.claude/rules/jcache-adapter.md`;\n  the TCK encodes interpretations unit tests miss).\n- Update `.claude/docs/jsr107-conformance.md`'s catalogue and ecosystem matrix so\n  the next run does not re-litigate it.\n\nFor a COVERAGE-tier clause that is correct but **untested**, record it as a coverage\ngap (which test to add), not a bug.\n\n## Output\n\nThe orchestrator (not the sub-auditors) writes\n`.local/audits/<model>/audit-jcache-conformance.md` — the consolidated adjudication\nacross the group-suffixed reports — using the standard\n`.claude/docs/finding-taxonomy.md` schema (severity / category / confidence /\nclassification).\n\nLead with the **spec-surface coverage matrix**: every domain A–N → depth → verdict\n(conformant / divergence / coverage-gap) → the witness or the pinning-test citation.\nA clean run must show *every domain was reached*, so \"clean\" means the full 1.1.1\nsurface was walked — not just the recent-bug corners.\n\nThen, for each finding: the spec citation (by section name), the RI behavior, the\necosystem tally, the Caffeine internal-parity result, the witness (operation →\ndivergent observable), and the resolution direction with its justification. A\nfinding with no spec/RI/ecosystem backing for its *direction* is not ready — record\nit as escalated, not as a fix.\n",".claude/skills/audit-iteration/SKILL.md":"---\nname: audit-iteration\ndescription: Analyze concurrent iteration and view consistency guarantees\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the concurrent iteration and view behavior of the cache.\n\nAssume at least one view operation can observe inconsistent state under\nconcurrent modification. If your analysis yields zero findings, re-examine\nexpired-but-present entries and dead/retired node visibility — explain\nspecifically why no user-observable inconsistency is possible.\n\nView operations to analyze:\n- asMap().entrySet/keySet/values() iteration\n- asMap().forEach()\n- asMap().size()\n- asMap().containsValue()\n- Snapshot operations (policy().eviction().hottest/coldest)\n\nFor each:\n1. What consistency guarantee? (Snapshot? Weakly consistent? Sequentially consistent?)\n2. Can iteration observe:\n   - A retired or dead node?\n   - An entry whose key/value has been garbage collected?\n   - An expired but not-yet-cleaned-up entry?\n   - A node with inconsistent key/value (key from one version, value from another)?\n3. Can concurrent put/remove/compute cause the iterator to:\n   - Skip an entry that existed for the entire iteration?\n   - Return the same entry twice?\n   - Throw ConcurrentModificationException?\n4. Does wrapping ConcurrentHashMap iterators introduce issues CHM wouldn't have?\n\nFor each issue: construct a concrete interleaving and state whether it violates\nthe documented contract or is expected weakly-consistent behavior.\n",".claude/skills/audit-jdk-seam/SKILL.md":"# audit-jdk-seam\n\nPath: `.claude/skills/audit-jdk-seam/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/SKILL.md)",".claude/skills/audit-jmm/SKILL.md":"# audit-jmm\n\nPath: `.claude/skills/audit-jmm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jmm/SKILL.md)",".claude/skills/audit-lifecycle/SKILL.md":"# audit-lifecycle\n\nPath: `.claude/skills/audit-lifecycle/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-lifecycle/SKILL.md)",".claude/skills/audit-linearizability/SKILL.md":"# audit-linearizability\n\nPath: `.claude/skills/audit-linearizability/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-linearizability/SKILL.md)",".claude/skills/audit-liveness/SKILL.md":"# audit-liveness\n\nPath: `.claude/skills/audit-liveness/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-liveness/SKILL.md)",".claude/skills/audit-map-contract/SKILL.md":"# audit-map-contract\n\nPath: `.claude/skills/audit-map-contract/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-map-contract/SKILL.md)",".claude/skills/audit-memory-retention/SKILL.md":"# audit-memory-retention\n\nPath: `.claude/skills/audit-memory-retention/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-memory-retention/SKILL.md)",".claude/skills/audit-performance/SKILL.md":"# audit-performance\n\nPath: `.claude/skills/audit-performance/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-performance/SKILL.md)",".claude/skills/audit-redundancy/SKILL.md":"# audit-redundancy\n\nPath: `.claude/skills/audit-redundancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-redundancy/SKILL.md)",".claude/skills/audit-reentrancy/SKILL.md":"# audit-reentrancy\n\nPath: `.claude/skills/audit-reentrancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-reentrancy/SKILL.md)",".claude/skills/audit-regret/SKILL.md":"# audit-regret\n\nPath: `.claude/skills/audit-regret/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/SKILL.md)",".claude/skills/audit-serialization/SKILL.md":"# audit-serialization\n\nPath: `.claude/skills/audit-serialization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-serialization/SKILL.md)",".claude/skills/audit-sibling-divergence/SKILL.md":"# audit-sibling-divergence\n\nPath: `.claude/skills/audit-sibling-divergence/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-sibling-divergence/SKILL.md)",".claude/skills/audit-state-machine/SKILL.md":"# audit-state-machine\n\nPath: `.claude/skills/audit-state-machine/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-state-machine/SKILL.md)",".claude/skills/audit-subsystem-safety/SKILL.md":"# audit-subsystem-safety\n\nPath: `.claude/skills/audit-subsystem-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-subsystem-safety/SKILL.md)",".claude/skills/audit-temporal-walk/SKILL.md":"# audit-temporal-walk\n\nPath: `.claude/skills/audit-temporal-walk/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/SKILL.md)",".claude/skills/audit-third-party-contracts/SKILL.md":"# audit-third-party-contracts\n\nPath: `.claude/skills/audit-third-party-contracts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-third-party-contracts/SKILL.md)",".claude/skills/climber-gate/SKILL.md":"# climber-gate\n\nPath: `.claude/skills/climber-gate/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/SKILL.md)",".claude/skills/climber-minimize/SKILL.md":"# climber-minimize\n\nPath: `.claude/skills/climber-minimize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/SKILL.md)",".claude/skills/optimize-cache/SKILL.md":"# optimize-cache\n\nPath: `.claude/skills/optimize-cache/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/SKILL.md)",".claude/skills/review-change/SKILL.md":"# review-change\n\nPath: `.claude/skills/review-change/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/review-change/SKILL.md)",".claude/skills/sim-analyze/SKILL.md":"# sim-analyze\n\nPath: `.claude/skills/sim-analyze/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-analyze/SKILL.md)",".claude/skills/sim-compare/SKILL.md":"# sim-compare\n\nPath: `.claude/skills/sim-compare/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-compare/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/AGENTS.md)",".claude/CLAUDE.md":"# .claude - Claude Agent Guidelines & System Prompt\n\nPath: `.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/CLAUDE.md)",".codex/config.toml":"# Codex Directive: config.toml\n\nPath: `.codex/config.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/config.toml)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.github/copilot-instructions.md)",".claude/agents/auditor.md":"# Subagent: auditor\n\nPath: `.claude/agents/auditor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/agents/auditor.md)",".claude/rules/async-cache.md":"# Rules Skill\n\nPath: `.claude/rules/async-cache.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/async-cache.md)",".claude/rules/code-comments.md":"# Rules Skill\n\nPath: `.claude/rules/code-comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/code-comments.md)",".claude/rules/concurrency.md":"# Rules Skill\n\nPath: `.claude/rules/concurrency.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/concurrency.md)",".claude/rules/design-decisions.md":"# Rules Skill\n\nPath: `.claude/rules/design-decisions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/design-decisions.md)",".claude/rules/errorprone.md":"# Rules Skill\n\nPath: `.claude/rules/errorprone.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/errorprone.md)",".claude/rules/generated-code.md":"# Rules Skill\n\nPath: `.claude/rules/generated-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/generated-code.md)",".claude/rules/github-actions.md":"# Rules Skill\n\nPath: `.claude/rules/github-actions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/github-actions.md)",".claude/rules/gradle-build.md":"# Rules Skill\n\nPath: `.claude/rules/gradle-build.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/gradle-build.md)",".claude/rules/guava-adapter.md":"# Rules Skill\n\nPath: `.claude/rules/guava-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/guava-adapter.md)",".claude/rules/jcache-adapter.md":"# Rules Skill\n\nPath: `.claude/rules/jcache-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/jcache-adapter.md)",".claude/rules/simulator.md":"# Rules Skill\n\nPath: `.claude/rules/simulator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/simulator.md)",".claude/rules/testing.md":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/testing.md)",".codex/agents/auditor.toml":"# Codex Directive: auditor.toml\n\nPath: `.codex/agents/auditor.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/agents/auditor.toml)",".claude/skills/audit-jdk-seam/fetch-openjdk.sh":"# Claude Directive: fetch-openjdk.sh\n\nPath: `.claude/skills/audit-jdk-seam/fetch-openjdk.sh`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/fetch-openjdk.sh)",".claude/skills/audit-jdk-seam/jbs.py":"# Claude Directive: jbs.py\n\nPath: `.claude/skills/audit-jdk-seam/jbs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/jbs.py)",".claude/skills/audit-regret/regret.py":"# Claude Directive: regret.py\n\nPath: `.claude/skills/audit-regret/regret.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/regret.py)",".claude/skills/audit-regret/search.py":"# Claude Directive: search.py\n\nPath: `.claude/skills/audit-regret/search.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/search.py)",".claude/skills/audit-regret/tenants.py":"# Claude Directive: tenants.py\n\nPath: `.claude/skills/audit-regret/tenants.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/tenants.py)",".claude/skills/audit-regret/test_csv.py":"# Claude Directive: test_csv.py\n\nPath: `.claude/skills/audit-regret/test_csv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/test_csv.py)",".claude/skills/audit-regret/workload.py":"# Claude Directive: workload.py\n\nPath: `.claude/skills/audit-regret/workload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/workload.py)",".claude/skills/audit-temporal-walk/README.md":"# Audit-temporal-walk Skill\n\nPath: `.claude/skills/audit-temporal-walk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/README.md)",".claude/skills/audit-temporal-walk/audit_paths.py":"# Claude Directive: audit_paths.py\n\nPath: `.claude/skills/audit-temporal-walk/audit_paths.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/audit_paths.py)",".claude/skills/audit-temporal-walk/fix-audit.txt":"# Claude Directive: fix-audit.txt\n\nPath: `.claude/skills/audit-temporal-walk/fix-audit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/fix-audit.txt)",".claude/skills/audit-temporal-walk/invariant-ledger.txt":"# Claude Directive: invariant-ledger.txt\n\nPath: `.claude/skills/audit-temporal-walk/invariant-ledger.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/invariant-ledger.txt)",".claude/skills/audit-temporal-walk/lens-deletion.txt":"# Claude Directive: lens-deletion.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-deletion.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-deletion.txt)",".claude/skills/audit-temporal-walk/lens-intent.txt":"# Claude Directive: lens-intent.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-intent.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-intent.txt)",".claude/skills/audit-temporal-walk/lens-sibling.txt":"# Claude Directive: lens-sibling.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-sibling.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-sibling.txt)",".claude/skills/audit-temporal-walk/per-commit.txt":"# Claude Directive: per-commit.txt\n\nPath: `.claude/skills/audit-temporal-walk/per-commit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/per-commit.txt)",".claude/skills/audit-temporal-walk/run.py":"# Claude Directive: run.py\n\nPath: `.claude/skills/audit-temporal-walk/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/run.py)",".claude/skills/audit-temporal-walk/test-walk.txt":"# Claude Directive: test-walk.txt\n\nPath: `.claude/skills/audit-temporal-walk/test-walk.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/test-walk.txt)",".claude/skills/audit-temporal-walk/verify.py":"# Claude Directive: verify.py\n\nPath: `.claude/skills/audit-temporal-walk/verify.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.py)",".claude/skills/audit-temporal-walk/verify.txt":"# Claude Directive: verify.txt\n\nPath: `.claude/skills/audit-temporal-walk/verify.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.txt)",".claude/skills/audit-temporal-walk/walker.py":"# Claude Directive: walker.py\n\nPath: `.claude/skills/audit-temporal-walk/walker.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/walker.py)",".claude/skills/climber-gate/a1_tenant.py":"# Claude Directive: a1_tenant.py\n\nPath: `.claude/skills/climber-gate/a1_tenant.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/a1_tenant.py)",".claude/skills/climber-gate/admission.py":"# Claude Directive: admission.py\n\nPath: `.claude/skills/climber-gate/admission.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission.py)",".claude/skills/climber-gate/admission_harness.py":"# Claude Directive: admission_harness.py\n\nPath: `.claude/skills/climber-gate/admission_harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission_harness.py)",".claude/skills/climber-gate/blind_gen.py":"# Claude Directive: blind_gen.py\n\nPath: `.claude/skills/climber-gate/blind_gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blind_gen.py)",".claude/skills/climber-gate/blindlock.py":"# Claude Directive: blindlock.py\n\nPath: `.claude/skills/climber-gate/blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blindlock.py)",".claude/skills/climber-gate/byworkload.py":"# Claude Directive: byworkload.py\n\nPath: `.claude/skills/climber-gate/byworkload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/byworkload.py)",".claude/skills/climber-gate/census.py":"# Claude Directive: census.py\n\nPath: `.claude/skills/climber-gate/census.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/census.py)",".claude/skills/climber-gate/corner.py":"# Claude Directive: corner.py\n\nPath: `.claude/skills/climber-gate/corner.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/corner.py)",".claude/skills/climber-gate/crashnoise.py":"# Claude Directive: crashnoise.py\n\nPath: `.claude/skills/climber-gate/crashnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/crashnoise.py)",".claude/skills/climber-gate/demoflood.py":"# Claude Directive: demoflood.py\n\nPath: `.claude/skills/climber-gate/demoflood.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/demoflood.py)",".claude/skills/climber-gate/descent.py":"# Claude Directive: descent.py\n\nPath: `.claude/skills/climber-gate/descent.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/descent.py)",".claude/skills/climber-gate/escgen.py":"# Claude Directive: escgen.py\n\nPath: `.claude/skills/climber-gate/escgen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/escgen.py)",".claude/skills/climber-gate/exposure.py":"# Claude Directive: exposure.py\n\nPath: `.claude/skills/climber-gate/exposure.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/exposure.py)",".claude/skills/climber-gate/floors.py":"# Claude Directive: floors.py\n\nPath: `.claude/skills/climber-gate/floors.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/floors.py)",".claude/skills/climber-gate/frozen_matched.py":"# Claude Directive: frozen_matched.py\n\nPath: `.claude/skills/climber-gate/frozen_matched.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/frozen_matched.py)",".claude/skills/climber-gate/gate.py":"# Claude Directive: gate.py\n\nPath: `.claude/skills/climber-gate/gate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gate.py)",".claude/skills/climber-gate/gen.py":"# Claude Directive: gen.py\n\nPath: `.claude/skills/climber-gate/gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen.py)",".claude/skills/climber-gate/gen2.py":"# Claude Directive: gen2.py\n\nPath: `.claude/skills/climber-gate/gen2.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen2.py)",".claude/skills/climber-gate/gen_adv.py":"# Claude Directive: gen_adv.py\n\nPath: `.claude/skills/climber-gate/gen_adv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_adv.py)",".claude/skills/climber-gate/gen_attacks.py":"# Claude Directive: gen_attacks.py\n\nPath: `.claude/skills/climber-gate/gen_attacks.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_attacks.py)",".claude/skills/climber-gate/gen_blindlock.py":"# Claude Directive: gen_blindlock.py\n\nPath: `.claude/skills/climber-gate/gen_blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_blindlock.py)",".claude/skills/climber-gate/gen_h4c1.py":"# Claude Directive: gen_h4c1.py\n\nPath: `.claude/skills/climber-gate/gen_h4c1.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_h4c1.py)",".claude/skills/climber-gate/gen_jam.py":"# Claude Directive: gen_jam.py\n\nPath: `.claude/skills/climber-gate/gen_jam.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_jam.py)",".claude/skills/climber-gate/gen_moat.py":"# Claude Directive: gen_moat.py\n\nPath: `.claude/skills/climber-gate/gen_moat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_moat.py)",".claude/skills/climber-gate/gen_norank.py":"# Claude Directive: gen_norank.py\n\nPath: `.claude/skills/climber-gate/gen_norank.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_norank.py)",".claude/skills/climber-gate/gen_straddle.py":"# Claude Directive: gen_straddle.py\n\nPath: `.claude/skills/climber-gate/gen_straddle.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_straddle.py)",".claude/skills/climber-gate/harness.py":"# Claude Directive: harness.py\n\nPath: `.claude/skills/climber-gate/harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/harness.py)",".claude/skills/climber-gate/kvcache.py":"# Claude Directive: kvcache.py\n\nPath: `.claude/skills/climber-gate/kvcache.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/kvcache.py)",".claude/skills/climber-gate/lcs2lirs.py":"# Claude Directive: lcs2lirs.py\n\nPath: `.claude/skills/climber-gate/lcs2lirs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/lcs2lirs.py)",".claude/skills/climber-gate/marginal.py":"# Claude Directive: marginal.py\n\nPath: `.claude/skills/climber-gate/marginal.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/marginal.py)",".claude/skills/climber-gate/mechanism.py":"# Claude Directive: mechanism.py\n\nPath: `.claude/skills/climber-gate/mechanism.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mechanism.py)",".claude/skills/climber-gate/mixnoise.py":"# Claude Directive: mixnoise.py\n\nPath: `.claude/skills/climber-gate/mixnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mixnoise.py)",".claude/skills/climber-gate/pair.py":"# Claude Directive: pair.py\n\nPath: `.claude/skills/climber-gate/pair.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/pair.py)",".claude/skills/climber-gate/probe.py":"# Claude Directive: probe.py\n\nPath: `.claude/skills/climber-gate/probe.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/probe.py)",".claude/skills/climber-gate/real.py":"# Claude Directive: real.py\n\nPath: `.claude/skills/climber-gate/real.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/real.py)",".claude/skills/climber-gate/repeat.py":"# Claude Directive: repeat.py\n\nPath: `.claude/skills/climber-gate/repeat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/repeat.py)",".claude/skills/climber-gate/run.py":"# Claude Directive: run.py\n\nPath: `.claude/skills/climber-gate/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/run.py)",".claude/skills/climber-gate/screen.py":"# Claude Directive: screen.py\n\nPath: `.claude/skills/climber-gate/screen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/screen.py)",".claude/skills/climber-gate/slowswap.py":"# Claude Directive: slowswap.py\n\nPath: `.claude/skills/climber-gate/slowswap.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/slowswap.py)",".claude/skills/climber-gate/startwin.py":"# Claude Directive: startwin.py\n\nPath: `.claude/skills/climber-gate/startwin.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/startwin.py)",".claude/skills/climber-gate/sweep.py":"# Claude Directive: sweep.py\n\nPath: `.claude/skills/climber-gate/sweep.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/sweep.py)",".claude/skills/climber-gate/test_seed_tools.py":"# Claude Directive: test_seed_tools.py\n\nPath: `.claude/skills/climber-gate/test_seed_tools.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/test_seed_tools.py)",".claude/skills/climber-gate/traceio.py":"# Claude Directive: traceio.py\n\nPath: `.claude/skills/climber-gate/traceio.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/traceio.py)",".claude/skills/climber-gate/whisper.py":"# Claude Directive: whisper.py\n\nPath: `.claude/skills/climber-gate/whisper.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper.py)",".claude/skills/climber-gate/whisper_mod.py":"# Claude Directive: whisper_mod.py\n\nPath: `.claude/skills/climber-gate/whisper_mod.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper_mod.py)",".claude/skills/climber-minimize/ablate.py":"# Claude Directive: ablate.py\n\nPath: `.claude/skills/climber-minimize/ablate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/ablate.py)",".claude/skills/audit-regret/specs/absolve.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve.json)",".claude/skills/audit-regret/specs/absolve_p8.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve_p8.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve_p8.json)",".claude/skills/audit-regret/specs/bandrider.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/bandrider.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/bandrider.json)",".claude/skills/audit-regret/specs/crestpast.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/crestpast.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/crestpast.json)",".claude/skills/audit-regret/specs/deadpark.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadpark.json)",".claude/skills/audit-regret/specs/deadphase.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadphase.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadphase.json)",".claude/skills/audit-regret/specs/drift.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/drift.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/drift.json)",".claude/skills/audit-regret/specs/entryduty.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/entryduty.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/entryduty.json)",".claude/skills/audit-regret/specs/flashpark.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/flashpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/flashpark.json)",".claude/skills/audit-regret/specs/ghostclaim.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ghostclaim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ghostclaim.json)",".claude/skills/audit-regret/specs/hazefloor.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/hazefloor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/hazefloor.json)",".claude/skills/audit-regret/specs/jumpslide.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide.json)",".claude/skills/audit-regret/specs/jumpslide_260.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_260.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_260.json)",".claude/skills/audit-regret/specs/jumpslide_period26.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_period26.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_period26.json)",".claude/skills/audit-regret/specs/latebloom.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom.json)",".claude/skills/audit-regret/specs/latebloom_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom_min.json)",".claude/skills/audit-regret/specs/lifecycle_fit_scan.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lifecycle_fit_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lifecycle_fit_scan.json)",".claude/skills/audit-regret/specs/lowbar.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lowbar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lowbar.json)",".claude/skills/audit-regret/specs/mainsat.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mainsat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mainsat.json)",".claude/skills/audit-regret/specs/mixture.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mixture.json)",".claude/skills/audit-regret/specs/needle.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle.json)",".claude/skills/audit-regret/specs/needle_wide.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle_wide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle_wide.json)",".claude/skills/audit-regret/specs/norank.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/norank.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/norank.json)",".claude/skills/audit-regret/specs/parkveil.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil.json)",".claude/skills/audit-regret/specs/parkveil_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil_min.json)",".claude/skills/audit-regret/specs/phases.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/phases.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/phases.json)",".claude/skills/audit-regret/specs/pure_scan.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/pure_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/pure_scan.json)",".claude/skills/audit-regret/specs/ramp_retest.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ramp_retest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ramp_retest.json)",".claude/skills/audit-regret/specs/scarburst.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/scarburst.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/scarburst.json)",".claude/skills/audit-regret/specs/shallowmoat.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/shallowmoat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/shallowmoat.json)",".claude/skills/audit-regret/specs/sidecliff.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/sidecliff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/sidecliff.json)",".claude/skills/audit-regret/specs/stillness_starve.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve.json)",".claude/skills/audit-regret/specs/stillness_starve_min.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve_min.json)",".claude/skills/audit-regret/specs/whisper.json":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/whisper.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/whisper.json)",".claude/skills/optimize-cache/references/measurement.md":"# References Skill\n\nPath: `.claude/skills/optimize-cache/references/measurement.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/references/measurement.md)",".claude/skills/optimize-cache/scripts/jmh-session.init.gradle":"# Claude Directive: jmh-session.init.gradle\n\nPath: `.claude/skills/optimize-cache/scripts/jmh-session.init.gradle`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/scripts/jmh-session.init.gradle)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/AGENTS.md)","tokens":300,"sizeBytes":152},{"name":"async-cache.md","path":".claude/rules/async-cache.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/async-cache.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/async-cache.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/async-cache.md)","tokens":300,"sizeBytes":169},{"name":"code-comments.md","path":".claude/rules/code-comments.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/code-comments.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/code-comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/code-comments.md)","tokens":300,"sizeBytes":173},{"name":"concurrency.md","path":".claude/rules/concurrency.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/concurrency.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/concurrency.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/concurrency.md)","tokens":300,"sizeBytes":169},{"name":"design-decisions.md","path":".claude/rules/design-decisions.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/design-decisions.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/design-decisions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/design-decisions.md)","tokens":300,"sizeBytes":179},{"name":"errorprone.md","path":".claude/rules/errorprone.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/errorprone.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/errorprone.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/errorprone.md)","tokens":300,"sizeBytes":167},{"name":"generated-code.md","path":".claude/rules/generated-code.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/generated-code.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/generated-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/generated-code.md)","tokens":300,"sizeBytes":175},{"name":"github-actions.md","path":".claude/rules/github-actions.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/github-actions.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/github-actions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/github-actions.md)","tokens":300,"sizeBytes":175},{"name":"gradle-build.md","path":".claude/rules/gradle-build.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/gradle-build.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/gradle-build.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/gradle-build.md)","tokens":300,"sizeBytes":171},{"name":"guava-adapter.md","path":".claude/rules/guava-adapter.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/guava-adapter.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/guava-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/guava-adapter.md)","tokens":300,"sizeBytes":173},{"name":"jcache-adapter.md","path":".claude/rules/jcache-adapter.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/jcache-adapter.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/jcache-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/jcache-adapter.md)","tokens":300,"sizeBytes":175},{"name":"simulator.md","path":".claude/rules/simulator.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/simulator.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/simulator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/simulator.md)","tokens":300,"sizeBytes":165},{"name":"testing.md","path":".claude/rules/testing.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/testing.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/testing.md)","tokens":300,"sizeBytes":161},{"name":"SKILL.md","path":".claude/skills/audit-adaptivity/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-adaptivity/SKILL.md","title":"audit-adaptivity","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-adaptivity\ndescription: Audit the adaptive window hill-climber and region-resize logic for implementation defects (not algorithm quality)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the adaptive W-TinyLFU control loop and the admission-window / main-region\nresize logic for IMPLEMENTATION defects. This is the one eviction subsystem not in\n`/audit-subsystem-safety`'s scope, and it was recently rebuilt — the climber now lives in the\npackage-private `WindowClimber` class (reached through the generated `climber` field), with a new\ndensity-signal + probe-machine large tier (>4096) — so it has elevated bug density.\n\n## Scope boundary — implementation correctness, NOT algorithm quality\n\nThe adaptation policy itself is at its tuned frontier. Out of scope: convergence\nrate, hit-rate, oscillation-as-a-design-tradeoff, and the choice of the tuning\nconstants. (Behavioral hit-rate regression against the adversarial trap suite is\n`/climber-gate`'s job, not this audit's.) Do NOT report \"the climber could converge faster / oscillates / constant\nX should be Y.\" Report only defects: arithmetic that yields a wrong value, a sign\nerror, a state that violates a structural invariant, a race, a NaN, or an overflow.\n\n## Methods in scope\n\n- `climb`, `determineAdjustment` — the feedback step (reactive: hit-rate delta; density:\n  within-sample densities → step → adjustment). `determineAdjustment` carries\n  `mainProtectedMaximum` to size the probation capacity for the probe verdict\n- `densityClimb`, `armProbe`, `walkStep`, `probeEnding`, `undoProbe`, `DensityClimber.steer` — the\n  large tier's signal, probe machine, and verdict internals (all on `WindowClimber`)\n- `increaseWindow`, `decreaseWindow`, `demoteFromMainProtected` — region transfer\n- `setMaximumSize` — initial window/main split, plus `WindowClimber.resized` (the\n  `SLOW_ADAPT_THRESHOLD` step-sign flip and the probe-machine reset)\n- `evictFromWindow` / `evictFromMain` — they consume the region maxima the climber sets\n\nProbe machine (>4096, in `WindowClimber`): starved samples (region hits below\nmax(4, requestCount >> MIN_SIGNAL_SHIFT)) at a blind corner launch a bold-driver walk.\nEndings: crash-abort (full undo, refractory re-armed WITHOUT doubling), reversal-through-base and\nbudget expiry (failed experiments: full undo + ladder x2), adjudication at >=4x the bar under the\ncommitted depth (confirm keeps the position + ladder resets to 1; anything else fails with a full\nundo). The verdict is asymmetric BY DESIGN: an up-probe confirms iff\n`ln((windowDensity+eps)/(walk.baseProbationDensity+eps)) > 0` — the probation-marginal baseline\nFROZEN in `armProbe` — while a down-probe uses the average-density sign test (`error*dir > 0`).\nLadder: PROBE_BACKOFF_INITIAL (16) doubling to _MAX (64). Invariants to audit:\n1 <= starvation.rung <= 64; 0 <= refractoryLeft <= starvation.rung, which both oracles assert\ndirectly — the walk budget is a separate field (`Walk.samples`, bounded by PROBE_WALK_BUDGET) on\nan object that exists only while walking, so the two can no longer alias; probe state fully reset\nby resized; an undo returns exactly to `walk.baseWindow`; the below-floor lift cannot exceed the\nfloor; `sample.probationHits <= sample.hits - sample.windowHits`;\n`walk.baseProbationDensity` is written ONLY in `armProbe` (each re-arm re-snapshots) and is\nnon-negative and finite; the probation capacity denominator is\n`max(1, maximum - windowMaximum - mainProtectedMaximum)` — capacities, never occupancy.\n\nNOT bugs (adjudicated design; read `hill-climber.md` §4 before flagging): the up/down verdict\nasymmetry (the window has no marginal substructure to price against); the frozen — hence\nstale-looking — baseline (judging against the LIVE probation rate is an absorbing false-veto: the\nwalk's own demotions enrich it — the demoflood gate row; a cold-start-transient baseline is\nbounded and self-heals because every re-arm re-snapshots); probation attribution captured\nBEFORE `reorderProbation` can promote the entry in `onAccess` (the promoting access counts as a\nprobation hit, the next as protected); a zero baseline auto-confirming any >=4x-bar earnings\n(the opportunity cost of a dead boundary is ~zero — nullchurn stays harmless); and the lowmix\nnamed trade (a gate sentinel). A walk's bases (`down`, `baseHitRate`, `baseWindow`,\n`baseProbationDensity`) are `final` on the `Walk` object, which exists only while one is in\nflight — \"dead state while not probing\" is the absent object, so there is nothing to go stale.\n\nCache-side fields: `windowMaximum`, `mainProtectedMaximum`, `windowWeightedSize`,\n`mainProtectedWeightedSize`; `QUEUE_TRANSFER_THRESHOLD`.\n\n`WindowClimber` owns `adjustment`, `sample` (`Sample`: `hits`, `misses`, `windowHits`,\n`probationHits`, `previousHitRate`), and `tier` (a `ReactiveClimber` or `DensityClimber`).\nThe `Climber` base class owns `step` (`Step`: `size`), initialized from the maximum and the\nstrategy's chosen direction at construction. `DensityClimber` owns `refractoryLeft`, `retreatLeft`,\n`undoRemaining`, and its helper objects: `walk` (`Walk`, null while none is in flight:\n`ladder`, `isAudit`, `down`, `baseWindow`, `baseHitRate`, `baseSmoothedRate`,\n`baseProbationDensity`, `samples`, `belowBarStreak`, `aboveStreak`, `beatBase`), `starvation` and\n`audit` (a `Ladder` each: `rung`, `crashStreak`), `auditClock` (`AuditClock`: `down`,\n`waitSamples`, `stillSamples`, `lastWindow`), `anchor` (`Anchor`: `window`, `rate`, `held`,\n`freshLeft`, `returning`, `returnLeft`, `shortfallStreak`), and `rates` (`Rates`: `smoothed`,\n`deviation`). `Reading` is the per-sample derived view, computed once and read-only.\n\nThe 38 constants live with the mechanism each tunes, so a knob names its owner:\n`WindowClimber` — `RESTART_THRESHOLD`;\n`DensityClimber` — `DENSITY_THRESHOLD`, `DENSITY_GAIN`, `SAMPLE_MULTIPLIER`;\n`Step` — `STEP_PERCENT`, `STEP_DECAY_RATE`, `MIN_INITIAL_STEP`;\n`ReactiveClimber` — `SLOW_ADAPT_THRESHOLD`, `SLOW_ADAPT_RATIO_CAP`, `SLOW_ADAPT_DECAY_RATE`;\n`Reading` — `STABLE_BAND_FRACTION`, `MAX_STEP_FRACTION`, `WINDOW_FLOOR_FRACTION`,\n`DENSITY_EPSILON`, `MIN_SIGNAL_SHIFT`, `MIN_STARVATION_BAR`;\n`Rates` — `VETO_MARGIN_MIN`, `RATE_SMOOTHING`, `DEVIATION_SEED`, `VETO_MARGIN_SCALE`;\n`AuditClock` — `AUDIT_WAIT_INITIAL`, `AUDIT_WAIT_FIRST`, `AUDIT_WAIT_MAX`;\n`Anchor` — `VETO_STREAK`, `VETO_RETURN_BUDGET`;\n`Walk` — `PROBE_WALK_BUDGET`, `PROBE_BAR_CAP`, `PROBE_EXIT_BAR_MULTIPLE`,\n`AUDIT_CRASH_PERSISTENCE`, `AUDIT_COMMITMENT`, `AUDIT_CONFIRM_STREAK`;\n`Ladder` — `PROBE_BACKOFF_INITIAL`, `PROBE_BACKOFF_MAX`, `PROBE_CRASH_ESCALATION`,\n`PROBE_STRIDE_SCALE_MID`, `PROBE_STRIDE_SCALE_DEEP`, `PROBE_COMMITMENT_MID`,\n`PROBE_COMMITMENT_DEEP`.\n\n## Structural invariants to attack (violations are real bugs)\n\n1. **Region partition sum**: `windowMaximum + mainMaximum` (probation + protected)\n   must equal `maximum` after every climb and every resize. Can any single transfer,\n   or a sequence capped by `QUEUE_TRANSFER_THRESHOLD`, drift the sum?\n2. **Non-negative maxima**: can `windowMaximum` or `mainProtectedMaximum` go negative\n   — a quota larger than the donor region, or repeated `decreaseWindow` at the floor?\n   EXCEPTION (adjudicated 2026-07, F1; duration priced 2026-08-22, M1): a transiently\n   negative `policyWeight` — the sanctioned telescoping race, an out-of-order UpdateTask\n   drain — can over-shift the caps beyond the commanded adjustment, even past these\n   bounds. Tolerated by design: the caps are policy targets (eviction is driven by the\n   telescoping `weightedSize`/`maximum`), and they walk back only by the weight each later\n   transfer moves, so a swing larger than a cycle's transfer suspends the split for many\n   cycles with the total still bounded. Report cap drift only with a mechanism that never\n   walks back.\n3. **Quota accounting**: in `increaseWindow`/`decreaseWindow` the `quota` is decremented\n   per transferred node by `policyWeight`. With weighted entries, can `quota` underflow,\n   skip/over-run the loop, or transfer the wrong count? Does the\n   `QUEUE_TRANSFER_THRESHOLD` cap leave the regions half-adjusted such that the next\n   `climb` mis-reads them? (Same F1 exception as #2 for the negative transient.)\n4. **`determineAdjustment` math**:\n   - `requestCount = hits + misses`; the early return guards `requestCount <\n     effectiveSampleSize`. Is the `hitRate` division ever reachable with\n     `requestCount == 0`?\n   - small-cache branch (`ReactiveClimber.samplePeriod`): `(long) (sketchSampleSize * ratio)`,\n     where `ratio = clamp(initialStep / magnitude)`. Can `initialStep` be 0 (maximum 0 or\n     tiny) making `magnitude` 0 → division by zero? Can the `(long)` cast truncate\n     `ratio` so it defeats the intended sample-period growth?\n   - `ReactiveClimber.climb` uses `Math.copySign(Step.restartMagnitude(max), amount)`. For\n     `amount == 0.0` / `-0.0`, does `copySign` choose the intended direction? Can `step.size`\n     become NaN or 0 and **permanently stall** adaptation (a stuck-window *bug*, distinct from\n     slow convergence)?\n5. **`setMaximumSize` at boundaries**: the step-sign flip at `max <= SLOW_ADAPT_THRESHOLD`\n   plus a *runtime* maximum change via `Policy.eviction.setMaximum` — when `maximum`\n   crosses `SLOW_ADAPT_THRESHOLD` in either direction, do the window/main split, the\n   `step.size` sign, and the sample state stay mutually consistent?\n6. **Stale `adjustment` and sample memory across the gates**: `climb` calls\n   `determineAdjustment` then `increaseWindow`/`decreaseWindow` off the climber's `adjustment`.\n   The tier is skipped on three paths: an uninitialized sketch (`resetSample`), a sub-period\n   sample, and a cache below half occupancy (`discardSample`, which resets a full sample). Can a\n   stale `adjustment` from a prior cycle be re-applied? The half-full gate is reachable mid-life\n   while the tier's walk, anchor and rates persist, so also check what each path does to the\n   cross-sample `previousHitRate` that the reactive step, the stand-down trigger\n   (`isWorkloadShift`) and the walk's bold driver (`nextStride`) compare against.\n7. **Layer ownership of the ladders, streaks, and schedules** — the highest-yield row, because\n   it has produced two real bugs and both were invisible from a single code path.\n   `hill-climber.md` §4 carries a **write-owner table** (observation / active walk / starvation\n   retry / audit retry+schedule / goal guard / motion out). Enumerate **every** write to\n   `starvation.rung`, `starvation.crashStreak`, `audit.rung`, `audit.crashStreak`,\n   `auditClock.waitSamples`, `auditClock.stillSamples`, `anchor.held`, `anchor.freshLeft` and\n   check each against its owner —\n   *including endings that are not crashes*. Both landed defects were exactly this shape: the\n   shared crash streak let exogenous pulses pair separate audit crashes into a rung ratchet\n   (H4-C1), and later a non-crash ending (budget expiry, reversal-through-base) still cleared\n   the **other** layer's streak, which disarmed that layer's escalation and its\n   `AUDIT_CRASH_PERSISTENCE` tolerance — so an interleaved blind corner reached around the first\n   fix. One cross-write is sanctioned, journaled: an audit confirm rewards the starvation\n   ladder (`starvation.reward`) and zeroes its refractory. An audit's undo leaves the\n   refractory alone (since 2026-08-16, pinned by\n   `undoProbe_auditRetreat_leavesTheStarvationRefractoryAlone`). Anything else is a finding.\n   Checkable products the oracles already\n   assert, and which a new invariant should join: `anchor.freshLeft > 0 ⇒ anchor.held`,\n   `anchor.held ⇒ anchor.isPlanted`, `walk != null ⇒ undoRemaining == 0`, and\n   `auditClock.waitSamples > PROBE_BACKOFF_MAX ⇒ audit.rung == PROBE_BACKOFF_MAX` (the ratchet as\n   an invariant). Note the one *legitimate* coupling so it is not reported: the audit clock is a\n   function of window position, so any layer that moves the window decays `stillSamples` — that\n   is the intended semantics, and it is the remaining path by which frequent blind corners defer\n   audits.\n\n## Output\n\nFor each defect: give concrete maximum/weight/access values, trace the arithmetic\nstep by step, show the resulting invariant violation or wrong region size, and a\nVerification (a `BoundedLocalCacheTest` white-box method plus the required `-P` flags).\n\nEverything here runs under `evictionLock` (single-writer), so most findings will be\narithmetic / state-corruption, not races — but explicitly check whether any\nclimber-written field (`adjustment`, `step.size`, the region maxima) is also read\noff-lock by a concurrent reader before concluding \"single-writer, cannot race.\"\n","frontmatter":{"name":"audit-adaptivity","description":"Audit the adaptive window hill-climber and region-resize logic for implementation defects (not algorithm quality)","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":3256,"sizeBytes":12737},{"name":"SKILL.md","path":".claude/skills/audit-adversarial-input/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-adversarial-input/SKILL.md","title":"audit-adversarial-input","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-adversarial-input\ndescription: Analyze behavior under adversarial or extreme API inputs\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects triggered by adversarial or extreme API inputs.\n\nFor each category, construct concrete inputs and trace the code path:\n\n1. **Weight extremes**: Integer.MAX_VALUE for every entry (overflow?),\n   MAX_VALUE→1 delta (overflow?), 0 for all (unbounded growth?),\n   inconsistent weigher (divergence?).\n\n2. **Expiry extremes**: Long.MAX_VALUE nanos (timer wheel overflow?),\n   0 or negative (infinite loops?), MAX→0 transitions, alternating durations.\n\n3. **Maximum size extremes**: Long.MAX_VALUE (arithmetic overflow?),\n   maximumSize(0) (graceful degeneration?), maximumSize(1) (temporary oversize?).\n\n4. **Key/value adversarial behavior**: constant hashCode(0) (sketch degeneration?),\n   slow equals() (lock hold explosion?), mutating hashCode (silent corruption?),\n   huge values (allocation failure handling?).\n\n5. **Concurrency extremes**: 10K threads on same computeIfAbsent, puts exceeding\n   maintenance throughput (backpressure?), refresh storms from short refreshAfterWrite.\n\n6. **Frequency sketch saturation**: all accesses to same key, all unique keys\n   (reset cost?), counter overflow beyond 4-bit limit.\n\n7. **Time extremes**: nanoTime near Long.MAX_VALUE (wrap-around?), non-monotonic\n   ticker, large time jumps (timer wheel handling?).\n\nFor each issue: state input values, trace computation, state whether it causes\nincorrect behavior / OOM / infinite loop / degraded performance / graceful handling.\n\nDo not report issues requiring API contract violations (e.g., null keys)\nunless the violation is undetected and causes silent corruption.\n","frontmatter":{"name":"audit-adversarial-input","description":"Analyze behavior under adversarial or extreme API inputs","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":388,"sizeBytes":1755},{"name":"SKILL.md","path":".claude/skills/audit-adversarial/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-adversarial/SKILL.md","title":"audit-adversarial","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-adversarial\ndescription: Hostile full-codebase review by parallel adversarial agents with no design context — finds bugs that domain familiarity masks\nargument-hint: \"[subsystem or file to focus on, default: all source files]\"\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent\n---\n\nRun a hostile adversarial review of the Caffeine source code. Unlike the other\naudit skills which use the auditor agent (with design context), this skill\ndeliberately gives reviewers NO project context — they review with fresh eyes\nand a hostile mindset.\n\n## Target\n\n$ARGUMENTS\n\nIf no argument, review all source files in `caffeine/src/main/java/`,\n`guava/src/main/java/`, `jcache/src/main/java/`, `simulator/src/main/java/`,\nand `examples/*/src/main/java/`. The adapters hold the same quality bar as the\ncore. The examples are sketches: report one failing at what it shows, not\nhardening it leaves to the user (`ruled-out.md` §examples).\n\n## Step 1: Inventory source files\n\nList all Java source files in scope. Group into 6-8 subsystems for parallel\nreview — core subsystems plus one group per non-core module (examples reviewed\nagainst the contracts of the third-party libraries they compose).\n\n## Step 2: Launch parallel hostile reviewers\n\nSpawn 4-6 subagents simultaneously. Each reviews one subsystem. Critically:\n**DO NOT give them design-decisions.md, synchronization.md, or any .claude/docs.**\nThey should review from first principles only.\n\nEach agent gets this prompt (adapted to their subsystem):\n\n```\nYou are a senior Java concurrency expert performing a hostile code review.\nA competitor built this library and it's gaining adoption over your work.\nYou want to find every flaw to demonstrate it's not production-worthy.\n\nYour reputation is on the line. Be ruthless but precise — cite methods,\ntrace code paths, construct failing scenarios.\n\nRules:\n- Dig deep. Zero findings are allowed ONLY with a coverage proof listing\n  files inspected, methods traced, interleavings attempted, and attack\n  surfaces checked. If coverage is shallow, keep looking.\n- Every finding must include: exact location, concrete evidence, a\n  falsifiable scenario, and confidence (high/medium).\n- Only report issues provable with code evidence\n- Construct concrete interleavings, inputs, or scenarios\n- Do not critique style — focus on correctness and robustness\n- Do not accept \"by design\" — if the design has consequences, document them\n- Read the actual source code before making claims\n- Look for what's MISSING, not just what's wrong\n\nAttack surfaces:\n1. Memory model violations — insufficient access modes, missing happens-before\n2. State corruption interleavings — weight divergence, deque corruption, stuck drain status\n3. Resource leaks under failure — OOME/SOE leaving unrecoverable state\n4. Silent data loss — values dropped without notification\n5. Specification violations — ConcurrentMap contract, Javadoc promises\n6. Denial of service — O(n) operations on O(1) paths\n7. Sentinel value collisions — can valid input equal an internal sentinel?\n8. Validation gaps — inputs accepted at parse time but rejected later\n9. API surprises — public methods returning nonsensical values\n10. Notification asymmetries — some paths notify, equivalent paths don't\n11. Third-party API contract misuse — error/dispose paths, duplicate keys,\n    empty batches, cancellation semantics assumed rather than verified\n\nRate each finding: critical/high/medium/low\nFormat: numbered list with file:method, description, evidence\n```\n\n## Step 3: Validate completeness\n\nIf any agent returns zero findings, require a coverage summary from that\nagent (scope inspected, attack surfaces checked, interleavings attempted).\nRe-launch with a more specific prompt only if coverage is shallow. Zero\nfindings with thorough coverage proof is acceptable.\n\n## Step 3.5: Evaluator challenge (per reviewer)\n\nFor each reviewer that returned findings OR a zero-findings coverage proof,\nspawn a separate evaluator subagent. The evaluator gets ONLY the reviewer's\nreport — no source code, no design docs.\n\n```\nYou are a hostile evaluator reviewing another auditor's report of a Java\ncache library. Your job is to find what the auditor MISSED.\n\n1. For each confirmed invariant, construct a 2-thread interleaving that\n   would violate it. If you cannot, explain what prevents it.\n2. For each zero-finding claim, identify the most likely bug category\n   the auditor could have missed given their stated coverage.\n3. For each finding, check whether the evidence is concrete or hand-wavy.\n   Flag findings that assert a bug without a specific interleaving.\n\nOutput: prioritized list of challenges for the reviewer to address.\n```\n\nHave the original reviewer address each challenge by re-reading source code.\nDrop findings the reviewer cannot defend. Add new findings from challenges\nthe reviewer confirms.\n\n## Step 4: Consolidate and deduplicate\n\nCollect findings from all agents. Deduplicate (same issue found by multiple\nagents = higher confidence). Remove findings that are clearly wrong (misreading\nthe code). Keep findings even if they might be \"by design\" — the point is to\nsurface things domain familiarity masks.\n\n**Confidence decay check**: If any reviewer's findings are >60% medium-confidence,\nnote this in the report — that reviewer's area may need a more targeted follow-up\naudit rather than more speculative findings.\n\n**Escalation**: If any reviewer flagged issues they could not resolve statically\n(e.g., \"depends on JDK internal behavior\"), mark these as ESCALATED for dynamic\ntesting (Fray, LinCheck, JCStress) rather than guessing.\n\n## Step 5: Adjudicate against design docs\n\nNOW read `.claude/docs/design-decisions.md`, `.claude/rules/design-decisions.md`,\nthe relevant module rules, and `.claude/docs/ruled-out.md`'s standing principles\nand module section. For JCache, consult the relevant topic in\n`.claude/docs/jsr107-conformance.md` and verify surviving conformance claims\nagainst its JSR-107 1.1.1 specification and API sources. State any normative\nsource that was not consulted. For each finding, check whether it is an\nintentional trade-off and reclassify it:\n- **confirmed** — supported evidence violates an applicable contract or invariant;\n  absence of a design explanation alone is insufficient\n- **intentional** — documented design decision, not a defect\n- **ambiguous** — needs more evidence or maintainer input\n\nKeep intentional findings in the report (labeled as such) but do not count\nthem as bugs. The value is surfacing them for review, not asserting they're wrong.\n\n## Step 6: Triage confirmed findings\n\nClassify using `.claude/docs/finding-taxonomy.md` for severity and categories.\nAdditionally tag each confirmed finding:\n- **bug** — incorrect behavior, provably wrong\n- **api-issue** — public API returns surprising/incorrect values\n- **validation-gap** — input accepted when it shouldn't be\n- **robustness** — works but fragile, could break with minor changes\n- **cosmetic** — dead code, wasteful patterns, poor diagnostics\n\n## Step 7: Report\n\nWrite the full report to `.local/audits/<model>/audit-adversarial.md`\n(see `.claude/docs/audit-output.md`).\n\nFormat:\n```\n# Adversarial Review: Caffeine Source Code\n\n[N] parallel auditors reviewed [M] source files (~K lines).\nFindings consolidated, deduplicated, and triaged by severity.\n\n## Likely Bugs\n...\n\n## API/Behavioral Issues\n...\n\n## Robustness/Validation Gaps\n...\n\n## Design/Maintenance Concerns\n...\n\n## Summary\n[N] likely bugs, [M] API issues, [K] validation gaps, [J] concerns.\n[N] evaluator challenges received across [M] reviewers.\n```\n","frontmatter":{"name":"audit-adversarial","description":"Hostile full-codebase review by parallel adversarial agents with no design context — finds bugs that domain familiarity masks","argument-hint":"[subsystem or file to focus on, default: all source files]","context":"fork","disable-model-invocation":true,"allowed-tools":"Read, Grep, Glob, Bash, Agent","allowedTools":["Read,","Grep,","Glob,","Bash,","Agent"],"disableModelInvocation":true},"allowedTools":["Read,","Grep,","Glob,","Bash,","Agent"],"isInternal":false,"tokens":1686,"sizeBytes":7679},{"name":"SKILL.md","path":".claude/skills/audit-arithmetic/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-arithmetic/SKILL.md","title":"audit-arithmetic","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-arithmetic\ndescription: Audit for arithmetic and boundary bugs (overflow, off-by-one, drift)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume there is at least one arithmetic or boundary bug in this code.\n\nAudit for:\n- Off-by-one errors\n- Incorrect inequality direction (< vs <=, > vs >=)\n- Overflow / underflow (int, long, specifically nanoTime arithmetic)\n- Implicit narrowing or widening conversion\n- Incorrect rounding or truncation\n- Sign errors\n- Sentinel value collisions (can a valid value equal a sentinel?)\n- Counter drift (can a counter diverge from the quantity it tracks\n  over a long-running cache?)\n- Timer wheel bucket arithmetic (modular arithmetic, wrap-around)\n- Frequency sketch counter saturation and reset arithmetic\n- Hill climber / adaptive sizing: window vs main partition adjustment; the density and\n  probe-verdict log-ratios (`ln((x+ε)/(y+ε))`), the probation-capacity denominator\n  (`max(1, maximum − windowMaximum − mainProtectedMaximum)`), the saturated `4·maximum`\n  sample period, and the stride/commitment rung tables\n  (percentage calculations, rounding, overshoot, oscillation)\n- FrequencySketch table size calculation (ensureCapacity rounding to\n  power of two, interaction with maximumSize)\n- Weight delta computation in UpdateTask (sign conventions, can\n  intermediate sums overflow when weights are near Integer.MAX_VALUE?)\n\nFor each suspected issue:\n- Provide a concrete input (specific key, value, weight, time values)\n- Show step-by-step evaluation through the code\n- Show expected vs actual behavior\n- If it requires billions of operations, state the count needed\n\nIgnore style and performance.\nOnly report high-confidence defects supported by evaluation traces.\n","frontmatter":{"name":"audit-arithmetic","description":"Audit for arithmetic and boundary bugs (overflow, off-by-one, drift)","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":374,"sizeBytes":1753},{"name":"SKILL.md","path":".claude/skills/audit-build-ci/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-build-ci/SKILL.md","title":"audit-build-ci","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-build-ci\ndescription: Audit build and CI configuration for correctness risks\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the build and CI configuration for subtle correctness risks.\n\nRead the build files and CI workflows before analyzing:\n- `build.gradle.kts` (root and caffeine module)\n- `gradle/plugins/` (custom Gradle plugins)\n- `.github/workflows/` (GitHub Actions)\n- `gradle.properties`\n\nConsider:\n- Misconfigured dependency scopes\n- Incorrect test isolation\n- Non-reproducible builds\n- Incorrect Gradle cache configuration\n- Missing failure modes (tests passing when they shouldn't)\n- Incorrect CI matrix coverage\n- Silent test skipping\n- Multi-line YAML values that get interpolated elsewhere (a `>` folded scalar\n  keeps a trailing newline; splicing one into another folded scalar embeds that\n  newline mid-string, so a consumer splitting on literal spaces mis-parses the\n  spliced-in value's last token)\n- Performance problems in the build\n- Security issues (dependency vulnerabilities, secret exposure)\n- Bad practices that could cause false confidence\n- Retry and re-run paths (in-job retry loops, `workflow_run` re-runners) and what each treats\n  as infrastructure. A job that exceeds `timeout-minutes` concludes `cancelled`, not `failure`,\n  and a hung test reaches CI that way\n- Matrix legs that name a JDK distribution: without a vendor constraint, toolchain resolution\n  may pick another detected JDK of the same version\n\nReport only issues that could cause incorrect artifacts, missing\nfailures, or false confidence in test results.\n\nPrice a CI finding against live history, not only the YAML: `gh api` for the ruleset and\ncheck-run conclusions, `gh run view <id> --log` (with `--attempt`/`--job`) for what a green run\nactually hid. A mechanism in a workflow and a run that concealed a failure are separate claims.\nRead-only queries only.\n","frontmatter":{"name":"audit-build-ci","description":"Audit build and CI configuration for correctness risks","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":418,"sizeBytes":1900},{"name":"SKILL.md","path":".claude/skills/audit-contract-drift/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-contract-drift/SKILL.md","title":"audit-contract-drift","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-contract-drift\ndescription: Find places where documented API contracts and the implementation diverge\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nMost audits read code; this one reads documentation first and then traces each\npromise to every implementation path that should honor it. The bugs caught here\nare not concurrency or arithmetic defects — they are quiet contradictions\nbetween what the javadoc promises and what the code does.\n\nBuild a list of behavioral promises from public API docs, then trace each one\nto every code path that should honor it.\n\nSources of contracts to enumerate:\n\n- `Caffeine.java` — every `<b>Note:</b>` and `<b>Warning:</b>` block in a\n  builder method's javadoc. Pay particular attention to:\n  - `weakKeys`, `weakValues`, `softValues` — equality semantics flip to\n    identity (`==`) for the configured strength\n  - `expireAfter*`, `refreshAfterWrite` — duration constraints, what\n    \"expired\" means at boundaries\n  - `maximumSize`, `maximumWeight` — eviction triggering and amortization\n  - `removalListener`, `evictionListener` — when and how notifications fire\n- `Cache.java`, `LoadingCache.java`, `AsyncCache.java`, `AsyncLoadingCache.java`\n  — javadoc of every method, especially \"must\", \"will\", \"guarantees\",\n  \"for any reason\" language.\n- `Policy.java` — every method's documented behavior.\n- `Weigher.java`, `Expiry.java`, `RemovalListener.java`, `RemovalCause.java`\n  — user-facing contracts referenced by the cache.\n- **Internal obligations** — \"callers must\" contracts stated in\n  `.claude/rules/*.md` and in internal-class javadoc across all modules (e.g.\n  jcache's EventDispatcher requires every publishing thread to drain via\n  awaitSynchronous/ignoreSynchronous; async operations must register with the\n  in-flight set). Enumerate each obligation, then verify every call site honors\n  it — including executor-thread and refresh paths that don't flow through the\n  obvious entry points.\n\nFor each contract, record the exact wording, the configurations that activate\nit, and the set of operations affected.\n\nThen trace each promise through every code path that should honor it:\n\n- Direct API calls on `Cache` / `LoadingCache` / `AsyncCache`\n- `asMap()` view methods (`size`, `isEmpty`, `containsKey`, `containsValue`,\n  `get`, `put`, `remove(k)`, `remove(k,v)`, `replace`, `compute*`, `merge`,\n  `equals`, `hashCode`)\n- `asMap().keySet()` / `values()` / `entrySet()` — `contains`, `remove`,\n  `removeAll`, `retainAll`, `removeIf`, `iterator`, `spliterator`\n- Bulk operations (`putAll`, `getAll`, `getAllPresent`, `invalidateAll`)\n- `AsyncCache.synchronous()` round-trip — does the sync view honor the same\n  contract as the async cache?\n- Serialization round-trip — does the deserialized cache honor the same\n  promises about expiration durations, loader presence, etc.?\n\nA path that uses a different equivalence, ordering, or visibility from what\nthe contract promises is a **contract drift** finding. So is a path that\nsilently downgrades a configuration on round-trip.\n\nCommon drift patterns to check explicitly:\n\n- **Identity vs. equals on weak/soft caches**: `weakKeys`/`weakValues`/\n  `softValues` promise identity, but view collections that use\n  `o.equals(value)` or `Collection.contains(value)` may apply the user's\n  equality semantics instead.\n- **Cardinality vs. presence asymmetry**: methods documented as treating\n  in-flight async values as absent must align with `size`, `isEmpty`,\n  `equals`, `hashCode`, and iterators on the same view.\n- **Notification \"for any reason\"**: `removalListener` documented to fire\n  for any cause, but async paths may drop notifications for null or\n  exceptional completions.\n- **Cross-version serialization**: serialized fields renamed or defaulted\n  differently across versions can silently lose configuration or throw\n  on round-trip.\n- **Same-instance return semantics**: e.g., `compute(k, (k,v) -> v)` is\n  documented one way but updates timestamps/weight regardless.\n- **`size()` documented as estimate**: this is an explicit out — verify it\n  is actually documented as an estimate everywhere it diverges from logical\n  presence.\n- **Synchronous vs. asynchronous view divergence**: the `synchronous()`\n  view's `asMap()` may treat in-flight entries inconsistently across query,\n  mutation, and cardinality methods.\n\nEach finding should anchor both sides of the drift — the source of the\ncontract (file + javadoc snippet) and the divergent implementation (file +\nmethod) — and include a minimal user-observable scenario where the docs and\nthe code disagree.\n","frontmatter":{"name":"audit-contract-drift","description":"Find places where documented API contracts and the implementation diverge","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":1067,"sizeBytes":4629},{"name":"SKILL.md","path":".claude/skills/audit-correctness-proof/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-correctness-proof/SKILL.md","title":"audit-correctness-proof","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-correctness-proof\ndescription: Attempt formal correctness proofs for all public cache methods\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAttempt to PROVE the correctness of the cache, not to find bugs.\n\nFor each public method (get, put, remove, compute, computeIfAbsent, merge,\nreplace, size, clear):\n\n1. State the method's specification: preconditions, postconditions,\n   concurrent behavior promises.\n2. Identify the synchronization protocol ensuring the postcondition.\n   For an expiring entry the clock is part of that state: place each\n   ticker read that dates the entry or judges its expiry relative to the\n   linearization point. A read taken before a step that can block (a\n   hash-bin lock, a node monitor, a user callback) dates or judges\n   against a stale clock, so check the paths that create an entry as\n   well as the ones that test it.\n3. Write a proof sketch:\n   a. Assume the precondition holds\n   b. Identify the critical section(s)\n   c. Show the postcondition is established within the critical section\n   d. Show no concurrent operation can invalidate it before the caller observes\n\n4. If you CANNOT complete the proof at any step, stop and report:\n   - Which step fails\n   - What additional assumption would be needed\n   - Whether the code guarantees that assumption\n\nGaps in the proof are more valuable than speculative bug reports — a gap\ntells us exactly where to look.\n\nDo not provide praise or style commentary.\n","frontmatter":{"name":"audit-correctness-proof","description":"Attempt formal correctness proofs for all public cache methods","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":324,"sizeBytes":1481},{"name":"SKILL.md","path":".claude/skills/audit-coverage-gaps/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-coverage-gaps/SKILL.md","title":"audit-coverage-gaps","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-coverage-gaps\ndescription: Discover test coverage gaps that could hide correctness defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume the existing tests miss at least one real defect.\n\n1. For each public method, identify the hardest-to-test edge cases:\n   - Null values (where permitted)\n   - Maximum/minimum weight\n   - Zero-duration expiration\n   - Mapping functions that return the same instance\n   - Mapping functions that throw\n   - Weighers that throw\n   - Expiry callbacks that throw\n   - CompletableFuture values (async cache edge cases)\n   - Keys/values with adversarial hashCode/equals\n\n2. For each edge case, trace the code path. Does the code handle it correctly?\n\n3. Identify combinatorially hard behavioral dimensions:\n   - Operation A on expired entry during concurrent operation B\n   - Exception in user callback X while holding lock Y\n   - GC collecting reference R between code points P and Q\n   - Fast path falls through to slow path under contention (e.g.,\n     entry appears expired on fast path, recovers under lock on slow path)\n   - Async cache: future completes between check and action (e.g.,\n     isComputingAsync returns true, but future completes before\n     the code that depends on that check executes)\n\n4. For each candidate gap, provide a minimal test case with the specific\n   cache configuration and thread interleaving needed to reach the code path.\n\nPriority ordering:\n- Paths involving the catch-commit-rethrow pattern (doComputeIfAbsent, remap)\n- Slow paths reachable only via contention (synchronized blocks after optimistic checks)\n- Interactions between expiration and the async value lifecycle (ASYNC_EXPIRY, isComputingAsync)\n\nFocus only on behavioral coverage gaps that could hide correctness bugs.\n","frontmatter":{"name":"audit-coverage-gaps","description":"Discover test coverage gaps that could hide correctness defects","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":373,"sizeBytes":1789},{"name":"SKILL.md","path":".claude/skills/audit-exception-safety/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-exception-safety/SKILL.md","title":"audit-exception-safety","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-exception-safety\ndescription: Audit exception safety and failure atomicity across all throw sites\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the cache for exception safety defects. For every code path where\nexceptions can be thrown, determine whether the cache is left consistent.\n\nAssume at least one exception safety bug exists. If your analysis yields\nzero findings, re-examine catch-commit-rethrow paths — explain specifically\nwhy no exception scenario leaves inconsistent state.\n\n**Priority #1: catch-commit-rethrow in doComputeIfAbsent and remap.** This is\nthe most commonly misunderstood pattern and historically the most fragile.\nTrace the EXACT sequence of committed mutations, notification delivery, and\nexception propagation for every exception type.\n\nUser-provided code that can throw:\n1. CacheLoader.load / loadAll / reload\n2. Weigher.weigh\n3. Expiry.expireAfterCreate / expireAfterUpdate / expireAfterRead\n4. Mapping functions passed to compute, computeIfAbsent, merge\n5. RemovalListener.onRemoval / EvictionListener\n\nRuntime exceptions:\n6. OutOfMemoryError during node/reference allocation\n7. StackOverflowError from deep re-entrancy\n8. RejectedExecutionException from executor\n\nIn the jcache adapter, also trace: CacheWriter.write/writeAll/delete/deleteAll\n(the spec requires partial-failure bookkeeping), EntryProcessor.process,\nExpiryPolicy methods, and Copier/serialization failures in store-by-value mode.\n\nFor each throw site:\n\n1. List every mutation already committed before the throw point.\n2. Determine whether the catch block rolls back or commits.\n3. Check for:\n   - **Phantom entries**: Node in CHM but invisible to eviction/expiration\n   - **Orphaned references**: WeakReference created but node rolled back\n   - **Counter drift**: weightedSize out of sync with actual entries\n   - **Lost notifications**: notifyEviction without notifyRemoval, or vice versa\n   - **Leaked futures**: CompletableFuture never completed\n   - **Stuck refresh**: refresh flag set but never cleared\n\n4. For catch-commit-rethrow (doComputeIfAbsent, remap), verify:\n   - Catches Throwable, not just RuntimeException\n   - Committed state is fully consistent\n   - Original exception is preserved\n\n5. For OutOfMemoryError specifically:\n   - Can AddTask/UpdateTask OOME orphan a CHM entry?\n   - Can WeakKeyReference/WeakValueReference OOME leave half-constructed node?\n\nFor each defect: state the throw site, mutations committed, inconsistent\nstate, and a concrete triggering scenario.\n","frontmatter":{"name":"audit-exception-safety","description":"Audit exception safety and failure atomicity across all throw sites","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":546,"sizeBytes":2531},{"name":"SKILL.md","path":".claude/skills/audit-feature-interaction/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-feature-interaction/SKILL.md","title":"audit-feature-interaction","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-feature-interaction\ndescription: Analyze feature interaction pairs and triples for concurrent defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects arising from multiple features operating\nsimultaneously on the same entry.\n\nAssume at least one feature interaction bug exists. If your analysis yields\nzero findings, re-examine the top-priority pairs below — explain specifically\nwhy no interleaving produces a bug.\n\nPriority ranking (from confirmed historical bugs):\n1. **Refresh + expiration** (D+B) — most-bugged interaction historically\n2. **Reference collection + any feature** (C+*) — value reference visibility\n3. **Async completion + any feature** (F+*) — future lifecycle edge cases\n4. **Eviction + weight change** (A+H) — counter drift during transitions\n\nFeatures:\nA. Eviction (size/weight limit exceeded)\nB. Expiration (afterAccess, afterWrite, variable)\nC. Reference collection (weak key, weak value, soft value GC)\nD. Refresh (automatic reload)\nE. Loading (CacheLoader / computeIfAbsent)\nF. Async completion (CompletableFuture values)\nG. Listener notification (removal listener, eviction listener)\nH. Weight change (Weigher returning different weight for new value)\n\nFor each pair (A,B), (A,C), ..., (G,H) — 28 pairs total:\n\n1. Can both features trigger simultaneously on the same entry?\n2. If yes, construct the most adversarial interleaving.\n3. Trace step-by-step: correct processing? notifications? final state? cleanup?\n\nAfter all pairs, identify highest-risk TRIPLE interactions:\n- Eviction + expiration + listener exception\n- Refresh + async completion + GC collection\n- Weight change + eviction + compute\n\nHigh-risk pairwise combinations:\n- Eviction during refresh (entry evicted while refreshing)\n- Expiration during compute (entry expires mid-computation)\n- GC during async completion (future completes after weak ref collected)\n- Weight change during eviction\n- Listener exception during any other feature\n\nFor each defect: state the features involved, provide the interleaving,\nstate the incorrect behavior.\n","frontmatter":{"name":"audit-feature-interaction","description":"Analyze feature interaction pairs and triples for concurrent defects","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":450,"sizeBytes":2108},{"name":"SKILL.md","path":".claude/skills/audit-iteration/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-iteration/SKILL.md","title":"audit-iteration","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-iteration\ndescription: Analyze concurrent iteration and view consistency guarantees\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the concurrent iteration and view behavior of the cache.\n\nAssume at least one view operation can observe inconsistent state under\nconcurrent modification. If your analysis yields zero findings, re-examine\nexpired-but-present entries and dead/retired node visibility — explain\nspecifically why no user-observable inconsistency is possible.\n\nView operations to analyze:\n- asMap().entrySet/keySet/values() iteration\n- asMap().forEach()\n- asMap().size()\n- asMap().containsValue()\n- Snapshot operations (policy().eviction().hottest/coldest)\n\nFor each:\n1. What consistency guarantee? (Snapshot? Weakly consistent? Sequentially consistent?)\n2. Can iteration observe:\n   - A retired or dead node?\n   - An entry whose key/value has been garbage collected?\n   - An expired but not-yet-cleaned-up entry?\n   - A node with inconsistent key/value (key from one version, value from another)?\n3. Can concurrent put/remove/compute cause the iterator to:\n   - Skip an entry that existed for the entire iteration?\n   - Return the same entry twice?\n   - Throw ConcurrentModificationException?\n4. Does wrapping ConcurrentHashMap iterators introduce issues CHM wouldn't have?\n\nFor each issue: construct a concrete interleaving and state whether it violates\nthe documented contract or is expected weakly-consistent behavior.\n","frontmatter":{"name":"audit-iteration","description":"Analyze concurrent iteration and view consistency guarantees","context":"fork","agent":"auditor","disable-model-invocation":true,"disableModelInvocation":true},"isInternal":false,"tokens":309,"sizeBytes":1477},{"name":"SKILL.md","path":".claude/skills/audit-jcache-conformance/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jcache-conformance/SKILL.md","title":"audit-jcache-conformance","category":"anthropic-skill","format":"markdown","content":"---\nname: audit-jcache-conformance\ndescription: JSR-107 (JCache) spec-conformance audit\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent, Write\n---\n\n# Audit: JSR-107 Conformance\n\nThis audit verifies the `jcache/` adapter against the **full JSR-107 1.1.1\nspecification** — every normative domain, not just the corners the last bug\ntouched. It walks the spec surface and allocates depth by where the TCK is blind.\n\n**Why the TCK is the floor, not the verification.** The TCK frequently asserts\nonly the observable **end-state** (`containsKey`/`get`), not the **event stream**\n(`CREATED`/`UPDATED`/`EXPIRED`/`REMOVED`) or the **statistics** (`CachePuts`,\nhits/misses, removals, evictions). Two implementations with different events and\ndifferent counts both pass. Every real bug found in this adapter recently lived in\nexactly that TCK-blind gap (zero-creation-expiry phantom `CREATED`;\nzero-update-expiry `put`-family suppressing `UPDATED`). So the audit goes **DEEP**\n(full spec→RI→ecosystem→internal-parity differential) on the event/statistic/\nexpiry/write-through surface, and runs a **COVERAGE** pass (spec-text correctness +\nconfirm a test pins it) over the rest of the spec — escalating any COVERAGE clause\nthat turns out to hide a TCK-invisible event or statistic to the DEEP differential.\n\nThis is a focused, resource-heavy specialization of `/audit-sibling-divergence`\nGroup G2. Read **`.claude/docs/jsr107-conformance.md` first** — it is the resource\nmap (live-fetch recipes, RI/ecosystem class locations for every domain below), the\ndifferential methodology, the parity-test pattern, and the catalogue of\nalready-resolved divergences (do not re-flag those).\n\nFor this skill, the reference and its standing rulings are read before analysis, overriding the\nauditor's Phase 1.5 reading order for that document. Verify applicable rulings against current\ncontracts and source before using them to adjudicate a finding.\n\n## When to run\n\n- After any change to `jcache/src/main` touching `CacheProxy`, `LoadingCacheProxy`,\n  `EntryProcessorEntry`/`postProcess`, `EventDispatcher`, expiry, statistics,\n  the write-through (`CacheWriter`) path, or store-by-value copying.\n- Before a release, as a comprehensive 1.1.1 re-verification.\n- Once per quarter as a conformance baseline.\n- When a `/audit-sibling-divergence` run raises a Group G2 finding — use this to\n  resolve the *direction* (the static audit cannot, and has guessed wrong before).\n- Not for adapter concurrency: this audit is a single-threaded spec differential.\n  Concurrency windows (live-view vs snapshot races, obligation pairing on\n  executor threads, close/destroy symmetry) belong to `/audit-subsystem-safety`,\n  `/audit-memory-retention`, `/audit-lifecycle`, and `/audit-contract-drift`'s\n  obligation sweep.\n\nHeavyweight (fetches the spec, clones/fetches the ecosystem, may spawn\nsub-auditors). Not for routine pre-commit review.\n\n## Step 0: Load the spec and the resource map\n\nRead `.claude/docs/jsr107-conformance.md`. Fetch the live spec:\n\n```bash\nDOC=1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA\ncurl -fsSL \"https://docs.google.com/document/d/$DOC/export?format=txt\" -o /tmp/jsr107_spec.txt\n```\n\nConfirm it fetched the real spec (grep for `getExpiryForUpdate`), not an auth page.\nThe export reflows; reference the spec by **section name** (the 1.1.1 section\nheadings are listed per-domain in the matrix below). Locate the TCK sources\n(`find ~/.gradle/caches -name 'cache-tests-1.1.1-test-sources.jar'` and\n`jcache/build/tck/`).\n\n## Step 1: Build the spec-surface matrix\n\nWalk the **whole** 1.1.1 spec. Map each normative domain to its spec section, its\nadapter code, and the **depth** it warrants. Do not stop at the write-path/expiry\nfamily — that is one DEEP domain among several, and the recent bugs there created a\nrecency bias this matrix exists to correct.\n\n**Depth = DEEP** — the TCK does not pin the event stream / statistic / expiry\ntiming, so it can mask a real divergence. Run the full differential (Step 2) and\nadd a parity-matrix test.\n**Depth = COVERAGE** — the spec text is unambiguous and the TCK's end-state\nassertion is sufficient. Confirm (a) the adapter matches the spec text and (b) a\ntest pins it; cite the test. Escalate to DEEP the moment a hidden event/stat\nappears.\n\n| # | Domain | 1.1.1 section | Depth | Verify |\n|---|--------|---------------|-------|--------|\n| A | Write ops × expiry | *Expiry Policies*; *Statistics Effects* | **DEEP** | `put`/`putAll`/`putIfAbsent`/`getAndPut`/`replace(K,V)`/`replace(K,V,V)`/`getAndReplace` — creation-vs-update `ZERO`/`ETERNAL`/`null` expiry; `CREATED`/`UPDATED` emission; `CachePuts` count. **Internal parity across all siblings.** |\n| B | Read & access | *Expiry Policies*; *Integration*; *Statistics Effects* | **DEEP** | `get`/`getAll`/`containsKey`/`iterator` — `getExpiryForAccess` `ZERO`/`null`/finite; `CacheHits`/`CacheMisses` (containsKey must not count); read-through load as `get`-miss-not-put |\n| C | Remove ops | *Cache Entry Listeners*; *Integration*; *Statistics Effects* | **DEEP** | `remove(K)`/`remove(K,V)`/`getAndRemove`/`removeAll(keys)`/`removeAll()`/`clear()` — `REMOVED` event + `oldValue`; **`removeAll()` counts removals, `clear()` does not**; removal-stat gating on an already-expired entry; `CacheWriter.delete` |\n| D | Entry processors | *Entry Processors*; *Statistics Effects* | **DEEP** | `invoke`/`invokeAll` — `EntryProcessorEntry.Action` machine (NONE→READ/CREATED/UPDATED/LOADED/DELETED) vs RI `MutableEntryOperation`; per-op events + stats; read-through `getValue()` ending in `LOADED` counts a miss, not a put (catalogued — confirm, don't re-flag) |\n| E | Events | *Cache Entry Listeners* | **DEEP** | `CREATED`/`UPDATED`/`REMOVED`/`EXPIRED` payload (`isOldValueAvailable`/`getOldValue`); synchronous vs asynchronous dispatch; `CacheEntryEventFilter`; per-key ordering (`EventDispatcher` CompletableFuture chains); runtime register/deregister |\n| F | Statistics | *Statistics Effects of Cache Operations* | **DEEP** | The **full** `CacheStatisticsMXBean` matrix: `CacheHits`/`Misses`/`Gets`/`Puts`/`Removals`/`Evictions` × every op. Failed `putIfAbsent`/`replace` accounting; **`CacheEvictions` (the Caffeine-native-eviction→JCache-stat bridge — no sibling resolves this identically)**; `CacheStatisticsMXBean.clear()` resets every counter and timer; averages (the RI divides all three by `CacheGets`, so its put and remove means read 0 until a get) |\n| G | Integration — writer | *Integration* | **DEEP** | Write-through: `CacheWriter.write`/`delete` ordering vs store and vs event/stat; **a writer exception must suppress the event and the `CachePuts` increment**; `writeAll`/`deleteAll` partial-failure collection mutation; `CacheWriterException` wrapping |\n| H | Integration — loader | *Integration* | **DEEP** | Read-through `get`/`getAll`/`invoke`; `loadAll` `replaceExistingValues` + completion listener; `CacheLoaderException` wrapping (still required by the 1.1.1 `CacheLoaderException` javadoc, and asserted by the TCK for `get` and `loadAll`) |\n| I | Store-by-value | *Store-By-Value and Store-By-Reference* | COVERAGE | Copy points (`put`/`get`/`iterator`/event payloads); caller-mutation isolation; `RISerializingInternalConverter` vs `RIReferenceInternalConverter`. Escalate if a copy is skipped on an event/stat path |\n| J | Types | *Configuration* | COVERAGE | `getKeyType`/`getValueType` metadata; exact type matching in `getCache(name, K, V)` (`ClassCastException` on mismatch); optional runtime type checking on `put`/`get` |\n| K | Configuration | *Configuration* | COVERAGE | `MutableConfiguration` snapshot-on-create; `Factory<CacheLoader/CacheWriter/ExpiryPolicy>`; read-through/write-through/store-by-value/stats/mgmt flags |\n| L | Lifecycle | *Caching Providers* | COVERAGE | `close`/`isClosed` → `IllegalStateException` on every op; `CacheManager` create(dup→`CacheException`)/get/destroy; `getCacheNames` immutable iterator; provider URI/classloader/properties |\n| M | Management | *Caching Providers* (MXBeans) | COVERAGE | `CacheMXBean` attributes; JMX `ObjectName` sanitize (catalogued); enable/disable statistics & management at runtime |\n| N | Null / adversarial inputs | method javadocs | COVERAGE | `NullPointerException` contract on null key/value/map/filter/processor args across the full API |\n\n(*Annotations* — CDI/Spring `@CacheResult` etc. — is a separate spec section the\nadapter does not implement; out of scope.)\n\n## Step 2: Run the differential\n\nFor each **DEEP** domain corner, in order, until the reference behavior is\nunambiguous:\n\n1. **Spec text** — read the governing javadoc/table in `/tmp/jsr107_spec.txt`. Note\n   deliberately-different wording between sibling operations (create-vs-update is\n   the canonical trap).\n2. **TCK** — find the test and read *what it asserts*. End-state only → it cannot\n   settle the event/stat question; proceed. (When TCK and spec javadoc disagree,\n   **TCK wins** — see `.claude/rules/jcache-adapter.md`.)\n3. **RI** — read the oracle class for that domain (the doc's resource map names one\n   per domain: `RICache` write/remove paths, `RICacheStatisticsMXBean`,\n   `RICacheEventDispatcher`, `RICache.writeCacheEntry`/`deleteCacheEntry`, etc.).\n4. **≥3 ecosystem impls** — fetch the adapter files named in the doc. Classify each;\n   record any split.\n5. **Caffeine internal parity** — verify every sibling path agrees with the\n   reference *and with each other*. Internal disagreement = the highest-signal\n   finding (one side is provably wrong).\n\nFor each **COVERAGE** domain: confirm the adapter's behavior matches the spec text,\nand that a TCK or unit test pins it — cite the test by name. If the only test\nasserts end-state and the clause hides an event/stat (e.g. does `clear()` fire\n`REMOVED`? does a store-by-value copy happen on the event payload?), **escalate that\ncorner to DEEP** and run the ladder above. A COVERAGE domain with a correct-but-\nuntested clause is a coverage finding, not a pass.\n\nSpawn one sub-auditor per domain-group — **write/read/remove (A–C)**, **entry\nprocessors (D)**, **events (E)**, **statistics (F)**, **integration loader+writer\n(G–H)**, **store-by-value/types/config/lifecycle/management (I–N)** — each with the\ndoc + the fetched spec as context, each required to return a concrete witness\n(operation sequence → divergent event/stat/end-state, or the test that pins the\nclause). Sub-agents cannot read session memory — **paste the doc's divergence\ncatalogue inline** so they do not re-derive known false-positives. Direct each\nsub-auditor to write its report to a **group-suffixed path**\n(`.local/audits/<model>/audit-jcache-conformance-<group>.md`), never the canonical path:\nparallel groups writing `audit-jcache-conformance.md` overwrite each other (the\n2026-07 run lost two group reports this way and had to recover them from agent\ntranscripts).\n\n## Step 3: Resolve and pin\n\nFor each confirmed real divergence:\n\n- State the spec text, the RI behavior, the ecosystem tally, and the Caffeine\n  internal-parity result. The fix direction follows the spec + RI; if the static\n  finding assumed the opposite direction, **say so** (this has happened — the\n  zero-update-expiry fix direction was inverted from what the static audit guessed).\n- Implement the fix as a minimal, surgical change, then add a **parity-matrix\n  test** (`writeOp_*`/`readOp_*`/`removeOp_*` over every sibling op) asserting they\n  all produce the same event count, statistic delta, and end-state. The TCK is not\n  the regression guard — the parity test is.\n- Run `:jcache:test` **and** `:jcache:tckTest` (per `.claude/rules/jcache-adapter.md`;\n  the TCK encodes interpretations unit tests miss).\n- Update `.claude/docs/jsr107-conformance.md`'s catalogue and ecosystem matrix so\n  the next run does not re-litigate it.\n\nFor a COVERAGE-tier clause that is correct but **untested**, record it as a coverage\ngap (which test to add), not a bug.\n\n## Output\n\nThe orchestrator (not the sub-auditors) writes\n`.local/audits/<model>/audit-jcache-conformance.md` — the consolidated adjudication\nacross the group-suffixed reports — using the standard\n`.claude/docs/finding-taxonomy.md` schema (severity / category / confidence /\nclassification).\n\nLead with the **spec-surface coverage matrix**: every domain A–N → depth → verdict\n(conformant / divergence / coverage-gap) → the witness or the pinning-test citation.\nA clean run must show *every domain was reached*, so \"clean\" means the full 1.1.1\nsurface was walked — not just the recent-bug corners.\n\nThen, for each finding: the spec citation (by section name), the RI behavior, the\necosystem tally, the Caffeine internal-parity result, the witness (operation →\ndivergent observable), and the resolution direction with its justification. A\nfinding with no spec/RI/ecosystem backing for its *direction* is not ready — record\nit as escalated, not as a fix.\n","frontmatter":{"name":"audit-jcache-conformance","description":"JSR-107 (JCache) spec-conformance audit","context":"fork","disable-model-invocation":true,"allowed-tools":"Read, Grep, Glob, Bash, Agent, Write","allowedTools":["Read,","Grep,","Glob,","Bash,","Agent,","Write"],"disableModelInvocation":true},"allowedTools":["Read,","Grep,","Glob,","Bash,","Agent,","Write"],"isInternal":false,"tokens":3382,"sizeBytes":13013},{"name":"SKILL.md","path":".claude/skills/audit-jdk-seam/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/SKILL.md","title":"audit-jdk-seam","category":"anthropic-skill","format":"markdown","content":"# audit-jdk-seam\n\nPath: `.claude/skills/audit-jdk-seam/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".claude/skills/audit-jmm/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jmm/SKILL.md","title":"audit-jmm","category":"anthropic-skill","format":"markdown","content":"# audit-jmm\n\nPath: `.claude/skills/audit-jmm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jmm/SKILL.md)","tokens":300,"sizeBytes":177},{"name":"SKILL.md","path":".claude/skills/audit-lifecycle/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-lifecycle/SKILL.md","title":"audit-lifecycle","category":"anthropic-skill","format":"markdown","content":"# audit-lifecycle\n\nPath: `.claude/skills/audit-lifecycle/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-lifecycle/SKILL.md)","tokens":300,"sizeBytes":195},{"name":"SKILL.md","path":".claude/skills/audit-linearizability/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-linearizability/SKILL.md","title":"audit-linearizability","category":"anthropic-skill","format":"markdown","content":"# audit-linearizability\n\nPath: `.claude/skills/audit-linearizability/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-linearizability/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":".claude/skills/audit-liveness/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-liveness/SKILL.md","title":"audit-liveness","category":"anthropic-skill","format":"markdown","content":"# audit-liveness\n\nPath: `.claude/skills/audit-liveness/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-liveness/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".claude/skills/audit-map-contract/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-map-contract/SKILL.md","title":"audit-map-contract","category":"anthropic-skill","format":"markdown","content":"# audit-map-contract\n\nPath: `.claude/skills/audit-map-contract/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-map-contract/SKILL.md)","tokens":300,"sizeBytes":204},{"name":"SKILL.md","path":".claude/skills/audit-memory-retention/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-memory-retention/SKILL.md","title":"audit-memory-retention","category":"anthropic-skill","format":"markdown","content":"# audit-memory-retention\n\nPath: `.claude/skills/audit-memory-retention/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-memory-retention/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":".claude/skills/audit-performance/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-performance/SKILL.md","title":"audit-performance","category":"anthropic-skill","format":"markdown","content":"# audit-performance\n\nPath: `.claude/skills/audit-performance/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-performance/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".claude/skills/audit-redundancy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-redundancy/SKILL.md","title":"audit-redundancy","category":"anthropic-skill","format":"markdown","content":"# audit-redundancy\n\nPath: `.claude/skills/audit-redundancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-redundancy/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".claude/skills/audit-reentrancy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-reentrancy/SKILL.md","title":"audit-reentrancy","category":"anthropic-skill","format":"markdown","content":"# audit-reentrancy\n\nPath: `.claude/skills/audit-reentrancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-reentrancy/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"SKILL.md","path":".claude/skills/audit-regret/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/SKILL.md","title":"audit-regret","category":"anthropic-skill","format":"markdown","content":"# audit-regret\n\nPath: `.claude/skills/audit-regret/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"absolve_p8.json","path":".claude/skills/audit-regret/specs/absolve_p8.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve_p8.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve_p8.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve_p8.json)","tokens":300,"sizeBytes":211},{"name":"absolve.json","path":".claude/skills/audit-regret/specs/absolve.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/absolve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/absolve.json)","tokens":300,"sizeBytes":205},{"name":"bandrider.json","path":".claude/skills/audit-regret/specs/bandrider.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/bandrider.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/bandrider.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/bandrider.json)","tokens":300,"sizeBytes":209},{"name":"crestpast.json","path":".claude/skills/audit-regret/specs/crestpast.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/crestpast.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/crestpast.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/crestpast.json)","tokens":300,"sizeBytes":209},{"name":"deadpark.json","path":".claude/skills/audit-regret/specs/deadpark.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadpark.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadpark.json)","tokens":300,"sizeBytes":207},{"name":"deadphase.json","path":".claude/skills/audit-regret/specs/deadphase.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadphase.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/deadphase.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/deadphase.json)","tokens":300,"sizeBytes":209},{"name":"drift.json","path":".claude/skills/audit-regret/specs/drift.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/drift.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/drift.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/drift.json)","tokens":300,"sizeBytes":201},{"name":"entryduty.json","path":".claude/skills/audit-regret/specs/entryduty.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/entryduty.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/entryduty.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/entryduty.json)","tokens":300,"sizeBytes":209},{"name":"flashpark.json","path":".claude/skills/audit-regret/specs/flashpark.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/flashpark.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/flashpark.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/flashpark.json)","tokens":300,"sizeBytes":209},{"name":"ghostclaim.json","path":".claude/skills/audit-regret/specs/ghostclaim.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ghostclaim.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ghostclaim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ghostclaim.json)","tokens":300,"sizeBytes":211},{"name":"hazefloor.json","path":".claude/skills/audit-regret/specs/hazefloor.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/hazefloor.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/hazefloor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/hazefloor.json)","tokens":300,"sizeBytes":209},{"name":"jumpslide_260.json","path":".claude/skills/audit-regret/specs/jumpslide_260.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_260.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_260.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_260.json)","tokens":300,"sizeBytes":217},{"name":"jumpslide_period26.json","path":".claude/skills/audit-regret/specs/jumpslide_period26.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_period26.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide_period26.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide_period26.json)","tokens":300,"sizeBytes":227},{"name":"jumpslide.json","path":".claude/skills/audit-regret/specs/jumpslide.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/jumpslide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/jumpslide.json)","tokens":300,"sizeBytes":209},{"name":"latebloom_min.json","path":".claude/skills/audit-regret/specs/latebloom_min.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom_min.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom_min.json)","tokens":300,"sizeBytes":217},{"name":"latebloom.json","path":".claude/skills/audit-regret/specs/latebloom.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/latebloom.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/latebloom.json)","tokens":300,"sizeBytes":209},{"name":"lifecycle_fit_scan.json","path":".claude/skills/audit-regret/specs/lifecycle_fit_scan.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lifecycle_fit_scan.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lifecycle_fit_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lifecycle_fit_scan.json)","tokens":300,"sizeBytes":227},{"name":"lowbar.json","path":".claude/skills/audit-regret/specs/lowbar.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lowbar.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/lowbar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/lowbar.json)","tokens":300,"sizeBytes":203},{"name":"mainsat.json","path":".claude/skills/audit-regret/specs/mainsat.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mainsat.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mainsat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mainsat.json)","tokens":300,"sizeBytes":205},{"name":"mixture.json","path":".claude/skills/audit-regret/specs/mixture.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mixture.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/mixture.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/mixture.json)","tokens":300,"sizeBytes":205},{"name":"needle_wide.json","path":".claude/skills/audit-regret/specs/needle_wide.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle_wide.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle_wide.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle_wide.json)","tokens":300,"sizeBytes":213},{"name":"needle.json","path":".claude/skills/audit-regret/specs/needle.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/needle.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/needle.json)","tokens":300,"sizeBytes":203},{"name":"norank.json","path":".claude/skills/audit-regret/specs/norank.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/norank.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/norank.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/norank.json)","tokens":300,"sizeBytes":203},{"name":"parkveil_min.json","path":".claude/skills/audit-regret/specs/parkveil_min.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil_min.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil_min.json)","tokens":300,"sizeBytes":215},{"name":"parkveil.json","path":".claude/skills/audit-regret/specs/parkveil.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/parkveil.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/parkveil.json)","tokens":300,"sizeBytes":207},{"name":"phases.json","path":".claude/skills/audit-regret/specs/phases.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/phases.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/phases.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/phases.json)","tokens":300,"sizeBytes":203},{"name":"pure_scan.json","path":".claude/skills/audit-regret/specs/pure_scan.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/pure_scan.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/pure_scan.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/pure_scan.json)","tokens":300,"sizeBytes":209},{"name":"ramp_retest.json","path":".claude/skills/audit-regret/specs/ramp_retest.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ramp_retest.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/ramp_retest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/ramp_retest.json)","tokens":300,"sizeBytes":213},{"name":"scarburst.json","path":".claude/skills/audit-regret/specs/scarburst.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/scarburst.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/scarburst.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/scarburst.json)","tokens":300,"sizeBytes":209},{"name":"shallowmoat.json","path":".claude/skills/audit-regret/specs/shallowmoat.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/shallowmoat.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/shallowmoat.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/shallowmoat.json)","tokens":300,"sizeBytes":213},{"name":"sidecliff.json","path":".claude/skills/audit-regret/specs/sidecliff.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/sidecliff.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/sidecliff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/sidecliff.json)","tokens":300,"sizeBytes":209},{"name":"stillness_starve_min.json","path":".claude/skills/audit-regret/specs/stillness_starve_min.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve_min.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve_min.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve_min.json)","tokens":300,"sizeBytes":231},{"name":"stillness_starve.json","path":".claude/skills/audit-regret/specs/stillness_starve.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/stillness_starve.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/stillness_starve.json)","tokens":300,"sizeBytes":223},{"name":"whisper.json","path":".claude/skills/audit-regret/specs/whisper.json","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/whisper.json","title":"Specs Skill","category":"anthropic-skill","format":"json","content":"# Specs Skill\n\nPath: `.claude/skills/audit-regret/specs/whisper.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/specs/whisper.json)","tokens":300,"sizeBytes":205},{"name":"SKILL.md","path":".claude/skills/audit-serialization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-serialization/SKILL.md","title":"audit-serialization","category":"anthropic-skill","format":"markdown","content":"# audit-serialization\n\nPath: `.claude/skills/audit-serialization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-serialization/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".claude/skills/audit-sibling-divergence/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-sibling-divergence/SKILL.md","title":"audit-sibling-divergence","category":"anthropic-skill","format":"markdown","content":"# audit-sibling-divergence\n\nPath: `.claude/skills/audit-sibling-divergence/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-sibling-divergence/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":".claude/skills/audit-state-machine/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-state-machine/SKILL.md","title":"audit-state-machine","category":"anthropic-skill","format":"markdown","content":"# audit-state-machine\n\nPath: `.claude/skills/audit-state-machine/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-state-machine/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".claude/skills/audit-subsystem-safety/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-subsystem-safety/SKILL.md","title":"audit-subsystem-safety","category":"anthropic-skill","format":"markdown","content":"# audit-subsystem-safety\n\nPath: `.claude/skills/audit-subsystem-safety/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-subsystem-safety/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"README.md","path":".claude/skills/audit-temporal-walk/README.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/README.md","title":"Audit-temporal-walk Skill","category":"anthropic-skill","format":"markdown","content":"# Audit-temporal-walk Skill\n\nPath: `.claude/skills/audit-temporal-walk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/README.md)","tokens":300,"sizeBytes":215},{"name":"SKILL.md","path":".claude/skills/audit-temporal-walk/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/SKILL.md","title":"audit-temporal-walk","category":"anthropic-skill","format":"markdown","content":"# audit-temporal-walk\n\nPath: `.claude/skills/audit-temporal-walk/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/SKILL.md)","tokens":300,"sizeBytes":207},{"name":"SKILL.md","path":".claude/skills/audit-third-party-contracts/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-third-party-contracts/SKILL.md","title":"audit-third-party-contracts","category":"anthropic-skill","format":"markdown","content":"# audit-third-party-contracts\n\nPath: `.claude/skills/audit-third-party-contracts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-third-party-contracts/SKILL.md)","tokens":300,"sizeBytes":231},{"name":"SKILL.md","path":".claude/skills/climber-gate/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/SKILL.md","title":"climber-gate","category":"anthropic-skill","format":"markdown","content":"# climber-gate\n\nPath: `.claude/skills/climber-gate/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"SKILL.md","path":".claude/skills/climber-minimize/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/SKILL.md","title":"climber-minimize","category":"anthropic-skill","format":"markdown","content":"# climber-minimize\n\nPath: `.claude/skills/climber-minimize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/SKILL.md)","tokens":300,"sizeBytes":198},{"name":"measurement.md","path":".claude/skills/optimize-cache/references/measurement.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/references/measurement.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.claude/skills/optimize-cache/references/measurement.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/references/measurement.md)","tokens":300,"sizeBytes":228},{"name":"SKILL.md","path":".claude/skills/optimize-cache/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/SKILL.md","title":"optimize-cache","category":"anthropic-skill","format":"markdown","content":"# optimize-cache\n\nPath: `.claude/skills/optimize-cache/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/SKILL.md)","tokens":300,"sizeBytes":192},{"name":"SKILL.md","path":".claude/skills/review-change/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/review-change/SKILL.md","title":"review-change","category":"anthropic-skill","format":"markdown","content":"# review-change\n\nPath: `.claude/skills/review-change/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/review-change/SKILL.md)","tokens":300,"sizeBytes":189},{"name":"SKILL.md","path":".claude/skills/sim-analyze/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-analyze/SKILL.md","title":"sim-analyze","category":"anthropic-skill","format":"markdown","content":"# sim-analyze\n\nPath: `.claude/skills/sim-analyze/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-analyze/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"SKILL.md","path":".claude/skills/sim-compare/SKILL.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-compare/SKILL.md","title":"sim-compare","category":"anthropic-skill","format":"markdown","content":"# sim-compare\n\nPath: `.claude/skills/sim-compare/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/sim-compare/SKILL.md)","tokens":300,"sizeBytes":183},{"name":"CLAUDE.md","path":".claude/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/CLAUDE.md","title":".claude - Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# .claude - Claude Agent Guidelines & System Prompt\n\nPath: `.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/CLAUDE.md)","tokens":300,"sizeBytes":185},{"name":"fetch-openjdk.sh","path":".claude/skills/audit-jdk-seam/fetch-openjdk.sh","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/fetch-openjdk.sh","title":"Claude Directive: fetch-openjdk.sh","category":"claude-rule","format":"markdown","content":"# Claude Directive: fetch-openjdk.sh\n\nPath: `.claude/skills/audit-jdk-seam/fetch-openjdk.sh`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/fetch-openjdk.sh)","tokens":300,"sizeBytes":228},{"name":"jbs.py","path":".claude/skills/audit-jdk-seam/jbs.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/jbs.py","title":"Claude Directive: jbs.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: jbs.py\n\nPath: `.claude/skills/audit-jdk-seam/jbs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/jbs.py)","tokens":300,"sizeBytes":198},{"name":"regret.py","path":".claude/skills/audit-regret/regret.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/regret.py","title":"Claude Directive: regret.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: regret.py\n\nPath: `.claude/skills/audit-regret/regret.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/regret.py)","tokens":300,"sizeBytes":203},{"name":"search.py","path":".claude/skills/audit-regret/search.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/search.py","title":"Claude Directive: search.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: search.py\n\nPath: `.claude/skills/audit-regret/search.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/search.py)","tokens":300,"sizeBytes":203},{"name":"tenants.py","path":".claude/skills/audit-regret/tenants.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/tenants.py","title":"Claude Directive: tenants.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: tenants.py\n\nPath: `.claude/skills/audit-regret/tenants.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/tenants.py)","tokens":300,"sizeBytes":206},{"name":"test_csv.py","path":".claude/skills/audit-regret/test_csv.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/test_csv.py","title":"Claude Directive: test_csv.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: test_csv.py\n\nPath: `.claude/skills/audit-regret/test_csv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/test_csv.py)","tokens":300,"sizeBytes":209},{"name":"workload.py","path":".claude/skills/audit-regret/workload.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/workload.py","title":"Claude Directive: workload.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: workload.py\n\nPath: `.claude/skills/audit-regret/workload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-regret/workload.py)","tokens":300,"sizeBytes":209},{"name":"audit_paths.py","path":".claude/skills/audit-temporal-walk/audit_paths.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/audit_paths.py","title":"Claude Directive: audit_paths.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: audit_paths.py\n\nPath: `.claude/skills/audit-temporal-walk/audit_paths.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/audit_paths.py)","tokens":300,"sizeBytes":232},{"name":"fix-audit.txt","path":".claude/skills/audit-temporal-walk/fix-audit.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/fix-audit.txt","title":"Claude Directive: fix-audit.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: fix-audit.txt\n\nPath: `.claude/skills/audit-temporal-walk/fix-audit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/fix-audit.txt)","tokens":300,"sizeBytes":229},{"name":"invariant-ledger.txt","path":".claude/skills/audit-temporal-walk/invariant-ledger.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/invariant-ledger.txt","title":"Claude Directive: invariant-ledger.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: invariant-ledger.txt\n\nPath: `.claude/skills/audit-temporal-walk/invariant-ledger.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/invariant-ledger.txt)","tokens":300,"sizeBytes":250},{"name":"lens-deletion.txt","path":".claude/skills/audit-temporal-walk/lens-deletion.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-deletion.txt","title":"Claude Directive: lens-deletion.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: lens-deletion.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-deletion.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-deletion.txt)","tokens":300,"sizeBytes":241},{"name":"lens-intent.txt","path":".claude/skills/audit-temporal-walk/lens-intent.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-intent.txt","title":"Claude Directive: lens-intent.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: lens-intent.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-intent.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-intent.txt)","tokens":300,"sizeBytes":235},{"name":"lens-sibling.txt","path":".claude/skills/audit-temporal-walk/lens-sibling.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-sibling.txt","title":"Claude Directive: lens-sibling.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: lens-sibling.txt\n\nPath: `.claude/skills/audit-temporal-walk/lens-sibling.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/lens-sibling.txt)","tokens":300,"sizeBytes":238},{"name":"per-commit.txt","path":".claude/skills/audit-temporal-walk/per-commit.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/per-commit.txt","title":"Claude Directive: per-commit.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: per-commit.txt\n\nPath: `.claude/skills/audit-temporal-walk/per-commit.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/per-commit.txt)","tokens":300,"sizeBytes":232},{"name":"run.py","path":".claude/skills/audit-temporal-walk/run.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/run.py","title":"Claude Directive: run.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: run.py\n\nPath: `.claude/skills/audit-temporal-walk/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/run.py)","tokens":300,"sizeBytes":208},{"name":"test-walk.txt","path":".claude/skills/audit-temporal-walk/test-walk.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/test-walk.txt","title":"Claude Directive: test-walk.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: test-walk.txt\n\nPath: `.claude/skills/audit-temporal-walk/test-walk.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/test-walk.txt)","tokens":300,"sizeBytes":229},{"name":"verify.py","path":".claude/skills/audit-temporal-walk/verify.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.py","title":"Claude Directive: verify.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: verify.py\n\nPath: `.claude/skills/audit-temporal-walk/verify.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.py)","tokens":300,"sizeBytes":217},{"name":"verify.txt","path":".claude/skills/audit-temporal-walk/verify.txt","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.txt","title":"Claude Directive: verify.txt","category":"claude-rule","format":"markdown","content":"# Claude Directive: verify.txt\n\nPath: `.claude/skills/audit-temporal-walk/verify.txt`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/verify.txt)","tokens":300,"sizeBytes":220},{"name":"walker.py","path":".claude/skills/audit-temporal-walk/walker.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/walker.py","title":"Claude Directive: walker.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: walker.py\n\nPath: `.claude/skills/audit-temporal-walk/walker.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-temporal-walk/walker.py)","tokens":300,"sizeBytes":217},{"name":"a1_tenant.py","path":".claude/skills/climber-gate/a1_tenant.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/a1_tenant.py","title":"Claude Directive: a1_tenant.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: a1_tenant.py\n\nPath: `.claude/skills/climber-gate/a1_tenant.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/a1_tenant.py)","tokens":300,"sizeBytes":212},{"name":"admission_harness.py","path":".claude/skills/climber-gate/admission_harness.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission_harness.py","title":"Claude Directive: admission_harness.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: admission_harness.py\n\nPath: `.claude/skills/climber-gate/admission_harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission_harness.py)","tokens":300,"sizeBytes":236},{"name":"admission.py","path":".claude/skills/climber-gate/admission.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission.py","title":"Claude Directive: admission.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: admission.py\n\nPath: `.claude/skills/climber-gate/admission.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/admission.py)","tokens":300,"sizeBytes":212},{"name":"blind_gen.py","path":".claude/skills/climber-gate/blind_gen.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blind_gen.py","title":"Claude Directive: blind_gen.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: blind_gen.py\n\nPath: `.claude/skills/climber-gate/blind_gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blind_gen.py)","tokens":300,"sizeBytes":212},{"name":"blindlock.py","path":".claude/skills/climber-gate/blindlock.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blindlock.py","title":"Claude Directive: blindlock.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: blindlock.py\n\nPath: `.claude/skills/climber-gate/blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/blindlock.py)","tokens":300,"sizeBytes":212},{"name":"byworkload.py","path":".claude/skills/climber-gate/byworkload.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/byworkload.py","title":"Claude Directive: byworkload.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: byworkload.py\n\nPath: `.claude/skills/climber-gate/byworkload.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/byworkload.py)","tokens":300,"sizeBytes":215},{"name":"census.py","path":".claude/skills/climber-gate/census.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/census.py","title":"Claude Directive: census.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: census.py\n\nPath: `.claude/skills/climber-gate/census.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/census.py)","tokens":300,"sizeBytes":203},{"name":"corner.py","path":".claude/skills/climber-gate/corner.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/corner.py","title":"Claude Directive: corner.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: corner.py\n\nPath: `.claude/skills/climber-gate/corner.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/corner.py)","tokens":300,"sizeBytes":203},{"name":"crashnoise.py","path":".claude/skills/climber-gate/crashnoise.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/crashnoise.py","title":"Claude Directive: crashnoise.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: crashnoise.py\n\nPath: `.claude/skills/climber-gate/crashnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/crashnoise.py)","tokens":300,"sizeBytes":215},{"name":"demoflood.py","path":".claude/skills/climber-gate/demoflood.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/demoflood.py","title":"Claude Directive: demoflood.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: demoflood.py\n\nPath: `.claude/skills/climber-gate/demoflood.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/demoflood.py)","tokens":300,"sizeBytes":212},{"name":"descent.py","path":".claude/skills/climber-gate/descent.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/descent.py","title":"Claude Directive: descent.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: descent.py\n\nPath: `.claude/skills/climber-gate/descent.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/descent.py)","tokens":300,"sizeBytes":206},{"name":"escgen.py","path":".claude/skills/climber-gate/escgen.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/escgen.py","title":"Claude Directive: escgen.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: escgen.py\n\nPath: `.claude/skills/climber-gate/escgen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/escgen.py)","tokens":300,"sizeBytes":203},{"name":"exposure.py","path":".claude/skills/climber-gate/exposure.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/exposure.py","title":"Claude Directive: exposure.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: exposure.py\n\nPath: `.claude/skills/climber-gate/exposure.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/exposure.py)","tokens":300,"sizeBytes":209},{"name":"floors.py","path":".claude/skills/climber-gate/floors.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/floors.py","title":"Claude Directive: floors.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: floors.py\n\nPath: `.claude/skills/climber-gate/floors.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/floors.py)","tokens":300,"sizeBytes":203},{"name":"frozen_matched.py","path":".claude/skills/climber-gate/frozen_matched.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/frozen_matched.py","title":"Claude Directive: frozen_matched.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: frozen_matched.py\n\nPath: `.claude/skills/climber-gate/frozen_matched.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/frozen_matched.py)","tokens":300,"sizeBytes":227},{"name":"gate.py","path":".claude/skills/climber-gate/gate.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gate.py","title":"Claude Directive: gate.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gate.py\n\nPath: `.claude/skills/climber-gate/gate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gate.py)","tokens":300,"sizeBytes":197},{"name":"gen_adv.py","path":".claude/skills/climber-gate/gen_adv.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_adv.py","title":"Claude Directive: gen_adv.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_adv.py\n\nPath: `.claude/skills/climber-gate/gen_adv.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_adv.py)","tokens":300,"sizeBytes":206},{"name":"gen_attacks.py","path":".claude/skills/climber-gate/gen_attacks.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_attacks.py","title":"Claude Directive: gen_attacks.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_attacks.py\n\nPath: `.claude/skills/climber-gate/gen_attacks.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_attacks.py)","tokens":300,"sizeBytes":218},{"name":"gen_blindlock.py","path":".claude/skills/climber-gate/gen_blindlock.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_blindlock.py","title":"Claude Directive: gen_blindlock.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_blindlock.py\n\nPath: `.claude/skills/climber-gate/gen_blindlock.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_blindlock.py)","tokens":300,"sizeBytes":224},{"name":"gen_h4c1.py","path":".claude/skills/climber-gate/gen_h4c1.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_h4c1.py","title":"Claude Directive: gen_h4c1.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_h4c1.py\n\nPath: `.claude/skills/climber-gate/gen_h4c1.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_h4c1.py)","tokens":300,"sizeBytes":209},{"name":"gen_jam.py","path":".claude/skills/climber-gate/gen_jam.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_jam.py","title":"Claude Directive: gen_jam.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_jam.py\n\nPath: `.claude/skills/climber-gate/gen_jam.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_jam.py)","tokens":300,"sizeBytes":206},{"name":"gen_moat.py","path":".claude/skills/climber-gate/gen_moat.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_moat.py","title":"Claude Directive: gen_moat.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_moat.py\n\nPath: `.claude/skills/climber-gate/gen_moat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_moat.py)","tokens":300,"sizeBytes":209},{"name":"gen_norank.py","path":".claude/skills/climber-gate/gen_norank.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_norank.py","title":"Claude Directive: gen_norank.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_norank.py\n\nPath: `.claude/skills/climber-gate/gen_norank.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_norank.py)","tokens":300,"sizeBytes":215},{"name":"gen_straddle.py","path":".claude/skills/climber-gate/gen_straddle.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_straddle.py","title":"Claude Directive: gen_straddle.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen_straddle.py\n\nPath: `.claude/skills/climber-gate/gen_straddle.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen_straddle.py)","tokens":300,"sizeBytes":221},{"name":"gen.py","path":".claude/skills/climber-gate/gen.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen.py","title":"Claude Directive: gen.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen.py\n\nPath: `.claude/skills/climber-gate/gen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen.py)","tokens":300,"sizeBytes":194},{"name":"gen2.py","path":".claude/skills/climber-gate/gen2.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen2.py","title":"Claude Directive: gen2.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: gen2.py\n\nPath: `.claude/skills/climber-gate/gen2.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/gen2.py)","tokens":300,"sizeBytes":197},{"name":"harness.py","path":".claude/skills/climber-gate/harness.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/harness.py","title":"Claude Directive: harness.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: harness.py\n\nPath: `.claude/skills/climber-gate/harness.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/harness.py)","tokens":300,"sizeBytes":206},{"name":"kvcache.py","path":".claude/skills/climber-gate/kvcache.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/kvcache.py","title":"Claude Directive: kvcache.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: kvcache.py\n\nPath: `.claude/skills/climber-gate/kvcache.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/kvcache.py)","tokens":300,"sizeBytes":206},{"name":"lcs2lirs.py","path":".claude/skills/climber-gate/lcs2lirs.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/lcs2lirs.py","title":"Claude Directive: lcs2lirs.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: lcs2lirs.py\n\nPath: `.claude/skills/climber-gate/lcs2lirs.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/lcs2lirs.py)","tokens":300,"sizeBytes":209},{"name":"marginal.py","path":".claude/skills/climber-gate/marginal.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/marginal.py","title":"Claude Directive: marginal.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: marginal.py\n\nPath: `.claude/skills/climber-gate/marginal.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/marginal.py)","tokens":300,"sizeBytes":209},{"name":"mechanism.py","path":".claude/skills/climber-gate/mechanism.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mechanism.py","title":"Claude Directive: mechanism.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: mechanism.py\n\nPath: `.claude/skills/climber-gate/mechanism.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mechanism.py)","tokens":300,"sizeBytes":212},{"name":"mixnoise.py","path":".claude/skills/climber-gate/mixnoise.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mixnoise.py","title":"Claude Directive: mixnoise.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: mixnoise.py\n\nPath: `.claude/skills/climber-gate/mixnoise.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/mixnoise.py)","tokens":300,"sizeBytes":209},{"name":"pair.py","path":".claude/skills/climber-gate/pair.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/pair.py","title":"Claude Directive: pair.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: pair.py\n\nPath: `.claude/skills/climber-gate/pair.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/pair.py)","tokens":300,"sizeBytes":197},{"name":"probe.py","path":".claude/skills/climber-gate/probe.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/probe.py","title":"Claude Directive: probe.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: probe.py\n\nPath: `.claude/skills/climber-gate/probe.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/probe.py)","tokens":300,"sizeBytes":200},{"name":"real.py","path":".claude/skills/climber-gate/real.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/real.py","title":"Claude Directive: real.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: real.py\n\nPath: `.claude/skills/climber-gate/real.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/real.py)","tokens":300,"sizeBytes":197},{"name":"repeat.py","path":".claude/skills/climber-gate/repeat.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/repeat.py","title":"Claude Directive: repeat.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: repeat.py\n\nPath: `.claude/skills/climber-gate/repeat.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/repeat.py)","tokens":300,"sizeBytes":203},{"name":"run.py","path":".claude/skills/climber-gate/run.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/run.py","title":"Claude Directive: run.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: run.py\n\nPath: `.claude/skills/climber-gate/run.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/run.py)","tokens":300,"sizeBytes":194},{"name":"screen.py","path":".claude/skills/climber-gate/screen.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/screen.py","title":"Claude Directive: screen.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: screen.py\n\nPath: `.claude/skills/climber-gate/screen.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/screen.py)","tokens":300,"sizeBytes":203},{"name":"slowswap.py","path":".claude/skills/climber-gate/slowswap.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/slowswap.py","title":"Claude Directive: slowswap.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: slowswap.py\n\nPath: `.claude/skills/climber-gate/slowswap.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/slowswap.py)","tokens":300,"sizeBytes":209},{"name":"startwin.py","path":".claude/skills/climber-gate/startwin.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/startwin.py","title":"Claude Directive: startwin.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: startwin.py\n\nPath: `.claude/skills/climber-gate/startwin.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/startwin.py)","tokens":300,"sizeBytes":209},{"name":"sweep.py","path":".claude/skills/climber-gate/sweep.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/sweep.py","title":"Claude Directive: sweep.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: sweep.py\n\nPath: `.claude/skills/climber-gate/sweep.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/sweep.py)","tokens":300,"sizeBytes":200},{"name":"test_seed_tools.py","path":".claude/skills/climber-gate/test_seed_tools.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/test_seed_tools.py","title":"Claude Directive: test_seed_tools.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: test_seed_tools.py\n\nPath: `.claude/skills/climber-gate/test_seed_tools.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/test_seed_tools.py)","tokens":300,"sizeBytes":230},{"name":"traceio.py","path":".claude/skills/climber-gate/traceio.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/traceio.py","title":"Claude Directive: traceio.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: traceio.py\n\nPath: `.claude/skills/climber-gate/traceio.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/traceio.py)","tokens":300,"sizeBytes":206},{"name":"whisper_mod.py","path":".claude/skills/climber-gate/whisper_mod.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper_mod.py","title":"Claude Directive: whisper_mod.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: whisper_mod.py\n\nPath: `.claude/skills/climber-gate/whisper_mod.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper_mod.py)","tokens":300,"sizeBytes":218},{"name":"whisper.py","path":".claude/skills/climber-gate/whisper.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper.py","title":"Claude Directive: whisper.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: whisper.py\n\nPath: `.claude/skills/climber-gate/whisper.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-gate/whisper.py)","tokens":300,"sizeBytes":206},{"name":"ablate.py","path":".claude/skills/climber-minimize/ablate.py","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/ablate.py","title":"Claude Directive: ablate.py","category":"claude-rule","format":"markdown","content":"# Claude Directive: ablate.py\n\nPath: `.claude/skills/climber-minimize/ablate.py`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/climber-minimize/ablate.py)","tokens":300,"sizeBytes":211},{"name":"jmh-session.init.gradle","path":".claude/skills/optimize-cache/scripts/jmh-session.init.gradle","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/scripts/jmh-session.init.gradle","title":"Claude Directive: jmh-session.init.gradle","category":"claude-rule","format":"markdown","content":"# Claude Directive: jmh-session.init.gradle\n\nPath: `.claude/skills/optimize-cache/scripts/jmh-session.init.gradle`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/optimize-cache/scripts/jmh-session.init.gradle)","tokens":300,"sizeBytes":265},{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.github/copilot-instructions.md)","tokens":300,"sizeBytes":191},{"name":"auditor.md","path":".claude/agents/auditor.md","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/agents/auditor.md","title":"Subagent: auditor","category":"subagent-persona","format":"markdown","content":"# Subagent: auditor\n\nPath: `.claude/agents/auditor.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/agents/auditor.md)","tokens":300,"sizeBytes":169},{"name":"auditor.toml","path":".codex/agents/auditor.toml","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/agents/auditor.toml","title":"Codex Directive: auditor.toml","category":"codex-rule","format":"markdown","content":"# Codex Directive: auditor.toml\n\nPath: `.codex/agents/auditor.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/agents/auditor.toml)","tokens":300,"sizeBytes":183},{"name":"config.toml","path":".codex/config.toml","rawUrl":"https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/config.toml","title":"Codex Directive: config.toml","category":"codex-rule","format":"markdown","content":"# Codex Directive: config.toml\n\nPath: `.codex/config.toml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.codex/config.toml)","tokens":300,"sizeBytes":166}],"systemPromptSnippet":"<yakaai_skills repo=\"ben-manes/caffeine\">\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/AGENTS.md)\n\n<!-- File: .claude/rules/async-cache.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/async-cache.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/async-cache.md)\n\n<!-- File: .claude/rules/code-comments.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/code-comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/code-comments.md)\n\n<!-- File: .claude/rules/concurrency.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/concurrency.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/concurrency.md)\n\n<!-- File: .claude/rules/design-decisions.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/design-decisions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/design-decisions.md)\n\n<!-- File: .claude/rules/errorprone.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/errorprone.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/errorprone.md)\n\n<!-- File: .claude/rules/generated-code.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/generated-code.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/generated-code.md)\n\n<!-- File: .claude/rules/github-actions.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/github-actions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/github-actions.md)\n\n<!-- File: .claude/rules/gradle-build.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/gradle-build.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/gradle-build.md)\n\n<!-- File: .claude/rules/guava-adapter.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/guava-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/guava-adapter.md)\n\n<!-- File: .claude/rules/jcache-adapter.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/jcache-adapter.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/jcache-adapter.md)\n\n<!-- File: .claude/rules/simulator.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/simulator.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/simulator.md)\n\n<!-- File: .claude/rules/testing.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/rules/testing.md)\n\n<!-- File: .claude/skills/audit-adaptivity/SKILL.md (Tokens: ~3256 | Category: anthropic-skill) -->\n---\nname: audit-adaptivity\ndescription: Audit the adaptive window hill-climber and region-resize logic for implementation defects (not algorithm quality)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the adaptive W-TinyLFU control loop and the admission-window / main-region\nresize logic for IMPLEMENTATION defects. This is the one eviction subsystem not in\n`/audit-subsystem-safety`'s scope, and it was recently rebuilt — the climber now lives in the\npackage-private `WindowClimber` class (reached through the generated `climber` field), with a new\ndensity-signal + probe-machine large tier (>4096) — so it has elevated bug density.\n\n## Scope boundary — implementation correctness, NOT algorithm quality\n\nThe adaptation policy itself is at its tuned frontier. Out of scope: convergence\nrate, hit-rate, oscillation-as-a-design-tradeoff, and the choice of the tuning\nconstants. (Behavioral hit-rate regression against the adversarial trap suite is\n`/climber-gate`'s job, not this audit's.) Do NOT report \"the climber could converge faster / oscillates / constant\nX should be Y.\" Report only defects: arithmetic that yields a wrong value, a sign\nerror, a state that violates a structural invariant, a race, a NaN, or an overflow.\n\n## Methods in scope\n\n- `climb`, `determineAdjustment` — the feedback step (reactive: hit-rate delta; density:\n  within-sample densities → step → adjustment). `determineAdjustment` carries\n  `mainProtectedMaximum` to size the probation capacity for the probe verdict\n- `densityClimb`, `armProbe`, `walkStep`, `probeEnding`, `undoProbe`, `DensityClimber.steer` — the\n  large tier's signal, probe machine, and verdict internals (all on `WindowClimber`)\n- `increaseWindow`, `decreaseWindow`, `demoteFromMainProtected` — region transfer\n- `setMaximumSize` — initial window/main split, plus `WindowClimber.resized` (the\n  `SLOW_ADAPT_THRESHOLD` step-sign flip and the probe-machine reset)\n- `evictFromWindow` / `evictFromMain` — they consume the region maxima the climber sets\n\nProbe machine (>4096, in `WindowClimber`): starved samples (region hits below\nmax(4, requestCount >> MIN_SIGNAL_SHIFT)) at a blind corner launch a bold-driver walk.\nEndings: crash-abort (full undo, refractory re-armed WITHOUT doubling), reversal-through-base and\nbudget expiry (failed experiments: full undo + ladder x2), adjudication at >=4x the bar under the\ncommitted depth (confirm keeps the position + ladder resets to 1; anything else fails with a full\nundo). The verdict is asymmetric BY DESIGN: an up-probe confirms iff\n`ln((windowDensity+eps)/(walk.baseProbationDensity+eps)) > 0` — the probation-marginal baseline\nFROZEN in `armProbe` — while a down-probe uses the average-density sign test (`error*dir > 0`).\nLadder: PROBE_BACKOFF_INITIAL (16) doubling to _MAX (64). Invariants to audit:\n1 <= starvation.rung <= 64; 0 <= refractoryLeft <= starvation.rung, which both oracles assert\ndirectly — the walk budget is a separate field (`Walk.samples`, bounded by PROBE_WALK_BUDGET) on\nan object that exists only while walking, so the two can no longer alias; probe state fully reset\nby resized; an undo returns exactly to `walk.baseWindow`; the below-floor lift cannot exceed the\nfloor; `sample.probationHits <= sample.hits - sample.windowHits`;\n`walk.baseProbationDensity` is written ONLY in `armProbe` (each re-arm re-snapshots) and is\nnon-negative and finite; the probation capacity denominator is\n`max(1, maximum - windowMaximum - mainProtectedMaximum)` — capacities, never occupancy.\n\nNOT bugs (adjudicated design; read `hill-climber.md` §4 before flagging): the up/down verdict\nasymmetry (the window has no marginal substructure to price against); the frozen — hence\nstale-looking — baseline (judging against the LIVE probation rate is an absorbing false-veto: the\nwalk's own demotions enrich it — the demoflood gate row; a cold-start-transient baseline is\nbounded and self-heals because every re-arm re-snapshots); probation attribution captured\nBEFORE `reorderProbation` can promote the entry in `onAccess` (the promoting access counts as a\nprobation hit, the next as protected); a zero baseline auto-confirming any >=4x-bar earnings\n(the opportunity cost of a dead boundary is ~zero — nullchurn stays harmless); and the lowmix\nnamed trade (a gate sentinel). A walk's bases (`down`, `baseHitRate`, `baseWindow`,\n`baseProbationDensity`) are `final` on the `Walk` object, which exists only while one is in\nflight — \"dead state while not probing\" is the absent object, so there is nothing to go stale.\n\nCache-side fields: `windowMaximum`, `mainProtectedMaximum`, `windowWeightedSize`,\n`mainProtectedWeightedSize`; `QUEUE_TRANSFER_THRESHOLD`.\n\n`WindowClimber` owns `adjustment`, `sample` (`Sample`: `hits`, `misses`, `windowHits`,\n`probationHits`, `previousHitRate`), and `tier` (a `ReactiveClimber` or `DensityClimber`).\nThe `Climber` base class owns `step` (`Step`: `size`), initialized from the maximum and the\nstrategy's chosen direction at construction. `DensityClimber` owns `refractoryLeft`, `retreatLeft`,\n`undoRemaining`, and its helper objects: `walk` (`Walk`, null while none is in flight:\n`ladder`, `isAudit`, `down`, `baseWindow`, `baseHitRate`, `baseSmoothedRate`,\n`baseProbationDensity`, `samples`, `belowBarStreak`, `aboveStreak`, `beatBase`), `starvation` and\n`audit` (a `Ladder` each: `rung`, `crashStreak`), `auditClock` (`AuditClock`: `down`,\n`waitSamples`, `stillSamples`, `lastWindow`), `anchor` (`Anchor`: `window`, `rate`, `held`,\n`freshLeft`, `returning`, `returnLeft`, `shortfallStreak`), and `rates` (`Rates`: `smoothed`,\n`deviation`). `Reading` is the per-sample derived view, computed once and read-only.\n\nThe 38 constants live with the mechanism each tunes, so a knob names its owner:\n`WindowClimber` — `RESTART_THRESHOLD`;\n`DensityClimber` — `DENSITY_THRESHOLD`, `DENSITY_GAIN`, `SAMPLE_MULTIPLIER`;\n`Step` — `STEP_PERCENT`, `STEP_DECAY_RATE`, `MIN_INITIAL_STEP`;\n`ReactiveClimber` — `SLOW_ADAPT_THRESHOLD`, `SLOW_ADAPT_RATIO_CAP`, `SLOW_ADAPT_DECAY_RATE`;\n`Reading` — `STABLE_BAND_FRACTION`, `MAX_STEP_FRACTION`, `WINDOW_FLOOR_FRACTION`,\n`DENSITY_EPSILON`, `MIN_SIGNAL_SHIFT`, `MIN_STARVATION_BAR`;\n`Rates` — `VETO_MARGIN_MIN`, `RATE_SMOOTHING`, `DEVIATION_SEED`, `VETO_MARGIN_SCALE`;\n`AuditClock` — `AUDIT_WAIT_INITIAL`, `AUDIT_WAIT_FIRST`, `AUDIT_WAIT_MAX`;\n`Anchor` — `VETO_STREAK`, `VETO_RETURN_BUDGET`;\n`Walk` — `PROBE_WALK_BUDGET`, `PROBE_BAR_CAP`, `PROBE_EXIT_BAR_MULTIPLE`,\n`AUDIT_CRASH_PERSISTENCE`, `AUDIT_COMMITMENT`, `AUDIT_CONFIRM_STREAK`;\n`Ladder` — `PROBE_BACKOFF_INITIAL`, `PROBE_BACKOFF_MAX`, `PROBE_CRASH_ESCALATION`,\n`PROBE_STRIDE_SCALE_MID`, `PROBE_STRIDE_SCALE_DEEP`, `PROBE_COMMITMENT_MID`,\n`PROBE_COMMITMENT_DEEP`.\n\n## Structural invariants to attack (violations are real bugs)\n\n1. **Region partition sum**: `windowMaximum + mainMaximum` (probation + protected)\n   must equal `maximum` after every climb and every resize. Can any single transfer,\n   or a sequence capped by `QUEUE_TRANSFER_THRESHOLD`, drift the sum?\n2. **Non-negative maxima**: can `windowMaximum` or `mainProtectedMaximum` go negative\n   — a quota larger than the donor region, or repeated `decreaseWindow` at the floor?\n   EXCEPTION (adjudicated 2026-07, F1; duration priced 2026-08-22, M1): a transiently\n   negative `policyWeight` — the sanctioned telescoping race, an out-of-order UpdateTask\n   drain — can over-shift the caps beyond the commanded adjustment, even past these\n   bounds. Tolerated by design: the caps are policy targets (eviction is driven by the\n   telescoping `weightedSize`/`maximum`), and they walk back only by the weight each later\n   transfer moves, so a swing larger than a cycle's transfer suspends the split for many\n   cycles with the total still bounded. Report cap drift only with a mechanism that never\n   walks back.\n3. **Quota accounting**: in `increaseWindow`/`decreaseWindow` the `quota` is decremented\n   per transferred node by `policyWeight`. With weighted entries, can `quota` underflow,\n   skip/over-run the loop, or transfer the wrong count? Does the\n   `QUEUE_TRANSFER_THRESHOLD` cap leave the regions half-adjusted such that the next\n   `climb` mis-reads them? (Same F1 exception as #2 for the negative transient.)\n4. **`determineAdjustment` math**:\n   - `requestCount = hits + misses`; the early return guards `requestCount <\n     effectiveSampleSize`. Is the `hitRate` division ever reachable with\n     `requestCount == 0`?\n   - small-cache branch (`ReactiveClimber.samplePeriod`): `(long) (sketchSampleSize * ratio)`,\n     where `ratio = clamp(initialStep / magnitude)`. Can `initialStep` be 0 (maximum 0 or\n     tiny) making `magnitude` 0 → division by zero? Can the `(long)` cast truncate\n     `ratio` so it defeats the intended sample-period growth?\n   - `ReactiveClimber.climb` uses `Math.copySign(Step.restartMagnitude(max), amount)`. For\n     `amount == 0.0` / `-0.0`, does `copySign` choose the intended direction? Can `step.size`\n     become NaN or 0 and **permanently stall** adaptation (a stuck-window *bug*, distinct from\n     slow convergence)?\n5. **`setMaximumSize` at boundaries**: the step-sign flip at `max <= SLOW_ADAPT_THRESHOLD`\n   plus a *runtime* maximum change via `Policy.eviction.setMaximum` — when `maximum`\n   crosses `SLOW_ADAPT_THRESHOLD` in either direction, do the window/main split, the\n   `step.size` sign, and the sample state stay mutually consistent?\n6. **Stale `adjustment` and sample memory across the gates**: `climb` calls\n   `determineAdjustment` then `increaseWindow`/`decreaseWindow` off the climber's `adjustment`.\n   The tier is skipped on three paths: an uninitialized sketch (`resetSample`), a sub-period\n   sample, and a cache below half occupancy (`discardSample`, which resets a full sample). Can a\n   stale `adjustment` from a prior cycle be re-applied? The half-full gate is reachable mid-life\n   while the tier's walk, anchor and rates persist, so also check what each path does to the\n   cross-sample `previousHitRate` that the reactive step, the stand-down trigger\n   (`isWorkloadShift`) and the walk's bold driver (`nextStride`) compare against.\n7. **Layer ownership of the ladders, streaks, and schedules** — the highest-yield row, because\n   it has produced two real bugs and both were invisible from a single code path.\n   `hill-climber.md` §4 carries a **write-owner table** (observation / active walk / starvation\n   retry / audit retry+schedule / goal guard / motion out). Enumerate **every** write to\n   `starvation.rung`, `starvation.crashStreak`, `audit.rung`, `audit.crashStreak`,\n   `auditClock.waitSamples`, `auditClock.stillSamples`, `anchor.held`, `anchor.freshLeft` and\n   check each against its owner —\n   *including endings that are not crashes*. Both landed defects were exactly this shape: the\n   shared crash streak let exogenous pulses pair separate audit crashes into a rung ratchet\n   (H4-C1), and later a non-crash ending (budget expiry, reversal-through-base) still cleared\n   the **other** layer's streak, which disarmed that layer's escalation and its\n   `AUDIT_CRASH_PERSISTENCE` tolerance — so an interleaved blind corner reached around the first\n   fix. One cross-write is sanctioned, journaled: an audit confirm rewards the starvation\n   ladder (`starvation.reward`) and zeroes its refractory. An audit's undo leaves the\n   refractory alone (since 2026-08-16, pinned by\n   `undoProbe_auditRetreat_leavesTheStarvationRefractoryAlone`). Anything else is a finding.\n   Checkable products the oracles already\n   assert, and which a new invariant should join: `anchor.freshLeft > 0 ⇒ anchor.held`,\n   `anchor.held ⇒ anchor.isPlanted`, `walk != null ⇒ undoRemaining == 0`, and\n   `auditClock.waitSamples > PROBE_BACKOFF_MAX ⇒ audit.rung == PROBE_BACKOFF_MAX` (the ratchet as\n   an invariant). Note the one *legitimate* coupling so it is not reported: the audit clock is a\n   function of window position, so any layer that moves the window decays `stillSamples` — that\n   is the intended semantics, and it is the remaining path by which frequent blind corners defer\n   audits.\n\n## Output\n\nFor each defect: give concrete maximum/weight/access values, trace the arithmetic\nstep by step, show the resulting invariant violation or wrong region size, and a\nVerification (a `BoundedLocalCacheTest` white-box method plus the required `-P` flags).\n\nEverything here runs under `evictionLock` (single-writer), so most findings will be\narithmetic / state-corruption, not races — but explicitly check whether any\nclimber-written field (`adjustment`, `step.size`, the region maxima) is also read\noff-lock by a concurrent reader before concluding \"single-writer, cannot race.\"\n\n<!-- File: .claude/skills/audit-adversarial-input/SKILL.md (Tokens: ~388 | Category: anthropic-skill) -->\n---\nname: audit-adversarial-input\ndescription: Analyze behavior under adversarial or extreme API inputs\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects triggered by adversarial or extreme API inputs.\n\nFor each category, construct concrete inputs and trace the code path:\n\n1. **Weight extremes**: Integer.MAX_VALUE for every entry (overflow?),\n   MAX_VALUE→1 delta (overflow?), 0 for all (unbounded growth?),\n   inconsistent weigher (divergence?).\n\n2. **Expiry extremes**: Long.MAX_VALUE nanos (timer wheel overflow?),\n   0 or negative (infinite loops?), MAX→0 transitions, alternating durations.\n\n3. **Maximum size extremes**: Long.MAX_VALUE (arithmetic overflow?),\n   maximumSize(0) (graceful degeneration?), maximumSize(1) (temporary oversize?).\n\n4. **Key/value adversarial behavior**: constant hashCode(0) (sketch degeneration?),\n   slow equals() (lock hold explosion?), mutating hashCode (silent corruption?),\n   huge values (allocation failure handling?).\n\n5. **Concurrency extremes**: 10K threads on same computeIfAbsent, puts exceeding\n   maintenance throughput (backpressure?), refresh storms from short refreshAfterWrite.\n\n6. **Frequency sketch saturation**: all accesses to same key, all unique keys\n   (reset cost?), counter overflow beyond 4-bit limit.\n\n7. **Time extremes**: nanoTime near Long.MAX_VALUE (wrap-around?), non-monotonic\n   ticker, large time jumps (timer wheel handling?).\n\nFor each issue: state input values, trace computation, state whether it causes\nincorrect behavior / OOM / infinite loop / degraded performance / graceful handling.\n\nDo not report issues requiring API contract violations (e.g., null keys)\nunless the violation is undetected and causes silent corruption.\n\n<!-- File: .claude/skills/audit-adversarial/SKILL.md (Tokens: ~1686 | Category: anthropic-skill) -->\n---\nname: audit-adversarial\ndescription: Hostile full-codebase review by parallel adversarial agents with no design context — finds bugs that domain familiarity masks\nargument-hint: \"[subsystem or file to focus on, default: all source files]\"\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent\n---\n\nRun a hostile adversarial review of the Caffeine source code. Unlike the other\naudit skills which use the auditor agent (with design context), this skill\ndeliberately gives reviewers NO project context — they review with fresh eyes\nand a hostile mindset.\n\n## Target\n\n$ARGUMENTS\n\nIf no argument, review all source files in `caffeine/src/main/java/`,\n`guava/src/main/java/`, `jcache/src/main/java/`, `simulator/src/main/java/`,\nand `examples/*/src/main/java/`. The adapters hold the same quality bar as the\ncore. The examples are sketches: report one failing at what it shows, not\nhardening it leaves to the user (`ruled-out.md` §examples).\n\n## Step 1: Inventory source files\n\nList all Java source files in scope. Group into 6-8 subsystems for parallel\nreview — core subsystems plus one group per non-core module (examples reviewed\nagainst the contracts of the third-party libraries they compose).\n\n## Step 2: Launch parallel hostile reviewers\n\nSpawn 4-6 subagents simultaneously. Each reviews one subsystem. Critically:\n**DO NOT give them design-decisions.md, synchronization.md, or any .claude/docs.**\nThey should review from first principles only.\n\nEach agent gets this prompt (adapted to their subsystem):\n\n```\nYou are a senior Java concurrency expert performing a hostile code review.\nA competitor built this library and it's gaining adoption over your work.\nYou want to find every flaw to demonstrate it's not production-worthy.\n\nYour reputation is on the line. Be ruthless but precise — cite methods,\ntrace code paths, construct failing scenarios.\n\nRules:\n- Dig deep. Zero findings are allowed ONLY with a coverage proof listing\n  files inspected, methods traced, interleavings attempted, and attack\n  surfaces checked. If coverage is shallow, keep looking.\n- Every finding must include: exact location, concrete evidence, a\n  falsifiable scenario, and confidence (high/medium).\n- Only report issues provable with code evidence\n- Construct concrete interleavings, inputs, or scenarios\n- Do not critique style — focus on correctness and robustness\n- Do not accept \"by design\" — if the design has consequences, document them\n- Read the actual source code before making claims\n- Look for what's MISSING, not just what's wrong\n\nAttack surfaces:\n1. Memory model violations — insufficient access modes, missing happens-before\n2. State corruption interleavings — weight divergence, deque corruption, stuck drain status\n3. Resource leaks under failure — OOME/SOE leaving unrecoverable state\n4. Silent data loss — values dropped without notification\n5. Specification violations — ConcurrentMap contract, Javadoc promises\n6. Denial of service — O(n) operations on O(1) paths\n7. Sentinel value collisions — can valid input equal an internal sentinel?\n8. Validation gaps — inputs accepted at parse time but rejected later\n9. API surprises — public methods returning nonsensical values\n10. Notification asymmetries — some paths notify, equivalent paths don't\n11. Third-party API contract misuse — error/dispose paths, duplicate keys,\n    empty batches, cancellation semantics assumed rather than verified\n\nRate each finding: critical/high/medium/low\nFormat: numbered list with file:method, description, evidence\n```\n\n## Step 3: Validate completeness\n\nIf any agent returns zero findings, require a coverage summary from that\nagent (scope inspected, attack surfaces checked, interleavings attempted).\nRe-launch with a more specific prompt only if coverage is shallow. Zero\nfindings with thorough coverage proof is acceptable.\n\n## Step 3.5: Evaluator challenge (per reviewer)\n\nFor each reviewer that returned findings OR a zero-findings coverage proof,\nspawn a separate evaluator subagent. The evaluator gets ONLY the reviewer's\nreport — no source code, no design docs.\n\n```\nYou are a hostile evaluator reviewing another auditor's report of a Java\ncache library. Your job is to find what the auditor MISSED.\n\n1. For each confirmed invariant, construct a 2-thread interleaving that\n   would violate it. If you cannot, explain what prevents it.\n2. For each zero-finding claim, identify the most likely bug category\n   the auditor could have missed given their stated coverage.\n3. For each finding, check whether the evidence is concrete or hand-wavy.\n   Flag findings that assert a bug without a specific interleaving.\n\nOutput: prioritized list of challenges for the reviewer to address.\n```\n\nHave the original reviewer address each challenge by re-reading source code.\nDrop findings the reviewer cannot defend. Add new findings from challenges\nthe reviewer confirms.\n\n## Step 4: Consolidate and deduplicate\n\nCollect findings from all agents. Deduplicate (same issue found by multiple\nagents = higher confidence). Remove findings that are clearly wrong (misreading\nthe code). Keep findings even if they might be \"by design\" — the point is to\nsurface things domain familiarity masks.\n\n**Confidence decay check**: If any reviewer's findings are >60% medium-confidence,\nnote this in the report — that reviewer's area may need a more targeted follow-up\naudit rather than more speculative findings.\n\n**Escalation**: If any reviewer flagged issues they could not resolve statically\n(e.g., \"depends on JDK internal behavior\"), mark these as ESCALATED for dynamic\ntesting (Fray, LinCheck, JCStress) rather than guessing.\n\n## Step 5: Adjudicate against design docs\n\nNOW read `.claude/docs/design-decisions.md`, `.claude/rules/design-decisions.md`,\nthe relevant module rules, and `.claude/docs/ruled-out.md`'s standing principles\nand module section. For JCache, consult the relevant topic in\n`.claude/docs/jsr107-conformance.md` and verify surviving conformance claims\nagainst its JSR-107 1.1.1 specification and API sources. State any normative\nsource that was not consulted. For each finding, check whether it is an\nintentional trade-off and reclassify it:\n- **confirmed** — supported evidence violates an applicable contract or invariant;\n  absence of a design explanation alone is insufficient\n- **intentional** — documented design decision, not a defect\n- **ambiguous** — needs more evidence or maintainer input\n\nKeep intentional findings in the report (labeled as such) but do not count\nthem as bugs. The value is surfacing them for review, not asserting they're wrong.\n\n## Step 6: Triage confirmed findings\n\nClassify using `.claude/docs/finding-taxonomy.md` for severity and categories.\nAdditionally tag each confirmed finding:\n- **bug** — incorrect behavior, provably wrong\n- **api-issue** — public API returns surprising/incorrect values\n- **validation-gap** — input accepted when it shouldn't be\n- **robustness** — works but fragile, could break with minor changes\n- **cosmetic** — dead code, wasteful patterns, poor diagnostics\n\n## Step 7: Report\n\nWrite the full report to `.local/audits/<model>/audit-adversarial.md`\n(see `.claude/docs/audit-output.md`).\n\nFormat:\n```\n# Adversarial Review: Caffeine Source Code\n\n[N] parallel auditors reviewed [M] source files (~K lines).\nFindings consolidated, deduplicated, and triaged by severity.\n\n## Likely Bugs\n...\n\n## API/Behavioral Issues\n...\n\n## Robustness/Validation Gaps\n...\n\n## Design/Maintenance Concerns\n...\n\n## Summary\n[N] likely bugs, [M] API issues, [K] validation gaps, [J] concerns.\n[N] evaluator challenges received across [M] reviewers.\n```\n\n<!-- File: .claude/skills/audit-arithmetic/SKILL.md (Tokens: ~374 | Category: anthropic-skill) -->\n---\nname: audit-arithmetic\ndescription: Audit for arithmetic and boundary bugs (overflow, off-by-one, drift)\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume there is at least one arithmetic or boundary bug in this code.\n\nAudit for:\n- Off-by-one errors\n- Incorrect inequality direction (< vs <=, > vs >=)\n- Overflow / underflow (int, long, specifically nanoTime arithmetic)\n- Implicit narrowing or widening conversion\n- Incorrect rounding or truncation\n- Sign errors\n- Sentinel value collisions (can a valid value equal a sentinel?)\n- Counter drift (can a counter diverge from the quantity it tracks\n  over a long-running cache?)\n- Timer wheel bucket arithmetic (modular arithmetic, wrap-around)\n- Frequency sketch counter saturation and reset arithmetic\n- Hill climber / adaptive sizing: window vs main partition adjustment; the density and\n  probe-verdict log-ratios (`ln((x+ε)/(y+ε))`), the probation-capacity denominator\n  (`max(1, maximum − windowMaximum − mainProtectedMaximum)`), the saturated `4·maximum`\n  sample period, and the stride/commitment rung tables\n  (percentage calculations, rounding, overshoot, oscillation)\n- FrequencySketch table size calculation (ensureCapacity rounding to\n  power of two, interaction with maximumSize)\n- Weight delta computation in UpdateTask (sign conventions, can\n  intermediate sums overflow when weights are near Integer.MAX_VALUE?)\n\nFor each suspected issue:\n- Provide a concrete input (specific key, value, weight, time values)\n- Show step-by-step evaluation through the code\n- Show expected vs actual behavior\n- If it requires billions of operations, state the count needed\n\nIgnore style and performance.\nOnly report high-confidence defects supported by evaluation traces.\n\n<!-- File: .claude/skills/audit-build-ci/SKILL.md (Tokens: ~418 | Category: anthropic-skill) -->\n---\nname: audit-build-ci\ndescription: Audit build and CI configuration for correctness risks\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the build and CI configuration for subtle correctness risks.\n\nRead the build files and CI workflows before analyzing:\n- `build.gradle.kts` (root and caffeine module)\n- `gradle/plugins/` (custom Gradle plugins)\n- `.github/workflows/` (GitHub Actions)\n- `gradle.properties`\n\nConsider:\n- Misconfigured dependency scopes\n- Incorrect test isolation\n- Non-reproducible builds\n- Incorrect Gradle cache configuration\n- Missing failure modes (tests passing when they shouldn't)\n- Incorrect CI matrix coverage\n- Silent test skipping\n- Multi-line YAML values that get interpolated elsewhere (a `>` folded scalar\n  keeps a trailing newline; splicing one into another folded scalar embeds that\n  newline mid-string, so a consumer splitting on literal spaces mis-parses the\n  spliced-in value's last token)\n- Performance problems in the build\n- Security issues (dependency vulnerabilities, secret exposure)\n- Bad practices that could cause false confidence\n- Retry and re-run paths (in-job retry loops, `workflow_run` re-runners) and what each treats\n  as infrastructure. A job that exceeds `timeout-minutes` concludes `cancelled`, not `failure`,\n  and a hung test reaches CI that way\n- Matrix legs that name a JDK distribution: without a vendor constraint, toolchain resolution\n  may pick another detected JDK of the same version\n\nReport only issues that could cause incorrect artifacts, missing\nfailures, or false confidence in test results.\n\nPrice a CI finding against live history, not only the YAML: `gh api` for the ruleset and\ncheck-run conclusions, `gh run view <id> --log` (with `--attempt`/`--job`) for what a green run\nactually hid. A mechanism in a workflow and a run that concealed a failure are separate claims.\nRead-only queries only.\n\n<!-- File: .claude/skills/audit-contract-drift/SKILL.md (Tokens: ~1067 | Category: anthropic-skill) -->\n---\nname: audit-contract-drift\ndescription: Find places where documented API contracts and the implementation diverge\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nMost audits read code; this one reads documentation first and then traces each\npromise to every implementation path that should honor it. The bugs caught here\nare not concurrency or arithmetic defects — they are quiet contradictions\nbetween what the javadoc promises and what the code does.\n\nBuild a list of behavioral promises from public API docs, then trace each one\nto every code path that should honor it.\n\nSources of contracts to enumerate:\n\n- `Caffeine.java` — every `<b>Note:</b>` and `<b>Warning:</b>` block in a\n  builder method's javadoc. Pay particular attention to:\n  - `weakKeys`, `weakValues`, `softValues` — equality semantics flip to\n    identity (`==`) for the configured strength\n  - `expireAfter*`, `refreshAfterWrite` — duration constraints, what\n    \"expired\" means at boundaries\n  - `maximumSize`, `maximumWeight` — eviction triggering and amortization\n  - `removalListener`, `evictionListener` — when and how notifications fire\n- `Cache.java`, `LoadingCache.java`, `AsyncCache.java`, `AsyncLoadingCache.java`\n  — javadoc of every method, especially \"must\", \"will\", \"guarantees\",\n  \"for any reason\" language.\n- `Policy.java` — every method's documented behavior.\n- `Weigher.java`, `Expiry.java`, `RemovalListener.java`, `RemovalCause.java`\n  — user-facing contracts referenced by the cache.\n- **Internal obligations** — \"callers must\" contracts stated in\n  `.claude/rules/*.md` and in internal-class javadoc across all modules (e.g.\n  jcache's EventDispatcher requires every publishing thread to drain via\n  awaitSynchronous/ignoreSynchronous; async operations must register with the\n  in-flight set). Enumerate each obligation, then verify every call site honors\n  it — including executor-thread and refresh paths that don't flow through the\n  obvious entry points.\n\nFor each contract, record the exact wording, the configurations that activate\nit, and the set of operations affected.\n\nThen trace each promise through every code path that should honor it:\n\n- Direct API calls on `Cache` / `LoadingCache` / `AsyncCache`\n- `asMap()` view methods (`size`, `isEmpty`, `containsKey`, `containsValue`,\n  `get`, `put`, `remove(k)`, `remove(k,v)`, `replace`, `compute*`, `merge`,\n  `equals`, `hashCode`)\n- `asMap().keySet()` / `values()` / `entrySet()` — `contains`, `remove`,\n  `removeAll`, `retainAll`, `removeIf`, `iterator`, `spliterator`\n- Bulk operations (`putAll`, `getAll`, `getAllPresent`, `invalidateAll`)\n- `AsyncCache.synchronous()` round-trip — does the sync view honor the same\n  contract as the async cache?\n- Serialization round-trip — does the deserialized cache honor the same\n  promises about expiration durations, loader presence, etc.?\n\nA path that uses a different equivalence, ordering, or visibility from what\nthe contract promises is a **contract drift** finding. So is a path that\nsilently downgrades a configuration on round-trip.\n\nCommon drift patterns to check explicitly:\n\n- **Identity vs. equals on weak/soft caches**: `weakKeys`/`weakValues`/\n  `softValues` promise identity, but view collections that use\n  `o.equals(value)` or `Collection.contains(value)` may apply the user's\n  equality semantics instead.\n- **Cardinality vs. presence asymmetry**: methods documented as treating\n  in-flight async values as absent must align with `size`, `isEmpty`,\n  `equals`, `hashCode`, and iterators on the same view.\n- **Notification \"for any reason\"**: `removalListener` documented to fire\n  for any cause, but async paths may drop notifications for null or\n  exceptional completions.\n- **Cross-version serialization**: serialized fields renamed or defaulted\n  differently across versions can silently lose configuration or throw\n  on round-trip.\n- **Same-instance return semantics**: e.g., `compute(k, (k,v) -> v)` is\n  documented one way but updates timestamps/weight regardless.\n- **`size()` documented as estimate**: this is an explicit out — verify it\n  is actually documented as an estimate everywhere it diverges from logical\n  presence.\n- **Synchronous vs. asynchronous view divergence**: the `synchronous()`\n  view's `asMap()` may treat in-flight entries inconsistently across query,\n  mutation, and cardinality methods.\n\nEach finding should anchor both sides of the drift — the source of the\ncontract (file + javadoc snippet) and the divergent implementation (file +\nmethod) — and include a minimal user-observable scenario where the docs and\nthe code disagree.\n\n<!-- File: .claude/skills/audit-correctness-proof/SKILL.md (Tokens: ~324 | Category: anthropic-skill) -->\n---\nname: audit-correctness-proof\ndescription: Attempt formal correctness proofs for all public cache methods\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAttempt to PROVE the correctness of the cache, not to find bugs.\n\nFor each public method (get, put, remove, compute, computeIfAbsent, merge,\nreplace, size, clear):\n\n1. State the method's specification: preconditions, postconditions,\n   concurrent behavior promises.\n2. Identify the synchronization protocol ensuring the postcondition.\n   For an expiring entry the clock is part of that state: place each\n   ticker read that dates the entry or judges its expiry relative to the\n   linearization point. A read taken before a step that can block (a\n   hash-bin lock, a node monitor, a user callback) dates or judges\n   against a stale clock, so check the paths that create an entry as\n   well as the ones that test it.\n3. Write a proof sketch:\n   a. Assume the precondition holds\n   b. Identify the critical section(s)\n   c. Show the postcondition is established within the critical section\n   d. Show no concurrent operation can invalidate it before the caller observes\n\n4. If you CANNOT complete the proof at any step, stop and report:\n   - Which step fails\n   - What additional assumption would be needed\n   - Whether the code guarantees that assumption\n\nGaps in the proof are more valuable than speculative bug reports — a gap\ntells us exactly where to look.\n\nDo not provide praise or style commentary.\n\n<!-- File: .claude/skills/audit-coverage-gaps/SKILL.md (Tokens: ~373 | Category: anthropic-skill) -->\n---\nname: audit-coverage-gaps\ndescription: Discover test coverage gaps that could hide correctness defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAssume the existing tests miss at least one real defect.\n\n1. For each public method, identify the hardest-to-test edge cases:\n   - Null values (where permitted)\n   - Maximum/minimum weight\n   - Zero-duration expiration\n   - Mapping functions that return the same instance\n   - Mapping functions that throw\n   - Weighers that throw\n   - Expiry callbacks that throw\n   - CompletableFuture values (async cache edge cases)\n   - Keys/values with adversarial hashCode/equals\n\n2. For each edge case, trace the code path. Does the code handle it correctly?\n\n3. Identify combinatorially hard behavioral dimensions:\n   - Operation A on expired entry during concurrent operation B\n   - Exception in user callback X while holding lock Y\n   - GC collecting reference R between code points P and Q\n   - Fast path falls through to slow path under contention (e.g.,\n     entry appears expired on fast path, recovers under lock on slow path)\n   - Async cache: future completes between check and action (e.g.,\n     isComputingAsync returns true, but future completes before\n     the code that depends on that check executes)\n\n4. For each candidate gap, provide a minimal test case with the specific\n   cache configuration and thread interleaving needed to reach the code path.\n\nPriority ordering:\n- Paths involving the catch-commit-rethrow pattern (doComputeIfAbsent, remap)\n- Slow paths reachable only via contention (synchronized blocks after optimistic checks)\n- Interactions between expiration and the async value lifecycle (ASYNC_EXPIRY, isComputingAsync)\n\nFocus only on behavioral coverage gaps that could hide correctness bugs.\n\n<!-- File: .claude/skills/audit-exception-safety/SKILL.md (Tokens: ~546 | Category: anthropic-skill) -->\n---\nname: audit-exception-safety\ndescription: Audit exception safety and failure atomicity across all throw sites\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAudit the cache for exception safety defects. For every code path where\nexceptions can be thrown, determine whether the cache is left consistent.\n\nAssume at least one exception safety bug exists. If your analysis yields\nzero findings, re-examine catch-commit-rethrow paths — explain specifically\nwhy no exception scenario leaves inconsistent state.\n\n**Priority #1: catch-commit-rethrow in doComputeIfAbsent and remap.** This is\nthe most commonly misunderstood pattern and historically the most fragile.\nTrace the EXACT sequence of committed mutations, notification delivery, and\nexception propagation for every exception type.\n\nUser-provided code that can throw:\n1. CacheLoader.load / loadAll / reload\n2. Weigher.weigh\n3. Expiry.expireAfterCreate / expireAfterUpdate / expireAfterRead\n4. Mapping functions passed to compute, computeIfAbsent, merge\n5. RemovalListener.onRemoval / EvictionListener\n\nRuntime exceptions:\n6. OutOfMemoryError during node/reference allocation\n7. StackOverflowError from deep re-entrancy\n8. RejectedExecutionException from executor\n\nIn the jcache adapter, also trace: CacheWriter.write/writeAll/delete/deleteAll\n(the spec requires partial-failure bookkeeping), EntryProcessor.process,\nExpiryPolicy methods, and Copier/serialization failures in store-by-value mode.\n\nFor each throw site:\n\n1. List every mutation already committed before the throw point.\n2. Determine whether the catch block rolls back or commits.\n3. Check for:\n   - **Phantom entries**: Node in CHM but invisible to eviction/expiration\n   - **Orphaned references**: WeakReference created but node rolled back\n   - **Counter drift**: weightedSize out of sync with actual entries\n   - **Lost notifications**: notifyEviction without notifyRemoval, or vice versa\n   - **Leaked futures**: CompletableFuture never completed\n   - **Stuck refresh**: refresh flag set but never cleared\n\n4. For catch-commit-rethrow (doComputeIfAbsent, remap), verify:\n   - Catches Throwable, not just RuntimeException\n   - Committed state is fully consistent\n   - Original exception is preserved\n\n5. For OutOfMemoryError specifically:\n   - Can AddTask/UpdateTask OOME orphan a CHM entry?\n   - Can WeakKeyReference/WeakValueReference OOME leave half-constructed node?\n\nFor each defect: state the throw site, mutations committed, inconsistent\nstate, and a concrete triggering scenario.\n\n<!-- File: .claude/skills/audit-feature-interaction/SKILL.md (Tokens: ~450 | Category: anthropic-skill) -->\n---\nname: audit-feature-interaction\ndescription: Analyze feature interaction pairs and triples for concurrent defects\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the cache for defects arising from multiple features operating\nsimultaneously on the same entry.\n\nAssume at least one feature interaction bug exists. If your analysis yields\nzero findings, re-examine the top-priority pairs below — explain specifically\nwhy no interleaving produces a bug.\n\nPriority ranking (from confirmed historical bugs):\n1. **Refresh + expiration** (D+B) — most-bugged interaction historically\n2. **Reference collection + any feature** (C+*) — value reference visibility\n3. **Async completion + any feature** (F+*) — future lifecycle edge cases\n4. **Eviction + weight change** (A+H) — counter drift during transitions\n\nFeatures:\nA. Eviction (size/weight limit exceeded)\nB. Expiration (afterAccess, afterWrite, variable)\nC. Reference collection (weak key, weak value, soft value GC)\nD. Refresh (automatic reload)\nE. Loading (CacheLoader / computeIfAbsent)\nF. Async completion (CompletableFuture values)\nG. Listener notification (removal listener, eviction listener)\nH. Weight change (Weigher returning different weight for new value)\n\nFor each pair (A,B), (A,C), ..., (G,H) — 28 pairs total:\n\n1. Can both features trigger simultaneously on the same entry?\n2. If yes, construct the most adversarial interleaving.\n3. Trace step-by-step: correct processing? notifications? final state? cleanup?\n\nAfter all pairs, identify highest-risk TRIPLE interactions:\n- Eviction + expiration + listener exception\n- Refresh + async completion + GC collection\n- Weight change + eviction + compute\n\nHigh-risk pairwise combinations:\n- Eviction during refresh (entry evicted while refreshing)\n- Expiration during compute (entry expires mid-computation)\n- GC during async completion (future completes after weak ref collected)\n- Weight change during eviction\n- Listener exception during any other feature\n\nFor each defect: state the features involved, provide the interleaving,\nstate the incorrect behavior.\n\n<!-- File: .claude/skills/audit-iteration/SKILL.md (Tokens: ~309 | Category: anthropic-skill) -->\n---\nname: audit-iteration\ndescription: Analyze concurrent iteration and view consistency guarantees\ncontext: fork\nagent: auditor\ndisable-model-invocation: true\n---\n\nAnalyze the concurrent iteration and view behavior of the cache.\n\nAssume at least one view operation can observe inconsistent state under\nconcurrent modification. If your analysis yields zero findings, re-examine\nexpired-but-present entries and dead/retired node visibility — explain\nspecifically why no user-observable inconsistency is possible.\n\nView operations to analyze:\n- asMap().entrySet/keySet/values() iteration\n- asMap().forEach()\n- asMap().size()\n- asMap().containsValue()\n- Snapshot operations (policy().eviction().hottest/coldest)\n\nFor each:\n1. What consistency guarantee? (Snapshot? Weakly consistent? Sequentially consistent?)\n2. Can iteration observe:\n   - A retired or dead node?\n   - An entry whose key/value has been garbage collected?\n   - An expired but not-yet-cleaned-up entry?\n   - A node with inconsistent key/value (key from one version, value from another)?\n3. Can concurrent put/remove/compute cause the iterator to:\n   - Skip an entry that existed for the entire iteration?\n   - Return the same entry twice?\n   - Throw ConcurrentModificationException?\n4. Does wrapping ConcurrentHashMap iterators introduce issues CHM wouldn't have?\n\nFor each issue: construct a concrete interleaving and state whether it violates\nthe documented contract or is expected weakly-consistent behavior.\n\n<!-- File: .claude/skills/audit-jcache-conformance/SKILL.md (Tokens: ~3382 | Category: anthropic-skill) -->\n---\nname: audit-jcache-conformance\ndescription: JSR-107 (JCache) spec-conformance audit\ncontext: fork\ndisable-model-invocation: true\nallowed-tools: Read, Grep, Glob, Bash, Agent, Write\n---\n\n# Audit: JSR-107 Conformance\n\nThis audit verifies the `jcache/` adapter against the **full JSR-107 1.1.1\nspecification** — every normative domain, not just the corners the last bug\ntouched. It walks the spec surface and allocates depth by where the TCK is blind.\n\n**Why the TCK is the floor, not the verification.** The TCK frequently asserts\nonly the observable **end-state** (`containsKey`/`get`), not the **event stream**\n(`CREATED`/`UPDATED`/`EXPIRED`/`REMOVED`) or the **statistics** (`CachePuts`,\nhits/misses, removals, evictions). Two implementations with different events and\ndifferent counts both pass. Every real bug found in this adapter recently lived in\nexactly that TCK-blind gap (zero-creation-expiry phantom `CREATED`;\nzero-update-expiry `put`-family suppressing `UPDATED`). So the audit goes **DEEP**\n(full spec→RI→ecosystem→internal-parity differential) on the event/statistic/\nexpiry/write-through surface, and runs a **COVERAGE** pass (spec-text correctness +\nconfirm a test pins it) over the rest of the spec — escalating any COVERAGE clause\nthat turns out to hide a TCK-invisible event or statistic to the DEEP differential.\n\nThis is a focused, resource-heavy specialization of `/audit-sibling-divergence`\nGroup G2. Read **`.claude/docs/jsr107-conformance.md` first** — it is the resource\nmap (live-fetch recipes, RI/ecosystem class locations for every domain below), the\ndifferential methodology, the parity-test pattern, and the catalogue of\nalready-resolved divergences (do not re-flag those).\n\nFor this skill, the reference and its standing rulings are read before analysis, overriding the\nauditor's Phase 1.5 reading order for that document. Verify applicable rulings against current\ncontracts and source before using them to adjudicate a finding.\n\n## When to run\n\n- After any change to `jcache/src/main` touching `CacheProxy`, `LoadingCacheProxy`,\n  `EntryProcessorEntry`/`postProcess`, `EventDispatcher`, expiry, statistics,\n  the write-through (`CacheWriter`) path, or store-by-value copying.\n- Before a release, as a comprehensive 1.1.1 re-verification.\n- Once per quarter as a conformance baseline.\n- When a `/audit-sibling-divergence` run raises a Group G2 finding — use this to\n  resolve the *direction* (the static audit cannot, and has guessed wrong before).\n- Not for adapter concurrency: this audit is a single-threaded spec differential.\n  Concurrency windows (live-view vs snapshot races, obligation pairing on\n  executor threads, close/destroy symmetry) belong to `/audit-subsystem-safety`,\n  `/audit-memory-retention`, `/audit-lifecycle`, and `/audit-contract-drift`'s\n  obligation sweep.\n\nHeavyweight (fetches the spec, clones/fetches the ecosystem, may spawn\nsub-auditors). Not for routine pre-commit review.\n\n## Step 0: Load the spec and the resource map\n\nRead `.claude/docs/jsr107-conformance.md`. Fetch the live spec:\n\n```bash\nDOC=1ijduF_tmHvBaUS7VBBU2ZN8_eEBiFaXXg9OI0_ZxCrA\ncurl -fsSL \"https://docs.google.com/document/d/$DOC/export?format=txt\" -o /tmp/jsr107_spec.txt\n```\n\nConfirm it fetched the real spec (grep for `getExpiryForUpdate`), not an auth page.\nThe export reflows; reference the spec by **section name** (the 1.1.1 section\nheadings are listed per-domain in the matrix below). Locate the TCK sources\n(`find ~/.gradle/caches -name 'cache-tests-1.1.1-test-sources.jar'` and\n`jcache/build/tck/`).\n\n## Step 1: Build the spec-surface matrix\n\nWalk the **whole** 1.1.1 spec. Map each normative domain to its spec section, its\nadapter code, and the **depth** it warrants. Do not stop at the write-path/expiry\nfamily — that is one DEEP domain among several, and the recent bugs there created a\nrecency bias this matrix exists to correct.\n\n**Depth = DEEP** — the TCK does not pin the event stream / statistic / expiry\ntiming, so it can mask a real divergence. Run the full differential (Step 2) and\nadd a parity-matrix test.\n**Depth = COVERAGE** — the spec text is unambiguous and the TCK's end-state\nassertion is sufficient. Confirm (a) the adapter matches the spec text and (b) a\ntest pins it; cite the test. Escalate to DEEP the moment a hidden event/stat\nappears.\n\n| # | Domain | 1.1.1 section | Depth | Verify |\n|---|--------|---------------|-------|--------|\n| A | Write ops × expiry | *Expiry Policies*; *Statistics Effects* | **DEEP** | `put`/`putAll`/`putIfAbsent`/`getAndPut`/`replace(K,V)`/`replace(K,V,V)`/`getAndReplace` — creation-vs-update `ZERO`/`ETERNAL`/`null` expiry; `CREATED`/`UPDATED` emission; `CachePuts` count. **Internal parity across all siblings.** |\n| B | Read & access | *Expiry Policies*; *Integration*; *Statistics Effects* | **DEEP** | `get`/`getAll`/`containsKey`/`iterator` — `getExpiryForAccess` `ZERO`/`null`/finite; `CacheHits`/`CacheMisses` (containsKey must not count); read-through load as `get`-miss-not-put |\n| C | Remove ops | *Cache Entry Listeners*; *Integration*; *Statistics Effects* | **DEEP** | `remove(K)`/`remove(K,V)`/`getAndRemove`/`removeAll(keys)`/`removeAll()`/`clear()` — `REMOVED` event + `oldValue`; **`removeAll()` counts removals, `clear()` does not**; removal-stat gating on an already-expired entry; `CacheWriter.delete` |\n| D | Entry processors | *Entry Processors*; *Statistics Effects* | **DEEP** | `invoke`/`invokeAll` — `EntryProcessorEntry.Action` machine (NONE→READ/CREATED/UPDATED/LOADED/DELETED) vs RI `MutableEntryOperation`; per-op events + stats; read-through `getValue()` ending in `LOADED` counts a miss, not a put (catalogued — confirm, don't re-flag) |\n| E | Events | *Cache Entry Listeners* | **DEEP** | `CREATED`/`UPDATED`/`REMOVED`/`EXPIRED` payload (`isOldValueAvailable`/`getOldValue`); synchronous vs asynchronous dispatch; `CacheEntryEventFilter`; per-key ordering (`EventDispatcher` CompletableFuture chains); runtime register/deregister |\n| F | Statistics | *Statistics Effects of Cache Operations* | **DEEP** | The **full** `CacheStatisticsMXBean` matrix: `CacheHits`/`Misses`/`Gets`/`Puts`/`Removals`/`Evictions` × every op. Failed `putIfAbsent`/`replace` accounting; **`CacheEvictions` (the Caffeine-native-eviction→JCache-stat bridge — no sibling resolves this identically)**; `CacheStatisticsMXBean.clear()` resets every counter and timer; averages (the RI divides all three by `CacheGets`, so its put and remove means read 0 until a get) |\n| G | Integration — writer | *Integration* | **DEEP** | Write-through: `CacheWriter.write`/`delete` ordering vs store and vs event/stat; **a writer exception must suppress the event and the `CachePuts` increment**; `writeAll`/`deleteAll` partial-failure collection mutation; `CacheWriterException` wrapping |\n| H | Integration — loader | *Integration* | **DEEP** | Read-through `get`/`getAll`/`invoke`; `loadAll` `replaceExistingValues` + completion listener; `CacheLoaderException` wrapping (still required by the 1.1.1 `CacheLoaderException` javadoc, and asserted by the TCK for `get` and `loadAll`) |\n| I | Store-by-value | *Store-By-Value and Store-By-Reference* | COVERAGE | Copy points (`put`/`get`/`iterator`/event payloads); caller-mutation isolation; `RISerializingInternalConverter` vs `RIReferenceInternalConverter`. Escalate if a copy is skipped on an event/stat path |\n| J | Types | *Configuration* | COVERAGE | `getKeyType`/`getValueType` metadata; exact type matching in `getCache(name, K, V)` (`ClassCastException` on mismatch); optional runtime type checking on `put`/`get` |\n| K | Configuration | *Configuration* | COVERAGE | `MutableConfiguration` snapshot-on-create; `Factory<CacheLoader/CacheWriter/ExpiryPolicy>`; read-through/write-through/store-by-value/stats/mgmt flags |\n| L | Lifecycle | *Caching Providers* | COVERAGE | `close`/`isClosed` → `IllegalStateException` on every op; `CacheManager` create(dup→`CacheException`)/get/destroy; `getCacheNames` immutable iterator; provider URI/classloader/properties |\n| M | Management | *Caching Providers* (MXBeans) | COVERAGE | `CacheMXBean` attributes; JMX `ObjectName` sanitize (catalogued); enable/disable statistics & management at runtime |\n| N | Null / adversarial inputs | method javadocs | COVERAGE | `NullPointerException` contract on null key/value/map/filter/processor args across the full API |\n\n(*Annotations* — CDI/Spring `@CacheResult` etc. — is a separate spec section the\nadapter does not implement; out of scope.)\n\n## Step 2: Run the differential\n\nFor each **DEEP** domain corner, in order, until the reference behavior is\nunambiguous:\n\n1. **Spec text** — read the governing javadoc/table in `/tmp/jsr107_spec.txt`. Note\n   deliberately-different wording between sibling operations (create-vs-update is\n   the canonical trap).\n2. **TCK** — find the test and read *what it asserts*. End-state only → it cannot\n   settle the event/stat question; proceed. (When TCK and spec javadoc disagree,\n   **TCK wins** — see `.claude/rules/jcache-adapter.md`.)\n3. **RI** — read the oracle class for that domain (the doc's resource map names one\n   per domain: `RICache` write/remove paths, `RICacheStatisticsMXBean`,\n   `RICacheEventDispatcher`, `RICache.writeCacheEntry`/`deleteCacheEntry`, etc.).\n4. **≥3 ecosystem impls** — fetch the adapter files named in the doc. Classify each;\n   record any split.\n5. **Caffeine internal parity** — verify every sibling path agrees with the\n   reference *and with each other*. Internal disagreement = the highest-signal\n   finding (one side is provably wrong).\n\nFor each **COVERAGE** domain: confirm the adapter's behavior matches the spec text,\nand that a TCK or unit test pins it — cite the test by name. If the only test\nasserts end-state and the clause hides an event/stat (e.g. does `clear()` fire\n`REMOVED`? does a store-by-value copy happen on the event payload?), **escalate that\ncorner to DEEP** and run the ladder above. A COVERAGE domain with a correct-but-\nuntested clause is a coverage finding, not a pass.\n\nSpawn one sub-auditor per domain-group — **write/read/remove (A–C)**, **entry\nprocessors (D)**, **events (E)**, **statistics (F)**, **integration loader+writer\n(G–H)**, **store-by-value/types/config/lifecycle/management (I–N)** — each with the\ndoc + the fetched spec as context, each required to return a concrete witness\n(operation sequence → divergent event/stat/end-state, or the test that pins the\nclause). Sub-agents cannot read session memory — **paste the doc's divergence\ncatalogue inline** so they do not re-derive known false-positives. Direct each\nsub-auditor to write its report to a **group-suffixed path**\n(`.local/audits/<model>/audit-jcache-conformance-<group>.md`), never the canonical path:\nparallel groups writing `audit-jcache-conformance.md` overwrite each other (the\n2026-07 run lost two group reports this way and had to recover them from agent\ntranscripts).\n\n## Step 3: Resolve and pin\n\nFor each confirmed real divergence:\n\n- State the spec text, the RI behavior, the ecosystem tally, and the Caffeine\n  internal-parity result. The fix direction follows the spec + RI; if the static\n  finding assumed the opposite direction, **say so** (this has happened — the\n  zero-update-expiry fix direction was inverted from what the static audit guessed).\n- Implement the fix as a minimal, surgical change, then add a **parity-matrix\n  test** (`writeOp_*`/`readOp_*`/`removeOp_*` over every sibling op) asserting they\n  all produce the same event count, statistic delta, and end-state. The TCK is not\n  the regression guard — the parity test is.\n- Run `:jcache:test` **and** `:jcache:tckTest` (per `.claude/rules/jcache-adapter.md`;\n  the TCK encodes interpretations unit tests miss).\n- Update `.claude/docs/jsr107-conformance.md`'s catalogue and ecosystem matrix so\n  the next run does not re-litigate it.\n\nFor a COVERAGE-tier clause that is correct but **untested**, record it as a coverage\ngap (which test to add), not a bug.\n\n## Output\n\nThe orchestrator (not the sub-auditors) writes\n`.local/audits/<model>/audit-jcache-conformance.md` — the consolidated adjudication\nacross the group-suffixed reports — using the standard\n`.claude/docs/finding-taxonomy.md` schema (severity / category / confidence /\nclassification).\n\nLead with the **spec-surface coverage matrix**: every domain A–N → depth → verdict\n(conformant / divergence / coverage-gap) → the witness or the pinning-test citation.\nA clean run must show *every domain was reached*, so \"clean\" means the full 1.1.1\nsurface was walked — not just the recent-bug corners.\n\nThen, for each finding: the spec citation (by section name), the RI behavior, the\necosystem tally, the Caffeine internal-parity result, the witness (operation →\ndivergent observable), and the resolution direction with its justification. A\nfinding with no spec/RI/ecosystem backing for its *direction* is not ready — record\nit as escalated, not as a fix.\n\n<!-- File: .claude/skills/audit-jdk-seam/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# audit-jdk-seam\n\nPath: `.claude/skills/audit-jdk-seam/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jdk-seam/SKILL.md)\n\n<!-- File: .claude/skills/audit-jmm/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# audit-jmm\n\nPath: `.claude/skills/audit-jmm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-jmm/SKILL.md)\n\n<!-- File: .claude/skills/audit-lifecycle/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# audit-lifecycle\n\nPath: `.claude/skills/audit-lifecycle/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-lifecycle/SKILL.md)\n\n<!-- File: .claude/skills/audit-linearizability/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# audit-linearizability\n\nPath: `.claude/skills/audit-linearizability/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-linearizability/SKILL.md)\n\n<!-- File: .claude/skills/audit-liveness/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# audit-liveness\n\nPath: `.claude/skills/audit-liveness/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/ben-manes/caffeine/HEAD/.claude/skills/audit-liveness/SKILL.md)\n\n<!-- ... +125 more modular skills available via /api/skills/ben-manes/caffeine?path={path} -->\n</yakaai_skills>"}