Repository navigation
Conversation
Move the exact Sol profile to 60/75/90 percent while retaining its 300k/400k/500k absolute gates, synchronize documentation, and strengthen boundary coverage. Co-Authored-By: Claude <noreply@anthropic.com>
…is hardening, observed-provider re-pins Editorial (README step 8b, all prose user-ratified in-session): - viewer_template.html: hero bottom line, T1/T2/T3/T5 rewritten for the new field (frontier six models/five creators incl. GLM 5.3; open-weights top tier; Qwen 27B fully-local viability); fillTakeaways span/setter contract updated in lockstep (27 -> 36 spans, verified both directions) - generate_results_viewer_v2.py: dev-guide span inventory 27 -> 36 - CHANGELOG.md: 2026-08-21 Models + Pricing entries Process fixes (README): - step 8: changelog entry required BEFORE regeneration - step 8b: standing tier/frontier-membership recalculation check - model matrix 39 -> 41 (9 anthropic / 29 openrouter / 3 chatgpt) Cost-basis hardening (scoping verified NO contamination today): - reconcile_openrouter_costs.py: timed-out runs structurally barred from attribution candidacy (verified numeric no-op: 0 field diffs / 25 models) - README: documented the positively-identified clean-set covered-run basis Re-pins to observed serving providers (user-approved): - qwen-38-27b: venice/fp8 -> alibaba (84.9% of billed cost); rates 0.45/3.20 -> 0.575/3.45 + cached_input 0.115; battery $29.19 -> $36.46 - qwen-38-24t-a95b: modal/nvfp4 -> siliconflow/fp8 (57.3% cost, 86% tokens); identical rates, no cost change - test_chatgpt_route.py: new keys registered; counts 39/27 -> 41/29 (27/27 OK) Scratch (kept as reusable patterns / acceptance evidence): rep-count verification, cost-attribution scoping probes, reconciler-guard no-op diff, re-pin surface verification. Frontier/T1 membership verified unchanged post-re-pin (daafbench_2026-08-21e). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011LFPvTV3rBJjFqMxhzS7tG
…k subscription cap, docs, DAAFBench Shim (v1.3.19): add openai/gpt-6-astra to the model listing; model-aware clamp rewriting reasoning effort "none" -> "low" for the Astra family (Astra rejects "none"; OpenAI primary docs 2026-09-05). All other models unchanged. Offline tests (8) drive the real shim; start_shim.bats gains an auth.json preflight regression guard for the Codex CLI 0.144.1 -> 0.153.2 upgrade. Context accounting: register gpt-6-astra / gpt-6-astra[1m] (bare or provider-prefixed) at the 1,050,000-token flagship window with Sol-parity quality thresholds (60/75/90% + 300k/400k/500k) in context-bar.sh; replace the stale ChatGPT-subscription-lane cap 370,000 with 919,000, measured 2026-09-05 on Codex CLI 0.153.2 / shim v1.3.19 (gpt-6-astra accept 919,053 / reject 922,552; gpt-5.6-sol accept 910,827 / reject 921,973). route_detection recognizes Astra and enforces the 919k lane ceiling. probe_context_ceiling gains a calibration-ratio guard against bogus backend token counts and new default brackets. Docs and config: orchestrator mode references, deploy-smoke criteria (T0.4 CLAUDE_CODE_MAX_CONTEXT_TOKENS=919000), integration checklist, env settings example (both subscription and API routes), README, CONTRIBUTING, understanding guide, CHANGELOG Unreleased entry. DAAFBench: Astra rows for the OpenRouter and ChatGPT-subscription routes; Sol/Terra/Luna subscription ceilings corrected to 919k; openrouter-astra deploy-smoke profile. Companion commit (owned by the concurrent Claude Code 2.1.261 session): Dockerfile CODEX_VERSION=0.153.2, the protected context-reporter.sh hook, subagent-bar.sh, CLAUDE.md / CONTEXT_THRESHOLDS_REFERENCE.md / BOUNDARIES.md threshold tables, user_reference 01 + 07, and the shared bats suites, which also carry that session's Opus 5 / Fable 5.1 changes. daaf_lib.bats expects CODEX_VERSION=0.153.2 accordingly. Upgrade note: ChatGPT-subscription-lane users should set CLAUDE_CODE_MAX_CONTEXT_TOKENS=919000 (was 370000) and recreate the container. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016oFpcPRmDPfbjosktSsYhK
…tings hardening, hook coverage Companion to the GPT-6 Astra commit; completes it by landing the shared surfaces (context-reporter.sh, CONTEXT_THRESHOLDS_REFERENCE.md, Dockerfile). - Dockerfile: ARG CLAUDE_CODE_VERSION 2.1.202 -> 2.1.261 (Fable 5.1 added 2.1.257, [1m]->200K window bug fixed 2.1.260); provenance cites the 2.1.203-212 and 2.1.213-261 delta reviews; rollback target 2.1.202. Carries CODEX_VERSION 0.153.2. - settings.json: env CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH=1 (upstream default is depth 3 since 2.1.219); skillListingBudgetFraction 0.1 (guardrail — truncation only warns past 10% of window); remove 8 inert Write(...) deny rules — on >=2.1.261 only Edit(path) rules are evaluated and cover all file-editing tools (live-verified: Write to /tmp denied via Edit(//tmp/**)). - context-reporter.sh + subagent-bar.sh: register Opus 5 (bare and [1m]) in the 1M physical-window glob per observed /model+/context matrix; quality profile stays conservative-default. Hook also carries the Astra 919k subscription-lane cap. - Docs: CONTEXT_THRESHOLDS_REFERENCE (Opus 5 physical/profile note + Astra cap), CLAUDE.md/BOUNDARIES (Edit-only deny semantics), skill-authoring + data-source template (skillListingMaxDescChars / skillListingBudgetFraction — the community name maxSkillDescriptionChars does not exist), user_reference 01/07 currency. - Tests: enforce_model_ceiling.bats +3 frontmatter-parse cases (mutation-verified); subagent_bar.bats +5, context_reporter.bats +5 (Opus 5 / Fable 5.1 windows); settings_permissions.bats asserts Edit coverage + Write absence. Post-rebuild verification on 2.1.261: safety-hook battery 145/145, full bats green, deploy-smoke Tiers 0/1/2/D PASS, /doctor skill listing green. Session: research/2026-09-05_FrameworkDev_ClaudeCode_Upgrade_2.1.261/ Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018dh9Tij7CMpkbNryoFrGwj
…xplore-model Both hooks serialized their deny decision through `jq -n`, so a missing jq silently allowed. Pre-check jq and fall back to stderr + exit 2 (block-webfetch: unconditional; enforce-explore-model: builtin match on subagent_type "Explore"). ERR traps no longer route through jq. Header docs updated; explore-model description corrected (denies on Explore alone). Tests: block_webfetch 6->10, enforce_explore_model 9->16, jq-absence simulation asserted real. agent-authoring hook convention generalized. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018dh9Tij7CMpkbNryoFrGwj
…ents dir overridable Repairs the two "CI - Scripts" job failures on 1361b56. - Provider Shim Unit Tests: three tests still pinned SHIM_VERSION 1.3.18 (health["version"] in test_historical_regressions and test_reasoning_formatting; the "shim v1.3.18 starting" startup record in test_stream_hardening). The GPT-6 Astra commit bumped the shim to 1.3.19 without updating them. Literals updated to 1.3.19 (kept literal by design). - BATS Tests: enforce_model_ceiling.bats reached its agent fixture by `..`-traversing out of the hardcoded /daaf/.claude/agents. The kernel resolves the missing /daaf prefix before applying `..`, so `[ -f ]` failed on CI runners (no /daaf), the hook saw no agent file, and the two over-tier DENY tests allowed instead. The hook now honors DAAF_ENFORCE_MODEL_CEILING_AGENTS_DIR (default unchanged; follows the DAAF_<SCRIPT>_<PURPOSE> convention of context-reporter.sh), and the tests point it at TEST_DIR on the run line. Verified: full bats tests/bash/ 1294/1294 green; the three shim modules (117 tests) green under the CI discover invocation; shellcheck clean. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JmxAYejYFd37dXuRv3R8hw
…ssion cache exists context-reporter.sh and subagent-bar.sh derived the context window from the /tmp cache written by the main statusline. When that cache was absent (first prompt, headless dispatch, statusline not yet rendered) both fell back to the most recent cache from ANY session, then to 200k, and applied the model-keyed static window map only to subagents on a DIFFERENT model than the session. An uncached GPT-6 Astra or Opus 5 main session, and every same-model child of one, was therefore measured against 200k: a 400k Astra reading reported 100%/CRITICAL and subagents falsely throttled. Most visible on the GPT subscription route, where the true window is furthest from 200k. New precedence, identical in both scripts: 1. different-model subagent -> static map for ITS model (unchanged) 2. else this session's cache when present (authoritative) 3. else static map for the MEASURED model; unknown/empty -> 200k The any-session cache inheritance is removed. CLAUDE_CODE_MAX_CONTEXT_TOKENS, the 919k ChatGPT-lane cap, and every quality-tier threshold are untouched. The static map is factored into static_window_for_model() in each script (same arms as before) and shared by both branches. Tests: context_reporter.bats +5 (uncached main Astra/Opus 5, unrelated cache ignored, uncached same-model child, cache stays authoritative); 4 fail against the pre-fix hook. subagent_bar.bats +5 on the DAAF_SUBAGENT_BAR_CACHE_DIR seam so live /tmp caches cannot mask the "no cache" condition, plus a tightened fallback test; 5 fail against the pre-fix script. Full bats tests/bash/ green (1304), shellcheck clean on both scripts. Hook installed by the user via the hooks-are-user-only workflow; live file verified byte-identical to the draft. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JmxAYejYFd37dXuRv3R8hw
Prefer the child's latest valid input usage over stale output-only task progress for Astra and registered GPT-5.6 models, including Terra and Luna. Show context pending until measured usage is available while preserving existing windows, thresholds, and unrelated routes. Add regression coverage for model variants, input partitions, malformed records, startup identity, and child isolation. All 83 renderer tests pass; Astra and Sol running-agent bars were visually confirmed by the user. Co-Authored-By: Claude Code <noreply@anthropic.com>
Extend transcript-first child input accounting to both supported shim backend modes while preserving the subscription-only 919k cap, model windows, quality profiles, and unrelated routes. Cover both-mode renderer behavior and late streaming usage through the real shim with loopback fixtures. All 84 renderer tests and 8 prompt-cache tests pass; the previous commit reproduces the API display regression. Co-Authored-By: Claude Code <noreply@anthropic.com>
Repairs the disclosure gaps reproduced on 2026-09-05 (review synthesis S01): numeric means, missingness rates, and sparse-numeric blocks could reveal counts below the support threshold that categorical suppression already hid, while every embedded validation check still passed. Policy (user-clarified): minimum support counts usable contributing observations (default 5), not distinct values. Supported constants, large-sample missingness rates, and large-sample binary means remain reportable. Version 2.0 reports distinguish withheld / constant / reduced / full numeric summaries and make relationship support explicit. - Python and R profiler templates: support gates on every emitted summary; validation inspects the serialized candidate report; reject optimized Python (-O/-OO) so assertions cannot be disabled; refuse >=2^53 magnitudes; reserved __OTHER__ collision handling; R factor-level fixes. - Skill, disclosure-tier, generation-pattern, profiling-spec, and validation-check references aligned to the 2.0 contract; synthetic onboarding workflow reference updated. - Adds scripts/check_profile_templates.py, a runtime regression CLI for the standalone T1-T3 profilers (fabricated data only). Verification (2026-09-11): 122/122 full regression, 41/41 reviewer edge cases, 50/50 report-only intake checks; three independent review angles closed with no material finding. Evidence retained in research/2026-09-10_FrameworkDev_PrivacySupport/ (git-excluded). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017prMNKewbJgXVwjZoBxLfL
run_with_capture.sh reported SUCCESS and "Execution log appended" whenever the script exited 0, even when the tee capture failed (truncated archived stdout) or the append failed (no execution log at all). Reproduced on 2026-09-05 (review synthesis S02) against the same source bytes. The wrapper now tracks three outcomes separately: - computation: the script's exit code - capture: tee status into a project-local buffer (.<script>.capture.XXXXXX next to the script, never /tmp); recorded as "# Capture: COMPLETE" or "INCOMPLETE (tee exit N)" in the log - persistence: the append is checked, then verified on disk (exactly one marker, closing banner last, exit-code line present) SUCCESS prints only when all three hold. Otherwise an EVIDENCE INCOMPLETE banner names the failed outcome, the buffer is retained as evidence, and the wrapper exits 74. SIGINT/SIGTERM append no log, retain the buffer, exit 130/143 (the banner says if an unverified log was already appended). Concurrent duplicate runs are detected post-append by marker count, not locked. Captured output reading exactly "EXECUTION LOG" is archived as "# EXECUTION LOG" so script output can never forge a marker (this also broke the re-run guard under the old wrapper). Empty output is archived as "# (no output)"; NUL bytes are disclosed in the Capture line. A missing argument prints usage instead of an unbound-variable error; errors go to stderr. Contract docs updated: SCRIPT_EXECUTION_REFERENCE.md (new "Evidence Persistence Verification"), ERROR_RECOVERY.md (new "Execution Wrapper Evidence Outcomes"), BOUNDARIES.md, CLAUDE.md, VALIDATION_CHECKPOINTS.md, research-executor and data-ingest agent protocols, and the Reproducibility Verification ASSESS step. CHANGELOG Unreleased entry added. Tests: tests/bash/run_with_capture.bats 12 -> 27 cases (tee/append/ duplicate-marker/unwritable-dir/SIGTERM/SIGINT/forged-marker/NUL fault injection). Verified: 27/27; consumer suites (create_script_revision, compare_execution_logs, audit_reproduction_paths, RV python/R) 88/88; shellcheck clean; three-angle review plus bounded recheck closed all findings. Evidence in research/2026-09-11_FrameworkDev_CaptureIntegrity/ (git-excluded). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017prMNKewbJgXVwjZoBxLfL
Repairs the S03 finding from the 2026-09-05 review synthesis: the copyable validation and QA templates (VALIDATION_CHECKPOINTS.md CP1-CP4, Join, Substantiveness, CPP1-CPP4, CPP-SKILL; QA_CHECKPOINTS.md QA1-QA4b, QAP1-QAP4; Python and R) could report PASS when the evidence for the claim was absent. Every check now emits one of [PASS] (with its numbers), [WARNING], [FAIL]/[BLOCKER], [NOT VERIFIED], [SKIPPED] (declared not applicable, with a reason), or [INFO]; a count line precedes a derived verdict; a checkpoint with unverified checks cannot read PASSED. CP4 is re-scoped to Stage 8 (CP4.1-CP4.4) with the former report/plan items re-homed as Pre-Output Verification (Stage 12). Cross-file surfaces (agents, workflow references, STATE/Plan templates, notebook skills, user references) are aligned to the new vocabulary. Also folds in the two S02 carry-overs: SCRIPT_EXECUTION_REFERENCE.md template placeholder stubs replaced with prose (they matched the wrapper's re-run guard), and the deploy-smoke T2.2 evaluator now anchors on the wrapper's banner frame and requires Capture: COMPLETE. Regression: tests/python/test_checkpoint_templates.py extracts and executes the templates from the live reference files (147 tests across tests/python, all OK). The tests/python CI job's discover pattern is widened to test_*.py so the suite runs in CI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018rUsUuVX1qhUmvPD8wnCet
…k calls Publishes the Typesafe AI (Jev) typed-judgment skill, previously kept local-only, updated from the arXiv classifier project (2026-09): - probabilities are rounded to 2 dp; prob-sum asserts use a 0.02 / 0.005*n_options tolerance instead of 1e-6 (4 call sites) - choice != argmax on 0.04-0.16% of rows; argmax assert downgraded to a report, persist both fields - x-typesafe-request-id absent on an observed 503; all reads guarded - 429s are token-rate not request-rate driven; size concurrency by tokens/sec and persist a per-row retry flag - alias resolution (jev-latest -> jev-1.13.0) and the GET /v1/models envelope confirmed against live responses Adds api-reference.md s14 (observed behaviour, with sample sizes) and design-patterns.md s10 (prompt invariance, batching trade-offs, selective-prediction and metric limitations). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…undle _c bash-safety.sh: the harmonized hook. It shares one body with the Claude Code Starter Kit, and every site-specific value lives in one SITE CONFIG block. - Stage-0 classifier for quoted spans and heredocs, with opt-in excision that applies only when the receiver is a data consumer. - One shared pipe-receiver vocabulary. - Guards for the $(curl ...) download-and-execute family. - The root, home and working-directory variables are recognised in quoted and braced forms. - Wrapper flags that take an argument no longer hide the command. - Stdin must be exactly one JSON object. - Documented residuals, including a non-string tool_name. - Suites: battery 749, bats 664. Timing fixtures move to tests/fixtures/bash_safety/. enforce-single-command.sh: comment-aware and heredoc-safe. Shell-carrier bodies (bash -c, sh -c, eval, source) are scanned. A lone background & is a separator. It gains the same one-object stdin gate. Residuals R1, R2, R6 and R7 are pinned. Suites: bats 98, battery 122. Hook-maintenance bundle, revision _c: output-scanner, audit-log, deny-claude-code-guide, enforce-file-first, block-nested-dispatch and enforce-explore-model. - Concatenated-JSON stdin can no longer smuggle a blocked call. - output-scanner scans object-shaped tool responses (tostring), warns by variable NAME when a credential value appears, and guards against an inherited xtrace. - audit-log redacts by pattern and by value, caps every target before the regex step, and keeps the record through a fallback path. - Six suites: 243 cases. Docs: BOUNDARIES hook rows and new rows for deny-claude-code-guide and enforce-explore-model. shell-scripting testing.md and bash-standards.md. All suites were verified against the installed hooks on 2026-09-27. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…v-disclosure deny rules run_with_capture.sh gains a pre-execution scan for environment-secret prints. It has the same outcome as the package-install scan: exit 3, no log appended, and the script stays editable in place. It flags: - whole-environment dumps: os.environ printed or serialized, or R Sys.getenv() with no name; - os.environ.items()/.values() with an output sink on the same line or as a for-loop header (env-scrubbing comprehensions are allowed); - credential-named lookups inside print/log sinks, matched against the shared SECRET-NAME-VOCAB v1 list; - R bare top-level credential lookups, which auto-print; - shell-outs that dump the environment. The refusal names the line number and category, never the line text. Both scans now read the file as text (grep -a), so a NUL byte cannot disable them. run_with_capture.bats: 43 cases. settings.json: five user-approved Bash deny rules for shell commands that print environment values. They are pinned as exact strings in settings_permissions.bats. CLAUDE.md (Credential & Secret Protection): scripts must never print environment or credential values. SCRIPT_EXECUTION_REFERENCE gains an "Environment-Secret Print Scan" section. ERROR_RECOVERY gains a recovery row for the new exit-3 case. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ss args; treat unreadable exit codes as unknown Windows `docker cp` extraction aborts at the first named pipe or device node in the tar stream (moby/go-archive's Windows FIFO handler is a no-op, then chtimes fails on the missing path and Unpack returns), silently dropping every later file while the CLI still prints "Successfully copied". Stale provider-shim output.fifo files triggered this in the field. Backup (backup_daaf.sh / .ps1): - Staging now also deletes FIFOs, sockets, and device nodes (byte-identical, quote-free program in both twins); the scan reports a 5th-line count and a one-line Note. - .ps1 caches the copy process Handle and treats an unreadable ExitCode as UNKNOWN (never success); a nonzero copy exit with a full file count now latches the WITH WARNINGS banner in both twins. Host PowerShell (daaf.ps1, daaf_lib.ps1, backup_daaf.ps1, test_migration.ps1): - New ConvertTo-DaafNativeArg (canonical in daaf_lib.ps1, byte-identical inline copies) replaces every array-form Start-Process -ArgumentList, which split install/backup paths containing spaces (Control Panel child hand-offs and backups broke under e.g. "C:\Users\John Smith"). - Control Panel delegates cache .Handle and report an unreadable child exit status distinctly instead of as a clean return. Skill + tests: - shell-scripting gotchas/standards: Start-Process array joining, null ExitCode (WinPS 5.1 and pwsh 6.0-7.4.0 on Windows), Windows docker cp FIFO abort; corrected the $LASTEXITCODE "GOOD" example. - New tests/powershell/native_arg_quoting.Tests.ps1 (helper round-trip, inline parity, AST guards pinning the Start-Process inventory); extended backup and daaf Pester/bats suites. Pester 773/773, bats 1..189 ok. Windows runtime behavior is inferred from upstream sources; not yet run on a Windows host. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ol/Luna and flagship -pro; re-price GPT models Context monitoring: normalize provider-dotted Claude IDs (anthropic/claude-opus-5.5) for classification in context-reporter.sh (user-applied patch) and subagent-bar.sh; register gpt-6-sol, gpt-6-luna and flagship -pro slugs by 2026-09-29 user policy decision (not validation); context-bar.sh strips a '#<effort>' suffix from .model.id before caching/classification, which also keeps the hook's unchanged-transcript cache path on the right profile. CLAUDE.md tier table, CONTEXT_THRESHOLDS_REFERENCE.md, BOUNDARIES.md and mode references updated. Deploy smoke: route_detection.py maps GPT-6 Sol/Luna and flagship -pro via a grammar byte-identical to the Bash consumers, so T0.4 enforces the 919k ChatGPT-lane cap for them; messages distinguish measured vs policy-applied caps. DAAFBench: count the opus-55 registry entry (44/10); re-price GPT-5.6 OpenRouter entries from the 2026-09-29 catalogue and ChatGPT-lane Sol from OpenAI's promotional list price; compute_accounting() now prices each ChatGPT-lane model at its own api_equivalent_pricing and fails safe (unavailable_api_equivalent_pricing) instead of using Luna rates for every model. Viewer headline costs were never affected. Docs: install-guide price table re-priced; GPT recommendation is now Sol (strong) + Luna (fast) with gpt-6-sol/gpt-6-luna examples, Astra premium, Terra no longer recommended; -pro retest findings. CHANGELOG and benchmarks/CHANGELOG entries. Tests: context_reporter 96->117, subagent_bar 94->115, context_bar 91->102, test_deploy_smoke 146->147, deploy_smoke.bats inner tables 40/22, test_subscription_accounting +11 methods. Session record: research/2026-09-29_FrameworkDev_OpenRouterDottedModelNames/SESSION_NOTES.md Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…5.1 long paths)
Windows PowerShell 5.1 Get-ChildItem -Recurse silently skips directories past
the 248-char limit, so a complete backup was under-counted (73,021 files on
disk vs 72,834 reported) and the 1% tolerance hid the gap.
- Backup twins: staging prints the frozen snapshot's counts; the finished
backup is counted container-side (bind mount, sentinel + *_COUNT_ERRORS
markers) and verified at zero tolerance; PowerShell/host fallback reports a
lower bound (N+) and latches WITH WARNINGS; 0 countable files exits 1
("could not be verified"); prints the source volume name; long-path notice.
- Restore twins: same count program; macOS/Linux refuses before erasing when
the backup folder, a subfolder or a file is unreadable; post-restore count
markers parsed on any exit; restore now ends "Restore completed WITH
WARNINGS" after any success-path warning. Exit codes unchanged for callers.
- Shared helpers pinned byte-identical by backup_twin_parity.bats.
- Tests: bats and Pester coverage for every new path (174 bats in the three
suites; Pester 136 backup + 72 restore).
- Docs: shell-scripting gotchas/powershell-standards (item 18)/testing (TMPDIR),
quickstart, technical FAQ, CHANGELOG (Unreleased).
Not yet run on Windows PS 5.1 / Docker Desktop / macOS; next real backup is
the field test.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…safe staging; workspace Invariant 3
Field failure (Windows, Docker 29.1.3): docker cp aborted extraction at a
file named name<LF>nl and dropped every later entry (72,386 of 73,785);
the zero-tolerance check caught it and failed the run.
- Staging program (byte-identical twins) gains a DAAF_STAGE_NAMES step:
win (backup_daaf.ps1 only) removes names Windows cannot create (control
chars, < > : " | ? * \, trailing dot/space, reserved device names incl.
extensions and COM/LPT superscripts) and all but the first (C byte order)
of each file-involving case clash; folder pairs are listed; casewarn
(backup_daaf.sh on macOS) lists case clashes only; Linux unchanged.
Inserted before the symlink manifest; offender lines and
STAGED_STRIPPED_* print before the final markers (no spoofing).
- WARNING + WITH WARNINGS latch, exit 0; reports print before fatal exits;
the Snapshot line credits left-out files instead of live drift; warning
when the name list cannot be read; progress counts like the snapshot.
- busybox find never flushes a batched -exec ... {} + inside \( \):
case listing uses top-level -o groups; parity guard scans every
scripts/host busybox program.
- check_workspace_invariants.sh Invariant 3 flags these names and sibling
case clashes outside .git; --names-only mode for other folders (the
backup hints use it for the Claude Code state volume).
- Docs: shell-scripting gotchas (incl. busybox pitfall), bash-standards and
testing hygiene for hostile-name fixtures, CLAUDE.md self-cleaning
probes, FAQ, quickstart, CHANGELOG, smoke T0.10 wording.
- Tests: backup bats 78->100, parity 30->32, invariants 12->31, backup
Pester 136->158; mutation-checked.
Field-validated on the Windows host: busybox probe output identical to
expected; backup with the fixture finished WITH WARNINGS naming exactly the
2 left-out names (73,847 + 2 = 73,849 scanned); without it, plain
"Backup complete!" with an exact count.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…acing data (copy-then-swap)
Restore no longer erases the live Docker volume before the backup is
copied. Both twins now copy the backup into a labelled temporary volume,
run the strip/chown/permission/symlink steps there, verify it exactly
against the backup count, and only then ask for RESTORE. The live volume
is replaced in one interrupt-proof busybox container (--sig-proxy=false,
trap : INT TERM HUP, marker guard `|| exit 3`), verified by a metadata
comparison and an exact post-swap count; the temporary copy is removed
only after success and kept (with recovery steps) on any swap failure.
- per-run identity label checked after create, before the marker write
and before each swap (docker volume create reuses, docker run -v
re-creates volumes by name); exact-name leftover detection with a
plain-language y/n prompt; in-Docker free-space check
- Claude Code state volume gets the same pattern; preparation failures
stop before any change ("Your DAAF data has not been changed.")
- only swap exit 3 means "nothing replaced"; Docker 125 takes the
after-swap path; docker values read from stdout only
- .ps1 exits 130 after Ctrl+C inside its try when run from the Control
Panel (DAAF_NESTED); startup docker ps failure refuses in both twins
- tests: restore bats 66->143, parity 32->57, Pester It 72->179; the
in-container fallback assert_failure now checks the expected status
- docs: FAQ, quickstart, CHANGELOG, four shell-scripting gotchas
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…untu snapshot, digest pins) Top-level `==` pins did not make rebuilds reproducible: uv re-resolved the ~107 transitive Python dependencies against live PyPI on every build (13 of 164 packages, incl. numba/llvmlite, drifted within 7 days), and every apt package and the base image floated as well. R was already frozen via the P3M snapshot. Dockerfile: - Base image pinned by multi-arch index digest via ARG UBUNTU_BASE_IMAGE (= ubuntu:noble-20260911); uv COPY pinned by digest. - UV_EXCLUDE_NEWER=2026-09-24T13:20:00Z (ARG + ENV) freezes the full Python set, including isolated build deps (fiona sdist on arm64). - New snapshot layer rewrites apt sources to direct snapshot URIs (https://snapshot.ubuntu.com/ubuntu/20260924T132000Z/), bootstraps ca-certificates with peer verification disabled for that host on two commands only (integrity rests on the GPG-signed InRelease), and writes /etc/daaf/ubuntu-snapshot. Empty UBUNTU_SNAPSHOT = documented escape hatch. - New daaf-apt-update helper (BuildKit heredoc) replaces every bare `apt-get update`: --error-on=any plus an `apt-get indextargets` origin guard that fails the build on any non-snapshot or shadowed index. - ENVIRONMENT DATE banner documents inputs, bump rule (base dated tag on or before the snapshot), retention, exceptions, and arm64 status. Docs: new "How DAAF Freezes the Environment" section with a bump procedure (04_extending_daaf.md); README, quickstart, and FAQ corrected; Reproducibility Verification mode and its report template now record the environment-date inputs and treat a frozen original's full Python set as established (with yank/deletion and architecture caveats). Framework Development mode's Ask First Dockerfile bullet names date bumps. New bats regression test; migration-test comments updated. Verified: sandboxed apt (amd64 + arm64 index resolution, guard negative cases), shellcheck, bats daaf_lib 33/33, and a real amd64 rebuild whose Python set (164/164), R set (289/289), and spot-checked system packages are identical to the pre-change image. Full arm64 image build still pending. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…og bundle _d redaction gaps Track B — bash-safety.sh (installed revision _d, comment-only over _c): - New §10 ENV_DISCLOSURE_GUARD, accidental-dump posture mirroring the run_with_capture.sh scan: whole-environment dumps reaching a terminal or file (a pipe is not a sink); echo/printf/declare -p/typeset -p/printenv of an uppercase credential-named variable (last `_` segment KEY APIKEY TOKEN SECRET PASSWORD PASSWD PASSPHRASE CREDENTIAL CREDS DSN PAT); /proc/<pid>/ environ reads; interpreter one-liners printing a whole-env object. Every refusal names the category and a safe alternative, never the matched text. - Additive stage-0 accumulator keeps credential expansions visible inside excised data spans; §1-§9 classification unchanged (0 BLOCK→ALLOW over 789 battery + 704 bats rows and three replay corpora: 707 doc code-block lines, 1,692 red-team rows, 5,732 recorded session commands; 4 accepted data-token false positives documented in the header). - Suites: FC241-FC280 mirrored 1:1 (battery 749→789, bats 664→704); shared helper tests/bash/helpers/fake_shapes.bash gains fake_env10_name / fake_env10_cmd (run-time builders, no credential literals). - Installers apply_bash_safety_c.sh / _d.sh (sha-drift refusal, dry-run, rollback, content-addressed backups). Track A — audit-log.sh (bundle _d, installed 2026-10-02): - Closes the inline-literal redaction gaps: hyphenated API-key headers, segment-bounded PASS/PASSPHRASE keys, credential long flags, URL userinfo passwords, curl --user/-u (incl. line continuation); numeric values on token-named keys kept as counters (F4). audit_log.bats 68→91. Docs: BOUNDARIES.md (bash-safety and deny-rules rows), ERROR_RECOVERY.md (§10 recovery row), SCRIPT_EXECUTION_REFERENCE.md cross-ref, shell-scripting testing.md (counts, starter-kit baseline 789/777/12, helper paragraph), CLAUDE.md § Credential & Secret Protection (one sentence, user-approved). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…onment_settings.txt without a rebuild) docker-compose.yml injects environment_settings.txt through a service-level env_file, which Compose applies only when it CREATES the container, so an edit needs `docker compose down` + relaunch -- a step non-technical users avoid and that, on a multi-instance install without .env, targets the wrong project. Control Panel (daaf.sh / daaf.ps1, behavior-identical): - New option 11 "Restart Container", directly after Rebuild; Stop Web Services moves from 11 to 12. Implemented inline (no new host script): it must refresh the panel's own settings and port display afterwards. - Flow: confirm (y/yes any case, default No) -> read the edited file and refuse a project-name change made in it -> snapshot panel settings -> `docker compose down` (never -v) -> reload settings -> re-check the project name (file edited or deleted during down leaves the container stopped, no `up`) -> refresh the port display -> `up -d` -> 30x2s readiness poll -> verify /daaf/CLAUDE.md. - Any failure prints guidance, restores the pre-restart settings and returns to the menu, so a retry targets the same install. "rebuild required" settings (DAAF_DEV, first-time provider shim) and Dockerfile/package/compose changes are pointed to Rebuild Container. - daaf.sh keeps its display ports in PANEL_PORT_* (set_panel_ports), mirroring daaf.ps1's Initialize-DaafPortDisplay, so a defaulted port never masks a file value on reload. Both panels print a friendly error for an unreadable settings file at startup (daaf.ps1 pauses before closing when not nested). Settings reload (daaf_lib.sh / daaf_lib.ps1): - The loaders record which whitelisted DAAF_* keys they adopted FROM THE FILE; new reload_daaf_settings / Sync-DaafSettingsFile drop exactly those and reload, so edits take effect while user-exported values keep winning -- the loader whitelist stays the single key list. - load_daaf_settings now returns non-zero on an existing but unreadable file (it returned 0 when called in a condition). It tests the open silently with `true` (not `:`, which exits the shell in POSIX mode), so other loader errors stay visible. Import-DaafSettingsFile reads with -ErrorAction Stop. - view_quarto.sh, view_notebooks.sh, view_logs.sh and run_vscode.sh test the loader's result and print the same friendly message. Docs: the install guide, technical FAQ, environment_settings_example.txt, README.txt, the Data Onboarding mode's API-key guidance and run_daaf's "settings modified" note offer Restart Container first, manual commands as the alternative. Corrects the GPT Fast step (CLAUDE_CODE_DISABLE_FAST_MODE needs a recreate, not a rebuild), the "read on every start" claims (applied at container creation), and a daaf_lib.sh comment on DAAF_DATA_VOLUME_NAME. CHANGELOG Unreleased entry added. Tests: daaf.bats 72->104, daaf_lib.bats 33->45, daaf.Tests.ps1 69->112, daaf_lib.Tests.ps1 4->6, plus one unreadable-settings case in each of the four viewer suites. Covers cancel/EOF, down-before-up and never -v, the project guard, unreadable/deleted/edited-during-down files with restore and retry, keys added during down, host-port URLs, timeout/verify failures, POSIX mode, and dry runs that write nothing. Mutation checks: 57 of 59 caught across review rounds; both survivors now have covering tests. Not exercised here: real Docker, Windows PowerShell 5.1, macOS Bash 3.2. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… smoke steps Both daaf.sh Control Panel smoke steps (macOS /bin/bash 3.2 in smoke-tests; the bash:3.2 container in bats-bash32) previously fed only `q`, so the new option 11 never ran under Bash 3.2 -- the bats suites run on ubuntu's Bash 5. They now feed `11 / " No " / 11 / " YES " / q` under DAAF_DRY_RUN=1: a declined restart (exercises the answer trim and lowercasing) and a confirmed one (a full dry-run restart: settings snapshot/restore arrays, reload, set_panel_ports, readiness poll). Each step asserts "Restart cancelled", "[DRY-RUN] docker compose down", "Container restarted" and "Goodbye!", and fails on "compose down -v" or the panel's ERR-trap "unexpected failure". Asserted strings were taken from a local dry-run rehearsal (Bash 5); the YAML was parse-checked. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ep Docker's error text on PS 5.1 Windows field test of the copy-then-swap restore (2026-10-05) found three defects; data safety held throughout (live volumes provably untouched). - D1: a never-started (Created) container holding a temp volume no longer blocks its removal. Holders are listed with `docker ps -a --filter volume=<temp>`; stopped or never-started ones are removed with a plain `docker rm`; a running/unknown holder or a failed list refuses with nothing removed (all leftovers are checked before any removal). - D2: Windows PowerShell 5.1 keeps Docker's stderr (Continue brackets instead of SilentlyContinue); failures show a "Docker said:" line (docker cp prefers the "denied" / "Can't add file" line). - D3: Ctrl+C during the Claude Code swap names the Claude Code state, not the DAAF data. - Leftover swap containers are removed without -f; a vanished one counts as removed. - Docs: FAQ "in use" item and Control Panel Ctrl+C note, CHANGELOG, 4 shell-scripting gotchas. - Tests: restore bats 143->159, parity 57->67, Pester It 179->207. Field-tested on Windows 11 / Windows PowerShell 5.1 / Docker 29.1.3 (2026-10-05; re-check of all fixes 2026-10-06 passed). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ai project-free Add data-scientist/references/text-annotation-measurement.md, a vendor-neutral methodology reference for turning open-ended text into analysis variables with LLMs, typed-judgment APIs, or trained classifiers: annotation as measurement, human-coded validation sets, agreement metrics (alpha vs. kappa), LLM-specific checks, misclassification-bias direction, DSL/PPI corrections, calibration, reproducibility with hosted models, data governance (FERPA/HIPAA/IRB; confirm before any third-party API call), and a GUIDE-LLM-aligned reporting checklist. 72 references, each verified or labelled as preprint/working paper/web guidance, then adversarially reviewed for citation fidelity; no vendor or study performance figures. Wire it in: data-scientist SKILL.md routing branch for coding free text (trained classifier or typesafe-ai as options, with the governance gate), a pointer under "Text data", a Reference File Structure row and Topic Index rows. supervised-ml.md gains a no-training-annotator paragraph. exploratory-unsupervised.md scopes the "always attenuation" claim to the Lanza et al. setting (citing TeBlunthuis et al. 2024; van Smeden et al. 2020) and adds a classify-analyze bridge for model-produced labels. Language Routing table unchanged. typesafe-ai: remove project-specific findings from the skill and references; add "Things to verify on your own calls" (api-reference) and "Evaluating fit for your task" (design-patterns); describe it as an optional skill; add pointers to the new methodology reference, a data-disclosure boundary (vendor retention and training terms are undocumented: archive them, confirm with the user, never send sensitive text), and an R note (httr2 + jsonlite available). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…cks for backup and restore A compatibility audit of the backup/restore twins found that the unpinned `busybox` image now resolves to 1.38.0 (marked unstable, pushed 2026-09-23), so fresh installs would run the restore's swap on an untested busybox; and that Docker 29 cannot talk to an Engine older than 25.0. - Pin busybox:1.37.0@sha256:bdf57e52... in backup, restore and migrate (.sh/.ps1) and in docker-compose.yml daaf-init: one constant per script; a parity test checks all 7 copies - Backup and restore: startup Docker version check (refuse <25.0 / unreadable, Podman not supported; NOTE when the major version is not the tested 29); an old-Engine hint on the "not running" path - Backup and restore: check for the helper image and pull it before anything changes; refuse cleanly if the pull fails - .ps1: $PSNativeCommandUseErrorActionPreference = $false; refuse under PowerShell 7 on macOS/Linux (point to the bash twin); backup reads staging container IDs and wait status from stdout only - CI: new real-Docker job restore-failure-paths (never-started/running holders, leftover swap container, helper-image download, version check, pin consistency) on ubuntu x86 + arm64 - Docs: FAQ "Which Docker version do backup and restore need?", quickstart, CHANGELOG, 4 gotchas - Tests: bats restore 159->170, backup 100->107, parity 67->76; Pester restore 207->223, backup 158->176, migrate 84->87 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…update GUIDE-LLM citation Rewrite the Lanza, Tan & Bray (2013) passage in exploratory-unsupervised.md to what the paper supports: per-class bias in the outcome mean/proportion given class, larger with stronger effects, substantially reduced by better measurement, not reduced by larger samples; one Table 3 cell quoted exactly; unsupported range, illustration and proportionality claim removed. Soften three phrasings implying classification error always attenuates. Add the verified Glorfeld (1995) reference that was cited but missing. Update GUIDE-LLM to its published citation (Feuerriegel et al. 2026, Nature Human Behaviour 10(7):1182-1186, doi 10.1038/s41562-026-02492-7) in AI_DISCLOSURE_REFERENCE and STATE_TEMPLATE, restore the exact checklist item wording, and label API-cost disclosure as a DAAF addition. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ds the probe detail _apply_live_warning: when a recovered transient API error or a --max-turns stop downgrades a PASS, the detail opens with 'Live-run warning: …' ahead of the probe's own PASS reason, so the report's Problems-table Observed cell (the detail's first 200 characters) shows why the probe is a WARN. A probe whose own verdict is WARN, FAIL, SKIP or INFO keeps its reason first and gets the warning appended. Covers T1.1, Tier 2, TA.1, T3.1 and T3.2 (11 call sites); interpreting-results.md documents it, including the T2.7 guard-FAIL exception. Self-tests: Ran 406 OK. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lit_corpus 1.5.0-daaf: adjudications glance-sheet with both a
deliverable and --keys lists the deliverable's references, then each
named paper it does not cite, on one sheet, so one reply from the
researcher covers every reference the final will cite. The sheet says
which numbers were added by name, and the MANIFEST row records
keys_from_deliverable and keys_added. Either flag alone lists what it
did before, except that a paper named twice is listed once and a
--keys that names no key is refused (exit 11).
A final check whose card re-check differs from its record
(CARD_RECHECK_DIFFERS, e.g. a stored source file missing or changed)
is a FAIL with exit 11, not exit 10 (lit-verify-report). The mode
file, ERROR_RECOVERY and lit_verify's fix text give its recovery
outside the synthesizer revision loop: put the original file back
unchanged, or ingest the paper again and write a new card version.
Page comparisons at the round and gap check-ins are grouped by paper,
under its short reference and PDF path (mode templates, STATE
template).
The reference-check wording says each reference is looked up in a
database and checked by the researcher against its record, and calls
the glance sheet "the list to check" ("the reference list" is the
.bib): the mode file and its confirmation template in the orchestrator
SKILL.md (identical), literature-review SKILL.md,
AI_DISCLOSURE_REFERENCE, LIT_REVIEW_OUTPUT_CONTRACT,
literature-synthesizer and user_reference/02.
Other audit-08 fixes in the mode file: the rationale rule for each
reference decision, user_pdfs/ created at setup, full paths for
references into other skills, the window and image-cap rule, the
plain-language glossary rows, and no dated or future-tense notes.
literature-searcher gives the exit codes for a wrong hash (8, 10,
11). lit-corpus.md and CONTRIBUTING.md carry the new version and
counts.
Other sessions' uncommitted edits in these files stay uncommitted. In
lit-corpus.md and CONTRIBUTING.md, the version and count tokens are
taken from lines another session is also rewriting; that session's
text stays out. Nothing is deferred.
Tests (run on the exact committed tree): test_lit_corpus 70,
test_lit_verify 246, test_scholar_records 33, test_scholar_search 296,
test_scholar_openalex_gate 56, test_pdf_ingest 59,
test_web_fetch_scrub 7, test_scholar_retry_log 18,
test_deploy_smoke_probes_v2 89; selftests 90/90 and 30/30;
run_with_capture.bats 83, adjudicator_read_scope.bats 38,
settings_permissions.bats 15; the confirmation template is one
identical line in the mode file and the orchestrator SKILL.md.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lit_corpus 1.6.0-daaf: the reference-check sheet shows the database
record for a reference that does not match ("Does not match:") or whose
title was not compared ("Not compared:"), with a note per label. The
sheet itself stores nothing; keeping a non-matching reference still
goes through the researcher's recorded decision.
scholar_search 1.10.0-daaf and the scholarly-search skill state the
citation second check as it stands: built, no model has passed its
evaluation, so the researcher's reference check confirms references.
Header comments no longer cite the maintainer workspace.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Per-Agent Hooks names adjudicator-read-scope.sh (citation-adjudicator's read boundary) beside enforce-file-first.sh, and lists the agents whose frontmatter registers enforce-file-first.sh (literature-searcher, paper-reader and literature-synthesizer included). The five Bash holders that do not register it yet are named as gaps that checklist item A13 flags. agents/README.md line 13 places the four Literature Review agents. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Untrack scripts/mirror_maintenance/ (94 files: 89 logged maintainer scripts, its README and four JSON snapshots). They rebuild the Education Data Portal mirror, which only the maintainers do, and no DAAF install runs them. The files stay on the maintainer's disk, ignored through .git/info/exclude. - education-data-explorer: the 14 variable dictionaries, variable-codes.md and maintenance-live-api.md no longer cite those scripts. maintenance-live-api.md now says the generators are maintainer-side, lists the checks a regenerated dictionary must pass, and shows how to check one claim with shipped tools. - docs-triage allowlist: drop the 52 rows that exempted logged scripts in that folder, and add the rows the documentation sweep's tiers 1-5 needed. - Note for maintainers: 54_generate-variable-dictionaries_e.py writes its own path into the dictionaries; reword its two header strings at the next regeneration. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Documentation sweep, tiers 3-5: CLAUDE.md, agent_reference templates and workflow phases, the orchestrator skill and its mode files, the agent definitions, and the authoring, shell-scripting, synthetic-data-workflow and web-retrieval skills, checked against agent_reference/DOCUMENTATION_STANDARDS.md. Text states how DAAF works in this release: no research/ workspace citations or change history in shipped files, dates only on facts that change outside DAAF, plain status words and no stage codes in user-read templates and restart prompts. - Accuracy: CLAUDE.md's one-command rule names background & and line breaks, its regression-suite list includes the chaining battery, and its in-script install scan claim matches what run_with_capture.sh catches. The Explore block's stated reason no longer claims Explore runs on Haiku (it inherits the session model since Claude Code 2.1.198). - Templates: STATE, REPORT and AI-disclosure templates gain the provider route and a readable QA table; ERROR_RECOVERY, BOUNDARIES and the phase files are aligned with the code they describe. - Carries uncommitted work from closed sessions that these files already held, whole: the Scope Check (tiers, Read First, scratchpad staging; ModeConfirmationScope), write-capable search-agent and source-researcher records and the enforce-file-first hook on every agent with Bash (SubagentReportBlock), integration-checker wiring at Stages 9, 11 and 12, TmpdirAdjustment's maintainer-only labels and scratch-graduation pointers (incl. synthetic-data-workflow validation-checks.md), the citation sweep's template citations (marimo, R, Quarto, tidyverse), and Manuscript Preparation's web-retrieval 'Blocked Hosts and Fallbacks' section. - Left out on purpose: CoreDocCondense's later edits (CLAUDE.md, SCRIPT_EXECUTION_REFERENCE, BOUNDARIES, MODE_TEMPLATE, the integration checklist, the orchestrator SKILL.md and seven mode files are committed at that session's pre-edit snapshot), the 3.1.0 version strings (ReleasePrep), and the Literature Review mode file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- DOCUMENTATION_STANDARDS.md: who each kind of file is written for, the seven standards, when a date belongs in a doc, author and reviewer checklists, and the S3 exception that lets the Literature Review mode file keep its own glossary. - docs-triage.sh family D also flags 'Phase Status Update', the Literature Review stage and checkpoint codes (LR-0..LR-8, CP-1, CP-K ...) and template placeholders such as 'Stage [N]'; family C knows more external names (Compose, PowerShell, Quarto, TinyTeX ...). - docs_triage.bats covers the new patterns and checks that the Full Pipeline and Data Onboarding restart prompts carry no stage codes. - New advisory workflow .github/workflows/ci-docs.yml prints the lint's review queue when docs change; it never blocks a merge (maintainer-installed from the sweep's draft). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- All 18 hooks: header comments and the messages users and agents see describe current behavior, and every refusal names a next step that works (documentation sweep tier 5). bash-safety.site.sh's SITE_REBUILD_HINT is now a whole sentence, so a site override written for the old sentence-tail form reads oddly. - output-scanner: its warning now reaches the model (PostToolUse additionalContext JSON; plain stdout went only to the debug log). A key-shape match that is plainly a placeholder or test fixture by its own text may continue; a live environment value never does. - CLAUDE_CODE_SESSION_ID joins the secret-name allowlist in output-scanner.sh, audit-log.sh and run_with_capture.sh (one shared block): its value is the session UUID inside Claude Code's own paths, which the scanner had started reporting as a leak. - enforce-model-ceiling ranks Mythos with Fable (a Mythos session was denying every dispatch); archive-session renders Claude Code 2.1.281's Agent dispatches (and the older Task) as dispatches instead of truncated JSON; the Explore and claude-code-guide denials state DAAF's own reasons. - run_with_capture.sh: a refused re-run suggests the next unused revision name (02_src_a.py -> 02_src_b.py) instead of always _a; refusals open with one plain form. - context-reporter.sh, context-bar.sh and subagent-bar.sh: comment and provenance cleanup only; the active SubagentContextMonitoring work (Sonnet 5/Haiku 5.5 window, attachment model lookup, line-wise scans) is not included. - Tests move with the hooks because CI runs bats against the committed hooks: 11 suites, the safety battery (which now documents what it counts) and the chaining battery (which now takes a draft hook path as $1). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- create_script_revision.sh refuses a destination folder that does not exist, naming the mkdir -p fix, instead of failing inside mktemp. - collect_session_logs.sh creates logs/ and writes its collection request before the "no sessions found" exit, so a project worked on only in the current session is still collected when the session ends; new tests/bash/collect_session_logs.bats. - generate_log_viewer.py treats both Agent and Task tool calls as subagent dispatches, so Log Explorer links subagents for Claude Code 2.1.281 sessions; its hints give the full collect command. - Launchers no longer suggest --port for a browser-facing server (Compose publishes only the default ports); check_workspace_invariants.sh drops the obsolete GLPK symlink entry and its test; the launch, log-viewer and CLI wrapper scripts get current-state comments and messages (sweep tier 5). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Host scripts and their Bash/PowerShell twins (installer, control panel, backup and restore, migrate, rebuild, update, launchers and viewers): plain messages that say what happened and what to do next, printed commands that reach the right install, current-state comments (documentation sweep tier 2). - Updater: 'Conflicts resolved!' appears only when no merge, rebase or cherry-pick is still in progress; otherwise it prints the commands that finish the operation, and a failed check fails closed. The conflict recipe stages resolved tracked files only (git add -u), so untracked research projects are never swept in. - Dockerfile and docker-compose.yml: comment rewording only for the image layers and the user additions block; issue templates ask for the provider route and exact model ID. - bats and Pester suites for the host scripts move with them; carries TmpdirAdjustment's comment relabels in install.bats and restore_from_backup.bats. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- README and user guides 01-07 (documentation sweep tier 1 and the release-prep currency memo): accuracy checked against the scripts they describe, per-route privacy, provider routes and setup, current install, update and rebuild steps, Scope Check wording, and the Claude Code versions behind claude.ai skill sync. - CONTRIBUTING: 'Guardrails Your Custom Components Must Follow' replaces the v3.0.0 upgrade section; points to the documentation standard and its triage lint; asks bug reports for the provider route, exact model ID and DAAF version. - CODE_OF_CONDUCT gains the support address; the DAAFBench viewer footer drops the Discord link. - Left out: the 3.1.0 version strings (ReleasePrep) and CONTRIBUTING's three Literature Review CLI rows (that session's 1.7.0 tool is not committed yet; the dated test counts in those rows stay until it is). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- geopandas and sf-terra: the spatial LM-test decision rule follows Anselin (2005): when both robust tests are significant, take the larger statistic with caution (it said 'Spatial Durbin'); when neither is, look for another misspecification first. - CCD historical-changes: the Python and R race-collapse recipes keep 9 (Unknown) and 99 (Total) instead of folding them into missing; the race/ethnicity transition is dated 2008-09 to 2010-11, and the series warning now fires for any series touching file years 2008-2010. - CCD SKILL.md (7) and CRDC SKILL.md (15): broken cross-file anchors now match the real headings. - data-scientist: esda G_Local needs star=True for Gi*; scikit-learn LogisticRegression is L2-penalized by default (use statsmodels for inference); data-documentation's Python recipes are flat sequential code like their R twins. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Not documentation-sweep work: committed whole from two closed sessions so it is not left behind. TmpdirAdjustment labelled research/ citations in shipped comments as maintainer-only, or replaced them with the upstream URL, in great-tables, vintage-drift and five test files. - PSEO variable-definitions (closed citation sweep, probed 2026-10-27/28): opeid is a string in the 2001-2018 mirror shards and Int64 in 2019-2021, with the zero-pad needed before joining; cipcode is a bare 2-digit family code. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Claude Code's Edit and Write results carry the whole edited file, and DAAF's test suites hold credential-shaped fixtures on purpose, so once the scanner's warning reached the model every edit of such a test file told the agent to stop. - For an Edit, Write or MultiEdit whose file_path is under a tests/ folder, the key-shape families are skipped. The value-based check still runs, so a live credential value written into a test file still warns. - output_scanner.bats: three cases (tests/ edit silent, the same shape elsewhere warns, a live value in a tests/ edit warns). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…cript parsing context-reporter.sh and subagent-bar.sh measured claude-sonnet-5 subagents against a 200k window. Claude Code runs Sonnet 5.x and Haiku 5.5 with a native 1M window (Claude Code model-configuration docs, Extended context), so Sonnet specialists read HIGH/CRITICAL at 12-25% of their real context and returned early. The window arm now includes *sonnet-5* and *haiku-5-5*; the threshold profile stays conservative (on 1M: ELEVATED 150k, HIGH 200k, CRITICAL 250k). The hook's model scan slurped the transcript (jq -s), so one partly written last line blanked the subagent model and the first report used the session's window. The hook and subagent-bar.sh now share one line-wise model-scan program (skips malformed lines and isApiErrorMessage records, §§ MODEL_SCAN_JQ markers, lockstep test), fall back to the subagent transcript's model attachment, and redirect stderr before reading. The hook's usage scan, context-bar.sh's two transcript scans and archive-session.sh's subagent metrics are line-wise too. Tests: context_reporter.bats (128-141), subagent_bar.bats (127-134), context_bar.bats (106-108), archive_session.bats (24). Docs: CONTEXT_THRESHOLDS_REFERENCE.md and BOUNDARIES.md describe the Claude window mapping and the model lookup. These two doc files also carry remaining wording from the parallel documentation sweep (CONTEXT_THRESHOLDS_REFERENCE.md lines 19-35 and 45; one BOUNDARIES.md sentence at the Defense-in-Depth table intro). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…chestrator and data-scientist skills Cut only passages whose every instruction is already loaded for the reader when needed. CLAUDE.md: merged repeated context-health statements, dropped restated script and tmp rules, trimmed the Reference Files table to files every agent may need. Orchestrator skill: removed the loading decision tree and Scope Check tiers table (mode files carry both), and paragraphs restating CLAUDE.md or BOUNDARIES.md. data-scientist skill: removed workflows, checklists, notebook sections and quick trees duplicated in the same file or its references; folded their few unique checks into the Principles. Fixes: R routing for LIML, GMM-IV, SUR, 3SLS, VAR and panel IV; IAT comment labels and Parquet examples in references; change narration in BOUNDARIES.md; registration knock-ons in FRAMEWORK_INTEGRATION_CHECKLIST.md, MODE_TEMPLATE.md, CONTRIBUTING.md and four agent routing tables. Benchmark goldens embedding these files need a refresh before cross-change comparisons. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
CHANGELOG: replace the ad hoc Unreleased draft with the v3.1.0 entry in house style (summary, Important Notes for Existing Users, Detailed Notes, General Framework Improvements, For Contributors), built from a verified inventory of v3.0.2..HEAD and reviewed. Fix the table-of-contents anchors for the ' -- ' headings (v3.1.0, v3.0.2), which GitHub slugs with four hyphens. Tag-time items stay marked in HTML comments. Version sweep to 3.1.0: CITATION.cff (version, date-released 2026-11-02), README (draft comment, badge, APA, BibTeX), and the DAAF citation in AI_DISCLOSURE_REFERENCE, CITATION_REFERENCE, REPORT_TEMPLATE and STATE_TEMPLATE. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lit_corpus 1.7.0-daaf carries the researcher's decisions on the reference check sheet: - The sheet names the references it will leave out of the reference list, and its request names them by number with the way to keep one: ask for it to be checked, or checked again. - One rule decides which references a reply can decide: the corpus verdict and the verify row's own verdict are both CONFIDENT, WEAK or MISMATCH. The decision command refuses every other row, and the sheet marks as left out every listed reference that no reply can decide and no decision made citable or rejected. - attach verify refuses a verify row with no verdict that verify gives (a check that did not finish). - "Authors as cited" shows the name the check looked for. - Asking for references to be checked again has its own route: a check-only search pass runs verify again and attaches the new rows, a new version of the list is shown at the same checkpoint, and the reply is recorded as its own decision kind (check_again). - Held references are sorted as the list sorts its rows. Rule version glance-words-v2; output contract 0.4.0 unchanged. test_lit_corpus has 85 tests; the lit_corpus selftest checks 32 expectations. The mode file, lit-corpus.md, the literature-searcher and data-verifier agents, the STATE template, ERROR_RECOVERY, CONTRIBUTING and the user guide follow. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The scholarly-search skill and its references, and the comments in the lit, scholar, pdf and web tools, no longer point to the maintainer's working notes. The evidence they relied on is stated in place (how it was measured, when, and the result), and internal decision and session codes give way to dated decisions. - The lit_corpus.sh and lit_verify.sh headers describe the tools as they are now, without dated "added" lines or session codes. - Fixture provenance text names the live runs it came from without local paths, and test docstrings and comments are rewritten the same way. - CI wording states which packages the bare unit job pins. No tool version, output, exit code or exit text changes, and no test assertion changes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Comments, docstrings and the scholarly-search references no longer carry session or review codes. Each rule and decision is described as it stands now, with the date it was made or measured. - pdf_text_common.py, web_retrieval_common.py, lit_verify.py and the Elicit and Scite backends: header and rule-version comments state current behavior and dates, without change narration. - licensing.md, api-notes.md and elicit.md: build-session codes and checkpoint names give way to dated entries; licensing.md marks each built backend "Built". - test_scholar_search.py: each verify-rule test class docstring names the rules version the class pins. - literature-synthesizer.md: the held-references note matches how the reference check uses the held list. No code, output or test assertion changes: each changed Python file parses to the same code as before, docstrings aside. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…R routing sync, stale pointers Reviewed the downstream effects of f88773a (deduplication of CLAUDE.md and the orchestrator and data-scientist skills). No rule was lost; these are the knock-ons it left. Loading triggers: Ad Hoc reads a Literature Review only through the output contract's consumer files; Revision and Extension and Literature Review point to their own ERROR_RECOVERY sections with triggers; Full Pipeline reads each phase file when its phase begins, and reads only the named VALIDATION_CHECKPOINTS section a checkpoint result needs. R routing: every restatement now matches data-scientist's table. LIML, non-panel GMM-IV, SUR, 3SLS and VAR escalate in R (no installed package); IV with FE goes to fixest; dynamic-panel GMM to plm's pgmm(). Synced across the mode files, data-planner, causal-inference, descriptive-analysis, linearmodels, statsmodels, plm, r-stats, python-r-, r-python- and stata-r-translation. Removed two false claims: ivreg has no LIML method; plm has Fama-MacBeth (pmg). Pointers and wording: CLAUDE.md lines 206 and 340, smoke-test README, marimo/quarto descriptions of data-scientist, registration count (16 across 7 files), code-documentation's standalone-app framing and many:1 join labels. Tracking: benchmarks/README.md notes the 13 goldens that need a refresh and corrects the claim that goldens hold CLAUDE.md text; CHANGELOG v3.1.0 gains a "Method choices in R" bullet. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lit_corpus 1.8.0-daaf, output contract 0.5.0, prepares the citation adjudicator for its evaluation: - adjudications ingest refuses a batch unless the adjudicator's own Claude Code transcript, found from the agent ID, records only the packed model ID (rule adj-model-check-v1). The transcript is read only as a regular file, never through a symlink or a pipe. - CLAUDE.md's sha256 is recorded at pack and at ingest beside the adjudicator identity; a change is a warning and never decides a judgment or the evaluation gate. - adjudications release frees a packed batch that will not be ingested (never dispatched, a failed pack script, or refused by ingest), with a reason; its rows can then be packed in a new batch. - When no listed reference can be confirmed, the reference check sheet says which ones are already decided (glance-words-v3). - The contract bundle is regenerated at contract 0.5.0 with a synthetic adjudicator transcript and CLAUDE.md; the phrase table and its test pin follow the new contract version. - The citation-adjudicator agent file and the citation-adjudication reference describe the model check, which changes the adjudicator identity; the evaluated list is empty, so no evaluated identity is voided. The mode file, lit-corpus.md, the output contract, the STATE template, ERROR_RECOVERY, the literature-searcher agent and CONTRIBUTING follow. test_lit_corpus has 99 tests; the lit_corpus selftest checks 35 expectations. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Literature Review works end to end, but it has had limited real-world testing at launch. The places that introduce it to a user label it experimental, and explain the label in one sentence that asks for a closer review of its output and for reports of what goes wrong: - README.md: the mode's entry in the modes list, label and sentence. - user_reference/02: the modes table (label), the mode's own section (the sentence first) and the quick-scan tryout (a pointer). user_reference/07: the FAQ modes list (label). - The Literature Review confirmation template, in both copies (the orchestrator SKILL.md and literature-review-mode.md, still identical), the mode file's user orientation, and the mode's item in the SKILL.md expanded orientation. - A switch from another mode skips the confirmation, so the switch offers in user-support-mode.md and data-discovery-mode.md carry the sentence, and a rule in SKILL.md (Mode Escalation Paths) and in the mode file (Escalation Triggers) adds it to every other proposal to switch into Literature Review. - CHANGELOG v3.1.0: the summary and the mode's entry carry the label and a note; For Contributors gains the entry for the previous commit (output contract 0.5.0, lit_corpus 1.8.0-daaf), with the model check stated as evidence, not proof. The quickstart's three PDF-reading mentions and the review's own deliverables stay unlabelled. Other sessions' uncommitted hunks in these files stay in the working tree. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ng requirement, GPT-6 status, checkpoint terminology Applies the confirmed items from the website-sync documentation memo (21 issues, each re-verified against the tree), plus extras the verification found. Setup text: Python package count is "60+" everywhere (Dockerfile names 67). 01's model-routing subsection is renamed "Model routing for alternative providers" (anchor #model-routing-for-alternative-providers; inbound link in 07 updated) and opens with the requirement: every route except Anthropic directly needs the OPUS and SONNET model-tier settings, matching enforce-model-ceiling.sh. Template section [3] banner drops "(advanced)". GPT-6 Sol and Luna status in the template, 07 and CHANGELOG matches the 2026-10-28 record (OpenAI accepted both model names; Sol passed, Luna did not; no full DAAF session; no recorded API-key test). Terminology: in user-facing text "checkpoint" now means only a pause where DAAF waits for the user; CP1-CP4 are "validation checks"; code-reviewer checks are "quality review". Glossary rows in the orchestrator's Plain-Language Rule table, 02, 03 (three headings renamed, TOC updated), 06, 07, PLAN_TEMPLATE body and REPRODUCTION_REPORT_TEMPLATE follow it. Wording: Open Augments Field Guide links; README methods list; "lifecycle-tagged" explained; "bare" has one meaning; lab director; no "seamless"; time-relative "currently" removed; provider shim defined (+07 glossary row); synthetic-data top tier in 04; installs and removals; launcher heading; Esc as the interrupt key (stamped); Kimi K3 scoped to the July corpus; 919k ceiling stated as numbers; Fable/Mythos thresholds compared with the extended-horizon profile; 12 R library skills; 164/173 package figures explained; hidden backup items left in place. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lit_corpus 1.8.1-daaf. adjudications pack refuses a --model-id that lit_verify's model normalization would change (a trailing [1m], a dotted Claude ID, surrounding whitespace), with exit 1 and nothing packed, and names the form to pass. The value is never rewritten: it is an identity field the evaluated list is matched on as given, while ingest compares models normalized, so another spelling would pass the model check and never match a list entry. Two tests and a selftest case cover it (101 tests, 36 expectations); the exit tables, lit-corpus.md, CONTRIBUTING and the CHANGELOG entry follow. Output contract 0.5.0 and every rule version are unchanged. - README.md and user_reference/02: the experimental notice gains the address for reports. - SKILL.md and literature-review-mode.md: a switch into Literature Review copies both sentences of the experimental notice. The mode file's pack step says a provider prefix is kept. - The model check is stated exactly: the transcript must record at least one model, and every model it records must be the packed one (mode file, lit-corpus.md, the output contract, citation-adjudication.md, citation-adjudicator.md; the agent and rubric files get new sha256s, the template block is unchanged). - ERROR_RECOVERY.md: a missing pack log is exit 10; a pack whose captured script did not complete is released, and a batch never packed holds nothing to release. - Smaller accuracy fixes: CLAUDE.md "never part of the identity" rather than "never compared"; an empty release reason in the exit-11 lists; a fuller exit-11 help text; two long lines rewrapped; the CLAUDE_CONFIG_DIR and symlinked-folder limits of the transcript lookup; which usage errors write a MANIFEST row. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Output contract 0.6.0, lit_corpus 1.9.0-daaf, lit_verify 1.17.0-daaf. A model DAAF has not tested for a job no longer stops a review: the review plan warns the researcher, who chooses, in their own words. - The AI reference checker runs in every review. While its model is untested, its verdicts are hints beside each reference on the reference check list (the ones it flags first) and the researcher decides every reference, unless they accept the checker (lit_corpus adjudications untested-checker): its SAME_WORK verdicts then confirm references, labelled "confirmed by an untested AI check (your choice)". An acceptance counts only when its record is complete, and a model already on the tested list cannot be accepted. A model mismatch still refuses a tested checker's batch; an untested one's is kept as hints with a warning. - An untested PDF reader reads text only unless the researcher records a page-picture choice (lit_verify vision-override): "check" lists every number read from a picture for comparison, "accept" takes the readings and the review labels them. lit_verify route --reader-model prints the VISION line each reader dispatch copies. - lit_verify report counts these confirmations only when the recorded choice re-derives from the project's records, with the warnings CITATION_CONFIRMED_BY_UNTESTED_AI_CHECK and VISION_READ_BY_UNTESTED_MODEL (84 report statuses). - adjudications pack skips a reference the checker already judged unless a new judgment would count for more; --rejudge with --keys asks again (adj-selector-v2). - The checker returns its answer through SubagentHandback: its read-scope hook allows that one call besides reading its bundle, and ingest accepts it in the audit log. - run_with_capture.sh also refuses a script that runs either new choice command, and both have permissions.ask rules, so a choice is recorded only at a permission prompt. - The checker's agent and rubric files are corrected to match (new file sha256s; the prompt template is unchanged). The contract bundle is regenerated; the mode file, skills, agents, references, CLAUDE.md, CONTRIBUTING and the CHANGELOG follow. Tests: test_lit_corpus 116, test_lit_verify 264; selftests 38 and 98; run_with_capture.bats 93, adjudicator_read_scope.bats 44. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings in full daaf_dev current branch to update main for v3.1.0 release