Skip to content

v2.1.0 pull request#16

Merged
brhkim merged 128 commits into
mainfrom
minor_revisions_v202
May 4, 2026
Merged

v2.1.0 pull request#16
brhkim merged 128 commits into
mainfrom
minor_revisions_v202

Conversation

@brhkim
Copy link
Copy Markdown
Collaborator

@brhkim brhkim commented May 4, 2026

See v2.1.0 changelog for full details!

DAAF Container and others added 30 commits April 12, 2026 14:24
collect_session_logs.sh grepped all JSONL files individually for the
project basename, which missed subagent transcripts that never
referenced the project directory (e.g., search-agent exploring
framework files). Now uses session-grouped matching — greps only
orchestrator archives, extracts session-short ID, then globs all
files from each matching session — consistent with the approach
already used by archive-session.sh and recover-session-logs.sh.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…t, add branch support

Install scripts now create daaf-docker/ in the user's current terminal
directory instead of hardcoding ~/daaf-docker or %USERPROFILE%\daaf-docker.
This lets all documentation use simple `cd daaf-docker && docker compose`
commands instead of verbose `-f path/to/docker-compose.yml` flags, and
eliminates platform-specific path substitution notes throughout the docs.

Also removes the entrypoint.sh from the Docker build (and the legacy zip
install path it supported), moves git identity config into the Dockerfile
where it works for all install methods, adds DAAF_BRANCH env var support
for installing from specific branches/tags, and fixes PowerShell error
handling gaps flagged by review (missing $LASTEXITCODE checks after native
docker commands).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New scripts (bash + PowerShell) downloaded during installation into the
user's daaf-docker/ directory:

- run_daaf: starts the container if needed and launches Claude Code (or
  bash) in a single command, replacing the 3-step manual workflow
- backup_daaf: copies the full Docker volume to a date-versioned folder
  on the host, using a temporary busybox container so it works even when
  the DAAF container is stopped

Install scripts updated to download the utilities alongside the
Dockerfile. Documentation updated with simplified day-to-day workflow
and backup instructions referencing the new scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduces migrate_daaf.sh and migrate_daaf.ps1 — one-time migration
scripts for users on DAAF v2.0.1 or earlier who installed via the old
ZIP-download method. The migration downloads host utility scripts, backs
up the Docker volume, and uses blob-hash matching + git replace --graft
to connect the local orphan git history to the upstream repository,
enabling update_daaf.sh for all future updates. Preserves all research
data, framework customizations, and the full git audit trail.

Also adds:
- migrate_daaf_design.md: detailed design document with edge cases,
  rollback instructions, and review findings
- CHANGELOG_v2.0.2.md: release changelog and migration guide
- user_reference/01_installation_and_quickstart.md: new "Migrating from
  an older installation" subsection in the Keeping DAAF Updated section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
DAAF Container and others added 28 commits April 30, 2026 22:09
Integration tests now run only on weekly schedule, manual dispatch, and
release tags — no longer on every push to minor_revisions_v202.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Surface Claude's extended thinking content in the session log viewer
with purple-themed visual treatment and collapsible containers, giving
full visibility into model reasoning during session review.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ecution

Marimo notebooks are interactive, so exposing ports to all network interfaces
allowed unauthenticated code execution from any device on the local network.
Bind 2718/2719 to 127.0.0.1 and document the change with a new FAQ entry
and updated port references across user documentation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e assertions

- Dockerfile multi-arch support (code-server + debugpy) for amd64/arm64
- CI integration: path-based triggers, ARM64 matrix on all jobs, new
  failure-resilience job (install detection, force reinstall, build failure
  recovery, concurrent lock guard, local-commit update handling)
- CI scripts: formalized smoke test assertions with per-script output
  content verification replacing exit-code-only checks
- BATS tests: 286 total (was 137) — error paths, state-machine integration
  tests for update/migrate, new files for view_notebooks/run_vscode
- Pester tests: 344 total (was ~120) — matching error paths for
  cross-platform parity, integrated wrapper-script behavioral tests
- Review fixes: removed unused variables, env var leak guard, lock
  polling instead of fixed sleep, deduplicated restore tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…gation

Six root causes addressed:
- Replace em-dashes (U+2014) with ASCII -- in all test files to eliminate
  PSScriptAnalyzer BOM warnings; remove UTF-8 BOM from TestHelper.ps1
