Skip to content

v0.4.9

Choose a tag to compare

@github-actions github-actions released this 13 Jun 01:37
· 83 commits to main since this release
693b6bd

Changelog

  • 4659a75 Add --skip=validate to goreleaser release args
  • 3bdc84e Add .env, *.log, and Claude local settings to .gitignore
  • b5642fd Add CLAUDE.md with branch naming conventions
  • 355c870 Add CLI colorization via fatih/color
  • 4f25a41 Add README, deferred task list, and update CLAUDE.md
  • 9858464 Add WIP design spec and package manager doc to .claude/docs/
  • 69b0189 Add auto patch release workflow on main push
  • 8972eb2 Add composability parity design goal to suite spec
  • f102b1b Add docs/ directory and note it in CLAUDE.md
  • 5ccaa7e Add dotd env list/get/set and env.SaveEnvFileToPath
  • 8af68b3 Add dotp spec: @require/@request, installed()/installable(), packages.yaml
  • e96c8e6 Add implementation plan: 5 phases from repo bootstrap to orchestrator
  • eb6ab3a Add package manager fragmentation to problem statement
  • 7d76174 Add per-tool GoReleaser release infrastructure
  • c5ec171 Add script source order problem to intro
  • c6d6dc5 Add spec review doc, project settings, and deferred design tasks
  • dc103a0 Add specv2: dotr suite architecture design
  • 951b6dc Add structural spec: monorepo layout, internal packages, FileSet, I/O boundary
  • bd3ef00 Add token efficiency guidelines to CLAUDE.md
  • 3c9397c Apply spec review resolutions across all spec files
  • 0a2d157 Clarify work/personal coexistence bullet
  • 159f186 Clean up TODO: close repo rename item, keep dotp spec open
  • b755261 Color cobra help output: bold headers, cyan commands and flags
  • 4d1d3ad Defer CI/PR template setup to TODO
  • ffedaec Document release process in CLAUDE.md; fix README install URL
  • 90d6adc Document trunk-based branching strategy and naming conventions
  • 424032e Downgrade go.mod to Go 1.24 to fix lint CI
  • 455f59b Expand conventional solutions: add numbered prefix example
  • 561b74a Fix GoReleaser semver: set GORELEASER_CURRENT_TAG to VERSION
  • a796c9b Fix all golangci-lint v2 errors
  • b6f97f8 Fix golangci-lint version: use v2.11.4 (supports go 1.25)
  • 04632fd Fix lint: use golangci-lint v2, accept go 1.25 toolchain bump
  • d4ce53e Fix missing VERSION env var in auto-release goreleaser invocation
  • f8b6dcf Fix missing color in dotd apply verbose/dry-run output
  • d1b4a54 Fix per-tool GitHub release naming to prevent tag collision
  • a45492f Fix remaining errcheck: defer close and error-path Remove
  • 2445b67 Fix standalone mode: dotl and dotp use unconditional walk
  • 262ce0d Guard against duplicate release creation in auto-release
  • bfae630 Implement @retain-prefix: skip dot- transformation on last path component
  • d1dd231 Mark phases 1-3 complete in TODO
  • 9ca75e9 Merge branch 'feature/claude-phase-1-foundation' into feature/claude-phase-3-walk-fileset-v2
  • 7c7e707 Merge pull request #1 from rocne/feature/claude-phase-5-cmds
  • 8e79b56 Merge pull request #10 from rocne/feature/claude-goreleaser-release-names
  • fc15c77 Merge pull request #100 from rocne/feature/claude-json-output
  • e1a2ef6 Merge pull request #101 from rocne/feature/claude-setup-noninteractive-quiet
  • d4ce89c Merge pull request #102 from rocne/feature/claude-ux-polish
  • 7d7dda1 Merge pull request #103 from rocne/feature/claude-flag-visibility-readme
  • 5b5db77 Merge pull request #104 from rocne/feature/claude-env-show-exit-codes
  • 691e8d4 Merge pull request #105 from rocne/feature/claude-code-quality-cleanup
  • 901b247 Merge pull request #106 from rocne/feature/claude-untrack-working-docs
  • 5b01d58 Merge pull request #107 from rocne/feature/claude-docs-truth-pass
  • a26c6eb Merge pull request #108 from rocne/feature/claude-init-noninteractive
  • f594f32 Merge pull request #109 from rocne/feature/claude-output-polish
  • 7bd6002 Merge pull request #11 from rocne/feature/claude-goreleaser-gh-publish
  • ae944d8 Merge pull request #110 from rocne/feature/claude-first-run-guardrails
  • 5d629c9 Merge pull request #111 from rocne/feature/claude-safety-consistency
  • 73adb81 Merge pull request #112 from rocne/feature/claude-stale-names
  • 82dc2ac Merge pull request #113 from rocne/feature/claude-predicate-correctness
  • 1a74505 Merge pull request #114 from rocne/feature/claude-output-channels
  • a15d712 Merge pull request #115 from rocne/feature/claude-internal-hygiene
  • 693b6bd Merge pull request #116 from rocne/feature/claude-cmd-dedup
  • 4ac0837 Merge pull request #12 from rocne/feature/claude-release-docs
  • 84edb84 Merge pull request #13 from rocne/feature/claude-cli-color
  • a43394b Merge pull request #14 from rocne/feature/claude-fix-auto-release
  • e4c7004 Merge pull request #15 from rocne/feature/claude-dotd-color-apply
  • d01c302 Merge pull request #16 from rocne/feature/claude-pr-workflow-policy
  • 45e4cef Merge pull request #17 from rocne/feature/claude-packages-yaml-scaffold
  • 69f5af8 Merge pull request #18 from rocne/feature/claude-install-script
  • 989a379 Merge pull request #19 from rocne/feature/claude-install-script
  • 8ed2162 Merge pull request #2 from rocne/feature/claude-files-flag
  • 4ddf19b Merge pull request #20 from rocne/feature/claude-audit-ecosystem
  • e95ca82 Merge pull request #21 from rocne/feature/claude-audit-fixes
  • b7c95de Merge pull request #22 from rocne/feature/claude-import-annotations
  • 3005904 Merge pull request #23 from rocne/feature/claude-readme-annotations
  • 1f60b56 Merge pull request #25 from rocne/feature/claude-docs-site
  • 212e525 Merge pull request #26 from rocne/feature/claude-integration-tests
  • 6963c8d Merge pull request #27 from rocne/feature/claude-integration-tests
  • 093f17d Merge pull request #29 from rocne/feature/claude-docs-refresh
  • 916f10f Merge pull request #3 from rocne/feature/claude-readme-v2
  • 111edcf Merge pull request #30 from rocne/feature/claude-remove-old-toolnames
  • 6d2cd9a Merge pull request #31 from rocne/feature/claude-remove-old-toolnames
  • ab5b810 Merge pull request #32 from rocne/feature/claude-naming-audit
  • 94ffc5f Merge pull request #33 from rocne/feature/claude-naming-audit
  • 1ee312a Merge pull request #34 from rocne/feature/claude-session-cleanup
  • 3e818f1 Merge pull request #35 from rocne/feature/claude-env-diff-completions-tests
  • 58608f5 Merge pull request #36 from rocne/feature/claude-public-release-cleanup
  • e8763a4 Merge pull request #37 from rocne/feature/claude-public-release-spec-cleanup
  • 8372766 Merge pull request #38 from rocne/feature/claude-readme-walk-fix
  • 0c983ae Merge pull request #39 from rocne/feature/claude-shellrc-rename
  • 89571ed Merge pull request #4 from rocne/feature/claude-readme-intro
  • 0e1484a Merge pull request #40 from rocne/feature/claude-files-list-cmd
  • 296e749 Merge pull request #41 from rocne/feature/claude-cleanup-pass
  • 4f3043b Merge pull request #42 from rocne/feature/claude-ux-improvements
  • c03fb88 Merge pull request #43 from rocne/feature/claude-package-manifests
  • 9515650 Merge pull request #44 from rocne/feature/claude-compose-targets
  • f97099e Merge pull request #45 from rocne/feature/claude-help-fixes
  • 44f9e91 Merge pull request #46 from rocne/feature/claude-path-resolver
  • e17e220 Merge pull request #47 from rocne/feature/claude-logging
  • 15aca49 Merge pull request #48 from rocne/feature/claude-output-migration
  • b4902a3 Merge pull request #49 from rocne/feature/claude-homebrew-tap
  • 89d5879 Merge pull request #5 from rocne/feature/claude-readme-conventional
  • b312954 Merge pull request #50 from rocne/feature/claude-cleanup-help-flags
  • 32121be Merge pull request #51 from rocne/feature/claude-rename-brew-formula
  • 8cb8bb9 Merge pull request #52 from rocne/feature/claude-env-help
  • dbb9233 Merge pull request #53 from rocne/feature/claude-bundle
  • 9a175fc Merge pull request #54 from rocne/feature/claude-compose
  • b83606b Merge pull request #55 from rocne/feature/claude-v2-planning
  • 8909bb9 Merge pull request #56 from rocne/feature/claude-v2-impl
  • 4f1ecb9 Merge pull request #57 from rocne/feature/claude-v2-env-config
  • 342cf52 Merge pull request #58 from rocne/feature/claude-v2-pipeline
  • deb936e Merge pull request #59 from rocne/feature/claude-v2-cli-init
  • 48705b5 Merge pull request #6 from rocne/feature/claude-readme-work-personal
  • 24328da Merge pull request #60 from rocne/feature/claude-review-fixes
  • 1ff6b12 Merge pull request #61 from rocne/feature/claude-action-system
  • 9027b4b Merge pull request #62 from rocne/feature/claude-cli-completeness
  • 863f940 Merge pull request #63 from rocne/feature/claude-adopt
  • 54569d0 Merge pull request #64 from rocne/feature/claude-audit-fixes
  • db0b457 Merge pull request #65 from rocne/feature/claude-init-rc-canonical
  • caee6ac Merge pull request #66 from rocne/feature/claude-cli-command-groups
  • 34f372e Merge pull request #67 from rocne/feature/claude-init-walk-fixes
  • 9c2bfd5 Merge pull request #68 from rocne/feature/claude-lifecycle-commands
  • 835ac7f Merge pull request #69 from rocne/feature/claude-xdg-canonical-paths
  • 1d63a67 Merge pull request #7 from rocne/feature/claude-hyphen-tags
  • cb51cfc Merge pull request #71 from rocne/feature/claude-philosophy-audit
  • f39b8ba Merge pull request #72 from rocne/feature/claude-output-audit
  • f58b0f2 Merge pull request #73 from rocne/feature/claude-ui-print-helpers
  • 170767f Merge pull request #75 from rocne/feature/claude-audit-pass4-5
  • 91b682b Merge pull request #76 from rocne/feature/claude-install-curl-only
  • b6fffde Merge pull request #77 from rocne/feature/claude-e2e-docker-tests
  • b54fa47 Merge pull request #78 from rocne/feature/claude-e2e-failure-notification
  • b3d6a3e Merge pull request #8 from rocne/feature/claude-goreleaser-tag-fix
  • cc99a53 Merge pull request #80 from rocne/feature/claude-e2e-test-expansion
  • 9342cfe Merge pull request #81 from rocne/feature/claude-test-audit-fixes
  • 18015d8 Merge pull request #82 from rocne/feature/claude-docs-fixes
  • e086ad5 Merge pull request #83 from rocne/feature/claude-config-convention
  • 2125a51 Merge pull request #84 from rocne/feature/claude-setup-wizard-fix
  • 34cf959 Merge pull request #85 from rocne/feature/claude-config-link-root-fix
  • 1867ebc Merge pull request #86 from rocne/feature/claude-initgen-homedir-cleanup
  • a1dec54 Merge pull request #87 from rocne/feature/claude-e2e-drop-download-blocks
  • ebf253f Merge pull request #88 from rocne/feature/claude-tty-missing-key-prompt
  • d4f0e1f Merge pull request #89 from rocne/feature/claude-codebase-audit
  • fb6c2c8 Merge pull request #9 from rocne/feature/claude-goreleaser-skip-validate
  • 62de3ae Merge pull request #90 from rocne/feature/claude-e2e-coverage
  • 29cdc80 Merge pull request #91 from rocne/feature/claude-docs-clarity
  • 51ae19d Merge pull request #92 from rocne/feature/claude-annotate-wizard
  • 6ea0501 Merge pull request #93 from rocne/feature/claude-prompt-io-consolidation
  • edf4d17 Merge pull request #94 from rocne/feature/claude-fix-devnull-close
  • 1522e5f Merge pull request #95 from rocne/feature/claude-audit-dedup
  • 2b5ee69 Merge pull request #96 from rocne/feature/claude-ux-help-improvements
  • ca313f9 Merge pull request #97 from rocne/feature/claude-ux-help-improvements
  • 511f5d4 Merge pull request #98 from rocne/feature/claude-error-format-unification
  • 4f68692 Merge pull request #99 from rocne/feature/claude-help-text-and-arg-errors
  • 1331c84 Move docs to .claude/docs/ for Claude reference material
  • 5dada15 Overhaul README: philosophy, how it works, full annotation docs
  • 5e9e704 Phase 0: repo bootstrap
  • 5b9e570 Phase 1: internal/annotation and internal/predicate
  • 67fb52f Phase 2: internal/dotryaml, internal/env, cmd/dote
  • 2512cb3 Phase 3: internal/walk and internal/fileset
  • c903803 Phase 4: dag, initgen, linker, packages
  • 9926a6b Phase 5: cmd/dotd, cmd/dotl, cmd/dotp, cmd/dotr
  • 3b7f5c0 Refactor cmds to newRootCmd() and add cmd-layer tests
  • 6a94d37 Refactor dote to newRootCmd() and add cmd-layer tests
  • 36159b2 Reframe intro: problem statement, comparison table, value prop
  • 6222ae6 Rename --dotfiles to --files with -f shorthand
  • cc325a3 Rework README: tool sections replace overview table
  • 2907b9c Rework release: goreleaser builds, gh publishes
  • da03408 Rewrite README for dotr suite
  • a3de3a9 Sharpen script order bullet: call out numbered prefix hack
  • aad26bb Split SPEC.md into spec/ directory with index and subsection files
  • b81e447 Switch release tags from slash to hyphen format
  • ff7721d Tighten intro bullets into table; add setup + color TODOs
  • 6168bc9 Update CLAUDE.md: living doc note, commit/push cadence, validation steps
  • 2414718 Update go.mod to Go 1.26, tidy deps
  • 6d19ed1 Upgrade to golangci-lint-action@v7 for golangci-lint v2 support
  • e4a97f5 Wire link_root cascade from .dotr.yaml into linker
  • dbdff2c chore(docs): move working docs to git history; add HISTORY.md
  • 1824a09 chore(e2e): remove binary.sh, install.sh, combined.sh (superseded)
  • 1410b3e chore(todo): add go-public and GitHub Pages tasks
  • 7aee479 ci(release): add e2e job — runs after release, matrix over distro
  • 3e8b06b ci(release): open GitHub issue when e2e tests fail
  • 3baa754 ci: add pre-release e2e job to CI
  • 66c7874 ci: trigger CI
  • 6334bea ci: trigger CI after base branch update
  • a6b451a ci: trigger CI run
  • fc789fb docs(audit): add full codebase audit report
  • d422504 docs(claude): strengthen pre-push PR check instruction
  • 2d9bd9d docs(cmd): correct config edit help filename (AUDIT-036)
  • 7ac4b4d docs(cmd): document env diff intentional design — compares file vs shell, not final resolved env
  • a7f324f docs(getting-started): remove gh auth requirement from install instructions
  • 0fae1f3 docs(install): add curl one-liner usage to script header
  • 9dd460a docs(plan): add dotd adopt implementation plan
  • 4a7290c docs(plan): fix adopt plan — imports, suppression lines, expected output, go mod tidy, shellrc test
  • 51e2d18 docs(plan): second-pass review fixes — stale import note, filepath literals, bin test original-removal check
  • c44a9cb docs(readme): add @disable/@no-source/@source annotations, dotr adopt, fix .dot-dagger.yaml schema
  • 4d185ca docs(readme): add Development section with test and docs serve commands
  • 7a0af2a docs(readme): add install.sh one-liner, fix stale priority docs
  • 96826b5 docs(readme): audit for clarity, ordering, and terminology
  • e22510b docs(readme): fix fileset stage — walks whole repo, not just 3 dirs
  • 03b27f1 docs(readme): update install section — requires only curl
  • d9ffebd docs(setup): improve packages.yaml scaffold with full example
  • 16b0555 docs(spec): add actions.md, update compose/dag/index for v2 action system
  • b1c937c docs(spec): add dotd adopt v2 design spec
  • c7da628 docs(spec): align spec with actual code and design
  • 668a2d4 docs(spec): deep accuracy pass — align with actual implementation
  • bbc1e31 docs(spec): e2e coverage design for all command gaps
  • ecfb6be docs(spec): fix adopt spec — flags table, test placement, symlink notation
  • 68e5d83 docs(spec): fix setup default path and init stdin in e2e design
  • 7414c13 docs(spec): fix seven issues in e2e coverage design
  • 44f3606 docs(spec): mark dotd adopt as implemented in cli.md
  • e0efafd docs(spec): revise e2e coverage design after self-review
  • d79d984 docs(spec): update cli, architecture, and index to match implementation
  • b171759 docs(spec): update cli.md to match v2 implementation; unhide package/compose/dag commands
  • f77c050 feat(adopter): add Infer with convention-based destination inference
  • cd4b4c3 feat(adopter): implement Adopt — copy, remove, symlink via pipeline.Act
  • c940c7a feat(annotation): add AnnotationType interface and InputKind
  • 25a0409 feat(annotation): add Registry and concrete AnnotationType implementations
  • 584ef3c feat(annotation): add Write function with atomic rewrite and insertion-point logic
  • d5bfb5f feat(annotation): rewrite scanner for v2 @key(args) syntax
  • 82e1b20 feat(cli): add dotd env/config subcommands, hidden get-os/get-hostname, help --all
  • d03a826 feat(cli): add dotd init, dotd list, dotd bundle (v2 pipeline)
  • 34bc848 feat(cli): wire dotd apply/check to v2 pipeline, delete superseded v1 packages
  • ed969d4 feat(cli): wire dotd apply/check to v2 pipeline, delete superseded v1 packages
  • 15728e0 feat(cmd): add dotd env diff command
  • a54380f feat(cmd): add dotd package list command
  • f85430c feat(cmd): add filterWithPrompt with TTY-aware missing key prompting
  • 5224e95 feat(cmd): implement dotd adopt — inference, prompt, copy, symlink
  • 9b1cbe1 feat(cmd/dotd): add annotate wizard command
  • eea30ee feat(cmd/dotd): add promptMenu helper using huh.Select
  • ee4485e feat(cmd/dotd): register annotate command and add non-TTY integration test
  • 84563aa feat(config): add config.yaml loader with Get/Set
  • d9e162e feat(config): make config.yaml path overridable via --config/DOTD_CONFIG_FILE (AUDIT-002)
  • b6480ce feat(dagger): add .dagger file parser with v2 node schema
  • 5253734 feat(dagger): add ConventionConfig for configurable convention dir names
  • dd0ec85 feat(dotd): add completion subcommand, env diff, and expand unit tests
  • e1fae0c feat(dotr): add dotr setup interactive onboarding command
  • 79d4866 feat(dotr): add env/dag/link/package as subcommands
  • 9723e78 feat(e2e): add apply.sh exerciser (no download step)
  • 8b58d48 feat(e2e): add procurer scripts (release and local)
  • 9e33503 feat(e2e): add run-e2e-local.sh pre-release runner
  • 8fa6ec8 feat(e2e): update Dockerfiles for procurer/exerciser split
  • 4232a20 feat(ecosystem): single canonical name and default path functions
  • 23a4862 feat(ecosystem): tool name constants + rename config file to .dot-dagger.yaml
  • 9bc3282 feat(env): rewrite for v2 — flat yaml, shell interpolation, DOTD_* vars
  • 81d2be4 feat(init): add -n/--non-interactive; print setup -n values
  • 0eee667 feat(install): add tool, version, os, arch args to install.sh
  • 6d8c9f9 feat(node): add logical name derivation
  • 3b8b567 feat(packages): move priority to packages.yaml, add per-package prefer
  • 8d24ba9 feat(pipeline): add CollectMissingKeys via AST key scan
  • 5eba904 feat(pipeline): add ValidateNodes for action sequencing validation
  • 3bf0f9d feat(pipeline): add act stage (link, source, no-source)
  • bbe088d feat(pipeline): add filter stage
  • fc0c36d feat(pipeline): add init.sh generation
  • 4a47824 feat(pipeline): add normalizeActionAnnotations for canonical action form
  • 1843df5 feat(pipeline): add order stage (Kahn + alpha tie-break) and After field on RawNode
  • 259edbd feat(pipeline): add walk stage with RawNode types and cascade logic
  • c820510 feat(pipeline): normalize action annotations before mergeActions
  • 8b382b6 feat(pipeline): wire ValidateNodes between Walk and Filter
  • 8612cb5 feat(setup): add --non-interactive flag; clarify --quiet scope
  • 05cba2d feat(setup): detect installed package managers and pre-fill packages.yaml
  • 63a0488 feat(ui): add OKf/Skipf/Headerf helpers and shared promptConfirm; migrate all call sites
  • 05c2b36 feat(ui): add Warnf/Errf/Tipf print helpers; migrate call sites
  • dcc6ba5 feat(ux): overhaul setup and init wizards
  • 49d659a feat: UX improvements across CLI surface
  • edd98a3 feat: add --debug flag; extract resolveLogLevel
  • 21f7014 feat: add --json output to every data command
  • 22b3a43 feat: add @disable/@no-source/@source annotations and dotr import command
  • 3b3f5d8 feat: add @when syntax reference to description and validate error hint
  • e7eb28b feat: add RemoveSourceLine to internal/setup/shell
  • 5ee8c86 feat: add dotd bundle command
  • 12f590e feat: add dotd concepts reference command
  • 369e2c2 feat: add dotd env path subcommand
  • f7c44ce feat: add dotd files list command
  • a422792 feat: add dotd setup command — interactive config wizard
  • b75d2ae feat: add dotd teardown command
  • c553076 feat: add dotd unapply command
  • e166d8d feat: add dotd-packages.yaml package manifests
  • fc46477 feat: add install.sh to download and install latest dotr
  • 014c54b feat: add shell expression hint to env set --help
  • 315db37 feat: add structured logging via charmbracelet/log
  • 8179764 feat: annotate shell expressions in env show output
  • 44d6088 feat: centralize path resolution with DOTD_* env vars and env.yaml fields
  • eb5ee9f feat: complete BasicNode wiring, @disable, link/compose fixes, nosync warning
  • 4b39e10 feat: exit 2 on usage errors; uniform env show text format
  • 1b5344f feat: first-run guardrails — refuse cwd fallback, warn on no-op apply
  • bcaa552 feat: group dotd commands into Core, Configuration, and Advanced sections
  • 34066be feat: implement §21 compose targets
  • 7edc399 feat: integration-test compose stage end-to-end
  • 7b3c177 feat: migrate all output to structured log levels with stdout/stderr split
  • 906141a feat: polish CLI UX — dry-run prefix, color, alias, concepts group
  • 7e32709 feat: prepend bin dir to PATH in generated init.sh
  • 30e6622 feat: print @when syntax block as preamble in annotate wizard
  • 3d627c4 feat: publish Homebrew tap formula on release
  • ddee412 feat: rename scripts/ → shellrc/, make convention dirs configurable
  • 6d7fdbb feat: render Long help blocks and add Long+Examples to every subcommand
  • a8e66d9 feat: render error and hint on separate lines via Hinter interface
  • 9ffbd3f feat: scope persistent path flags to relevant subcommands; document completion
  • dfa95ba feat: wire dotd init RC file check, fix canonical resolution violations
  • c7a6435 fix(annotate): check f.Close error to satisfy errcheck lint
  • 36b9736 fix(annotation): migrate all packages to v2 annotation API
  • b5870d6 fix(cmd): consistent prompt defaults + safe non-TTY behavior (AUDIT-035)
  • 3a6b8db fix(cmd): diagnostics to stderr per log contract (AUDIT-034)
  • b19fa65 fix(cmd): polish TTY prompt — OR limitation docs, abort handling, Go 1.22 cleanup
  • ba3cc6d fix(cmd): prompt abort returns error, main owns exit (AUDIT-022)
  • a6e408c fix(cmd): unapply exits non-zero on partial failure, errors to stderr (AUDIT-033)
  • 9dcf5cb fix(cmd): validate nodes uniformly across commands (AUDIT-029)
  • e201928 fix(config): resolve linkRoot $HOME default in resolvePaths (AUDIT-001)
  • a6b362b fix(critical): fix C-1 through C-5 from v2 code review
  • 4f6aec1 fix(docs): purge stale conf/ from help text, ToolD in env template
  • da38e0e fix(e2e): add .dagger files to fixture — required for link/source defaults
  • 426ba47 fix(e2e): add concepts.sh to Dockerfiles
  • df23e42 fix(e2e): add required flags to dotd --debug list in concepts.sh
  • 9e7998a fix(e2e): drop DEBU grep; --debug exit-0 is sufficient
  • 225294e fix(e2e): guard DOTD_VERSION after API resolution
  • f2790bd fix(ecosystem): roll own XDG helpers, move init.sh to XDG_DATA_HOME
  • c6b0ceb fix(env): add missing env API functions and fix CLI commands
  • 09c34bc fix(install): add checksum verification and --dry-run flag
  • 02a3300 fix(install): replace gh CLI with curl for public repo
  • 26702fa fix(install): update tag format from dotd-vX.Y.Z to vX.Y.Z
  • 1aea2e6 fix(lint): check f.Close error in test; drop explicit io.Reader type annotation
  • ba3e402 fix(lint): remove ineffectual label assignment in setup.go
  • 0c3829e fix(lint): resolve ineffassign, staticcheck, and unused function issues
  • dd15a5c fix(lint): use fmt.Fprintf in bundle.go; remove dead setup.go
  • 48a71c0 fix(output): route all output through cmd.Out/Err and apply ui color helpers
  • 2d62461 fix(pipeline): allow link with no dest when link_root set; skip fragment validation
  • f2f1131 fix(pipeline): unify conflict detection + dedup Act blocks (AUDIT-014, AUDIT-015)
  • b987baa fix(pipeline): when-precedence, parser-backed validation, registry wiring
  • 5a7bd0d fix(pipeline): wire compose/link/bin support so all integration tests pass
  • a4206b7 fix(predicate): wire installed()/installable() into evaluator (AUDIT-026)
  • a774519 fix(prompts): move byteReader into newHuhForm; simplify test and e2e inputs
  • 727d26f fix(prompts): route huh output to stderr; trim promptSelect result; doc adopt gap
  • d864d51 fix(test): check os.Unsetenv/Setenv error returns to satisfy errcheck
  • cd150ad fix(testdata): update fixtures to v2 annotation syntax
  • e5641e0 fix(walk): skip ecosystem config file when building nodes
  • 1f3ccb1 fix: AND/OR in WhenType description summary line
  • d3e70b8 fix: audit CLI help messages and check exit behavior
  • 854a2b0 fix: config/ links to ~/.config by default; separate home from config dir
  • 90e776f fix: flat env.yaml fixture and lint errcheck in main.go
  • 68c0f37 fix: p0 audit — eliminate all canonical resolution violations
  • 34c2cf3 fix: remove redundant flags, fix misleading package hint, simplify files cmd
  • 88f973d fix: rename Homebrew formula from dotd to dot-dagger
  • c81621d fix: route all default paths through ecosystem; fish config respects XDG
  • 4a43690 fix: route config/env DefaultPath through ecosystem XDG interface
  • 7be10f8 fix: silence usage output on command errors
  • 105bbee fix: skip .git in walk, normalize relative paths in init, improve wizard prompts
  • 2ed1217 fix: teardown dry-run, adopt non-TTY guard, compose check exit
  • e0327a0 fix: update @after refs in test fixtures to use shellrc. prefix
  • 47c50d6 fix: update setup wizard link root description to reference config/ and ~/.config
  • 83059d7 fix: wire logger to cmd.ErrOrStderr() so tests capture output; fix --verbose → --log-level debug
  • 006798c polish: pluralized counts, cleaner walk error, sync-risk comments
  • a293601 refactor(adopt): remove direct huh usage, use promptBool
  • 4ad4692 refactor(annotate): remove direct huh usage, route all I/O through prompts helpers; remove isTTYStdin bridge
  • 1862674 refactor(audit): enforce canonical constants and ui helper discipline
  • 6d1abcf refactor(cmd): adopt uses isTTYStdin helper (AUDIT-018)
  • 8a09fa7 refactor(cmd): consolidate prompt primitives in prompts.go (AUDIT-023)
  • e429cc3 refactor(cmd): extract runPipeline to deduplicate apply/check pipeline setup
  • 69c0de3 refactor(cmd): extract walkOrdered read-path helper (AUDIT-016)
  • 56621ee refactor(cmd): finish env.yaml literal replacement in filter_prompt (AUDIT-009)
  • 374c1cf refactor(cmd): replace pipeline.Filter callsites with filterWithPrompt
  • 6aa53b5 refactor(cmd): setup/init read resolved cfg.configPath (AUDIT-003)
  • c0714a2 refactor(cmd): shared pipeline preamble, unified arg/flag/banner helpers
  • 97818f0 refactor(cmd/dotd): three code-quality cleanups
  • 895bfe9 refactor(dotr): rename import command to adopt
  • f86a79a refactor(e2e): drop download blocks from exerciser scripts
  • 7f3fe2c refactor(e2e): rewrite run-e2e.sh for procurer/exerciser pattern
  • e08b624 refactor(env): single DOTD_ prefix constant (AUDIT-010)
  • b476b6a refactor(filter_prompt): remove huh, use promptInputs, fix os.Stderr
  • eadd403 refactor(internal): one atomic writer, shared constants, dead code out
  • facfc27 refactor(json): compose list --json returns array of objects
  • 8258c9d refactor(output): one channel policy, styled errors, drop dead Warn mode
  • d249d1b refactor(packages): generate install script instead of exec subprocess
  • d5ebef5 refactor(packages): named {package} token + catalog guard (AUDIT-005)
  • 1b45ab9 refactor(packages): single source for reserved keys (AUDIT-007)
  • 1ff616c refactor(pipeline): factory for single-file RawNode (AUDIT-024)
  • 6008f8a refactor(pipeline): inline composeGenName, share tilde expansion (AUDIT-020, AUDIT-021, AUDIT-030)
  • b89ecbe refactor(pipeline): single HasCompose predicate (AUDIT-019)
  • 715e8e3 refactor(pipeline): unify dir/file .dagger action parsing (AUDIT-013)
  • 1b2818b refactor(prompts): add canonical huh helpers with cobra I/O routing
  • e9d0ac0 refactor(setup): single scaffold path, wire/remove source-line writer (AUDIT-027, AUDIT-028)
  • d75a894 refactor: apply code review fixes across codebase
  • b218c63 refactor: centralize .dagger key vocabulary + tag guard test (AUDIT-006)
  • 755231c refactor: collapse suite into single dotd binary
  • b5480ca refactor: consolidate duplicated patterns into single-owner helpers
  • 62fa6fe refactor: decouple HomeDir from link-root; drop portable-path from initgen
  • 02c8737 refactor: eliminate magic strings and duplicated code throughout
  • 644f44a refactor: extract promptPath to eliminate 4 identical path-prompting blocks
  • 61e3549 refactor: named file-mode constants (AUDIT-011)
  • 3a06b0e refactor: reference env.yaml name from one constant in hints (AUDIT-009)
  • 85e0686 refactor: relocate generic fileExists helper to fileutil (AUDIT-025)
  • d851d61 refactor: remove all former sub-tool name references
  • 77f868b refactor: remove/implement dead exports (AUDIT-031)
  • 638fa95 refactor: rename .dot-dagger.yaml to .dotd.yaml, simplify CI/CD tags
  • b0ca74d refactor: rename conv dir conf/ → config/, link to ~/.config by default
  • bb570d6 refactor: resolve all open audit items (A-03, A-04, A-06–A-08, A-10–A-11)
  • abed01f refactor: share paren-splitter between annotation and pipeline (AUDIT-017)
  • 5b6d20b refactor: shared POSIX shebang constant (AUDIT-012)
  • 8557d0c refactor: single packages.yaml filename constant (AUDIT-004)
  • 1b7a06a refactor: single source for convention dir names (AUDIT-008)
  • 197035c refactor: strip dotd init to scaffold-only, add config.yaml precondition
  • 037368b style(cmd): consistent error prefixes (AUDIT-032)
  • 769e8e7 test(annotate): replace non-TTY error test with 4 wizard integration tests
  • dc6ed5e test(cmd): assert check detects drift, not just summary (AUDIT-061)
  • 9e86bfa test(cmd): conflict test hard-fails instead of self-skipping (AUDIT-060)
  • d6bca04 test(cmd): cover adopt command path (AUDIT-043)
  • 3e99a98 test(cmd): cover bundle transitive deps + env quoting (AUDIT-044)
  • 17dfb80 test(cmd): cover config commands + edit path (AUDIT-057)
  • da71960 test(cmd): cover get-os/get-hostname canonical detectors (AUDIT-058)
  • acf1f66 test(cmd): cover init scaffolding + idempotency (AUDIT-056)
  • 91983f3 test(cmd): cover interactive missing-key prompt (AUDIT-041)
  • 964be73 test(cmd): cover real env.yaml expansion path (AUDIT-068)
  • 8c32d08 test(cmd): cover unapply --all and flag shadow (AUDIT-059)
  • a757309 test(compose): add end-to-end coverage, remove stale skips (AUDIT-037)
  • 43163e4 test(compose): strengthen coverage from review (AUDIT-037)
  • 7d3d815 test(config): finish AUDIT-066 — config_test.go was missed in f80fa2d
  • 68dda30 test(config): strengthen linkRoot coverage from review (AUDIT-001)
  • f80fa2d test(config,env): cover Save errors + KnownFields strictness (AUDIT-066)
  • 6f63c9c test(e2e): add Ubuntu Dockerfile for e2e tests
  • 6c93c07 test(e2e): add adopt, bundle, dag-check, package-check shell e2e tests
  • a3a9fe8 test(e2e): add annotate Docker e2e tests
  • 4aae647 test(e2e): add bin and nested symlink tests
  • 8d0abc4 test(e2e): add binary test script
  • 494a10b test(e2e): add check and list tests
  • 8192d63 test(e2e): add combined test script
  • 538b87a test(e2e): add compose.sh and macos-apply.sh shell e2e tests
  • 5013d28 test(e2e): add config-cmds.sh and env-cmds.sh shell e2e tests
  • f72c079 test(e2e): add context and dag-order tests
  • 33e012a test(e2e): add coverage for env show annotation, env path, concepts, --debug
  • f425765 test(e2e): add disable, packages, and conflict tests
  • 26bcd3f test(e2e): add dry-run and idempotency tests
  • 27885df test(e2e): add host-side e2e runner script
  • 26b33cd test(e2e): add installer test script
  • 5bf5c8c test(e2e): add minimal fixture for e2e tests
  • 8909b21 test(e2e): add set -e to conflict.sh bootstrap section
  • 6a1de05 test(e2e): add setup, teardown-confirm, teardown-cancel, init shell e2e tests
  • 1fb0302 test(e2e): add unapply.sh and unapply-cancel.sh shell e2e tests
  • c9875c7 test(e2e): default suite builds from source to gate HEAD (AUDIT-062)
  • dec1f57 test(e2e): expand fixture — add bin/, nested conf/, predicate variants, packages
  • 088fd8f test(e2e): expect compose check non-zero, adopt --yes
  • 6141c9d test(e2e): extend binary and combined assertions for richer fixture
  • b60b483 test(e2e): fix dotd path consistency in context.sh
  • 0aed6b2 test(e2e): fix list.sh — add missing mkdir
  • b1c487f test(e2e): fix tests that passed without asserting correctness
  • b949e46 test(e2e): wire 11 new test scripts into Dockerfile and run-e2e.sh
  • b6aef0a test(e2e): wire adopt/bundle/dag-check/package-check into Dockerfiles and runners (Batch 5)
  • 5c1800b test(e2e): wire compose and macos-apply tests into Dockerfiles and runners (Batch 2)
  • 8223db3 test(e2e): wire config-cmds and env-cmds tests into Dockerfiles and runners (Batch 4)
  • b76f52f test(e2e): wire setup/init/teardown tests into Dockerfiles and runners (Batch 3)
  • ee38da5 test(e2e): wire unapply tests into Dockerfiles and runners (Batch 1)
  • 3393369 test(e2e/fixture): add dot-extras.sh.d compose target for Batch 2 tests
  • 117e976 test(ecosystem): add unit tests for ResolvePath and Default* functions
  • ff6c682 test(ecosystem): cover default paths + ResolvePath contracts (AUDIT-046, AUDIT-064)
  • b2572da test(env): cover triple-override + input immutability (AUDIT-065)
  • 9cfee54 test(fileutil): cover SaveYAML atomicity + cleanup (AUDIT-039)
  • a9ee63e test(integration): add TestAdoptShellScript_Integration and TestBundleOutput_Integration
  • 660c68e test(integration): add TestConfigCmdsLifecycle and TestEnvCmdsLifecycle
  • e120c34 test(integration): add TestSetupThenTeardown and TestInitAfterSetup
  • 634b895 test(integration): add TestUnapplyAfterApply and TestUnapplyCancel with runWithStdin harness
  • 1528e8e test(integration): add package management tests
  • 8e6f232 test(integration): update PackageRequireHardFail for generate command
  • d320eff test(package): cover check/generate command glue, remove stale skips (AUDIT-042)
  • ee84870 test(pipeline): assert disabled-node reporting (AUDIT-054)
  • 5978ace test(pipeline): cover .dagger files: dict handling (AUDIT-049)
  • 8633958 test(pipeline): cover Order self/unknown-ref handling (AUDIT-051)
  • cc1058f test(pipeline): cover createSymlink force/no-clobber paths (AUDIT-048)
  • f394ffb test(pipeline): cover deriveLinkDest dot-/nosync- rewriting (AUDIT-038)
  • 704a568 test(pipeline): cover deterministic tie-break ordering (AUDIT-050)
  • 0b0a5c8 test(pipeline): cover two-explicit-link merge handoff (AUDIT-055)
  • 192e4b3 test(pipeline): cover ~bin destination expansion (AUDIT-047)
  • 5687657 test(predicate): cover Keys/And/OR key collection (AUDIT-045, AUDIT-053)
  • a25e38e test(predicate): cover NewEvaluator + nil-registry path (AUDIT-052)
  • a10826d test(predicate): cover Register panic + MissingKeyError (AUDIT-063)
  • e9701ac test(prompts): close /dev/null inline, no defer wrapper needed
  • cf9d2ee test(setup): add unit tests for Scaffold
  • 91e60c0 test(setup): cover shell RC detection + source-line round-trip (AUDIT-040)
  • 2dc0dff test(ui,log): add baseline coverage (AUDIT-067)