web/dist/.keep missing despite AGENTS.md claim; fresh worktrees cannot build/test #300

Closed
opened 2026-09-10 19:22:19 +00:00 by crueber · 3 comments
Owner

AGENTS.md field lessons claim web/dist/.keep is tracked so fresh clones compile (go:embed all:dist fails on a missing directory), but the file exists on neither main nor recent branches (deleted in a1134a6). Consequences observed repeatedly: fresh scratch worktrees fail go build/vet/test with 'pattern all:dist: no matching files found', forcing placeholder shims. Fix: restore web/dist/.keep (or equivalent embed-safe guard) and assert its presence in CI. Acceptance: fresh git worktree + go build ./... green with no manual dist creation.

AGENTS.md field lessons claim web/dist/.keep is tracked so fresh clones compile (go:embed all:dist fails on a missing directory), but the file exists on neither main nor recent branches (deleted in a1134a6). Consequences observed repeatedly: fresh scratch worktrees fail go build/vet/test with 'pattern all:dist: no matching files found', forcing placeholder shims. Fix: restore web/dist/.keep (or equivalent embed-safe guard) and assert its presence in CI. Acceptance: fresh git worktree + go build ./... green with no manual dist creation.
Author
Owner

Fixed by #305 (branch fix/issue-300): restored web/dist/.keep + CI presence guards in Woodpecker vet and the GH docker test job. Verified fresh scratch worktree go build ./... green.

Fixed by #305 (branch fix/issue-300): restored web/dist/.keep + CI presence guards in Woodpecker vet and the GH docker test job. Verified fresh scratch worktree go build ./... green.
Author
Owner

Review of PR #305 (branch fix/issue-300), verified in scratch worktree /tmp/walhub-300 @185a745 (reused existing worktree; /tmp/pr305 not created; nothing created to remove). Main worktree untouched (still clean; only pre-existing untracked .opencode/).

FINDINGS (all pass):

  1. web/dist/.keep restored empty (0 bytes) — matches original exactly (git cat-file -s a1134a6^:web/dist/.keep = 0; deleted in a1134a6 SSH commit, now restored as new file mode 100644 e69de29).
  2. .woodpecker/pipeline.yaml:10-14 — guard 'test -f web/dist/.keep || (echo FAIL... && exit 1)' placed as first command of the vet step, before 'make vet'. Correct: vet is the first CI step and runs 'go vet ./...' which triggers the go:embed all:dist resolution (web/embed.go:12), so a re-deletion fails fast with a clear message. Ruby YAML.load_file parses OK.
  3. .github/workflows/docker.yml:25-28 — named step 'embed guard (web/dist/.keep present)' placed immediately after actions/checkout, before pnpm setup and the web build. Correct: this workflow's test job builds web/ before go test, so without the guard a missing .keep would only surface later; the guard fails fast on fresh checkouts. Ruby YAML.load_file parses OK. Comment correctly cites 'Forgejo #300' (origin tracker).
  4. Diff minimal: exactly 3 files (2 YAML guards + .keep), 9 insertions/1 deletion (the 1 deletion is the reflowed 'commands: [make vet]' line). No other changes.
  5. .gitignore:10-11 (web/dist/* + !web/dist/.keep) and .dockerignore:20-21 (web/dist + !web/dist/.keep) exceptions already present — verified, no duplication added by this PR. Correct.

VERIFICATION:

  • go build ./... in scratch worktree: EXIT 0 (acceptance criterion green).
  • Guard logic simulated both ways: present -> exit 0; missing -> 'FAIL: web/dist/.keep missing (see #300)' + exit 1.
  • No python yaml module available (and no system packages per review constraints); used ruby YAML.load_file instead — both files parse.
  • No fixes needed; nothing pushed. No docker/compose changes, no browser drive (noted per instructions — change is CI-guard + empty placeholder, no browser-facing surface).

MERGE RECOMMENDATION: ready to merge.

Review of PR #305 (branch fix/issue-300), verified in scratch worktree /tmp/walhub-300 @185a745 (reused existing worktree; /tmp/pr305 not created; nothing created to remove). Main worktree untouched (still clean; only pre-existing untracked .opencode/). FINDINGS (all pass): 1. web/dist/.keep restored empty (0 bytes) — matches original exactly (git cat-file -s a1134a6^:web/dist/.keep = 0; deleted in a1134a6 SSH commit, now restored as new file mode 100644 e69de29). 2. .woodpecker/pipeline.yaml:10-14 — guard 'test -f web/dist/.keep || (echo FAIL... && exit 1)' placed as first command of the vet step, before 'make vet'. Correct: vet is the first CI step and runs 'go vet ./...' which triggers the go:embed all:dist resolution (web/embed.go:12), so a re-deletion fails fast with a clear message. Ruby YAML.load_file parses OK. 3. .github/workflows/docker.yml:25-28 — named step 'embed guard (web/dist/.keep present)' placed immediately after actions/checkout, before pnpm setup and the web build. Correct: this workflow's test job builds web/ before go test, so without the guard a missing .keep would only surface later; the guard fails fast on fresh checkouts. Ruby YAML.load_file parses OK. Comment correctly cites 'Forgejo #300' (origin tracker). 4. Diff minimal: exactly 3 files (2 YAML guards + .keep), 9 insertions/1 deletion (the 1 deletion is the reflowed 'commands: [make vet]' line). No other changes. 5. .gitignore:10-11 (web/dist/* + !web/dist/.keep) and .dockerignore:20-21 (web/dist + !web/dist/.keep) exceptions already present — verified, no duplication added by this PR. Correct. VERIFICATION: - go build ./... in scratch worktree: EXIT 0 (acceptance criterion green). - Guard logic simulated both ways: present -> exit 0; missing -> 'FAIL: web/dist/.keep missing (see #300)' + exit 1. - No python yaml module available (and no system packages per review constraints); used ruby YAML.load_file instead — both files parse. - No fixes needed; nothing pushed. No docker/compose changes, no browser drive (noted per instructions — change is CI-guard + empty placeholder, no browser-facing surface). MERGE RECOMMENDATION: ready to merge.
Author
Owner

Fixed by PR #305 (review clean; byte-identical restore + CI guards verified; fresh build green), merged. Closing.

Fixed by PR #305 (review clean; byte-identical restore + CI guards verified; fresh build green), merged. Closing.
crueber added this to the v1 milestone 2026-09-10 22:27:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
crueber/walhub#300
No description provided.