- Rewrite install.bats error-path docker mocks from positional case "$1"
  to glob-based case "$*" so patterns match despite -f flag arguments
- Fix dry-run test assertions in run_vscode.bats and view_notebooks.bats
  to check for reliably-produced output instead of unreachable [DRY-RUN]
- Fix restore_from_backup.bats prompt assertion to use echo text instead
  of read -p prompt that isn't captured when stdin is piped
- Add -ExitCode parameter to migrate_daaf.ps1 Wait-ForUser so error paths
  propagate non-zero exit codes; preserve $LASTEXITCODE across Out-String
  pipelines in both migrate_daaf.ps1 and update_daaf.ps1 helper functions
- Replace tee pipelines with redirect+cat in ci-integration.yml failure
  resilience tests to capture correct exit codes; remove [DRY-RUN] smoke
  assertions for scripts that don't emit markers; fix PS 5.1 output
  capture with *>&1 for Write-Host streams

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two CI test fixes:

1. ci-scripts.yml: pwsh 7 Invoke-SmokeTest used 2>&1 which only
   captures stderr. Scripts output via Write-Host (stream 6), so
   $output was always empty. Changed to *>&1 to capture all streams,
   matching the PS 5.1 section.

2. migrate_daaf.ps1 / update_daaf.ps1: error-path Pester tests use
   wrapper scripts that dot-source the real script. In PowerShell,
   `exit N` inside a function in a dot-sourced script does not
   terminate the host process -- it only unwinds the dot-sourced scope
   and returns to the caller with implicit exit 0. Fixed by using
   [Environment]::Exit(N) for non-zero exits, which terminates the
   CLR process unconditionally. Success exits (0) still use plain
   `exit` to avoid killing the Pester host in non-subprocess tests.

Also documents the dot-source exit gotcha in the shell-scripting skill
(gotchas.md + SKILL.md topic index).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The dry-run mocks in install.ps1, migrate_daaf.ps1, and run_daaf.ps1
handle all docker calls via specific switch cases, so the default
branch (which prints [DRY-RUN]) is never reached. The bash equivalents
DO hit the default case and correctly output [DRY-RUN], so those
assertions are kept.

Removed from both pwsh 7 and PS 5.1 smoke test sections. The
backup_daaf.ps1 [DRY-RUN] assertions are kept because its mock does
hit the default case.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
On force reinstall (DAAF_FORCE_REINSTALL=1), the install script clones
the repo to /tmp/daaf-clone then copies to /daaf/ with cp -a. Git pack
files (.git/objects/pack/*.pack) are mode 444 (read-only by design),
so cp -a cannot overwrite them from a previous install.

Fix: remove .git and related dotfiles before cloning. The research/
folder is preserved -- only framework files are replaced. Applied to
both install.sh and install.ps1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The pre-clone rm -rf cleanup runs via docker compose exec bash -c,
which BATS mocks return 1 for. With set -euo pipefail active, this
exits the script before reaching the clone step. Adding || true makes
the cleanup best-effort, which is correct -- on fresh install there is
nothing to remove, and on reinstall the rm may partially succeed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The restore test intended to test the "no backups found" error path
by copying the script to an empty directory. But working-directory was
set to daaf-docker/ which has a backup from the previous CI step, so
the script found that backup and never hit the error path.

Fix: cd to /tmp/empty_restore_dir before running the script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The tee pipeline masks the exit code of update_daaf.sh (tee always
returns 0). Using redirect+cat preserves the real exit code, matching
the pattern applied to 4 other pipelines in commit df4ee61.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The restore script checks for running containers before searching for
backups. With the container running (from step b), it prompts to stop,
gets empty input from </dev/null, and exits 0 with "Restore cancelled"
-- never reaching the "no backups" error path being tested.

Fix: stop the container before the test, then restart it before step
(e) which needs it running for docker compose exec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
rebuild_daaf.sh copies the Dockerfile FROM the container TO the host
before building. Breaking only the host copy had no effect -- rebuild
overwrote it with the container's good copy. Now the test breaks the
Dockerfile inside the container via docker compose exec, and the fix
step pipes the good Dockerfile back in.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@brhkim brhkim merged commit a399639 into main May 4, 2026
11 of 19 checks passed
@brhkim brhkim deleted the minor_revisions_v202 branch May 4, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant