script/ and Makefile drift from the org models; make dev is not a shim, make build is missing #28

Open
opened 2026-08-09 03:45:41 +02:00 by clawbot · 0 comments
Collaborator

Problem

Diffed all 12 script/ files against the models in the prompts repo. Three are byte-identical (check, setup, precommit); nine diverge. Verified on main at fbfe1df.

1. script/docker was edited despite being a must-stay-identical file

REPO_POLICIES.md explicitly names the scripts that stay byte-identical across all repos so they can be maintained centrally — script/projectname, script/docker, and friends. script/docker diverges:

  • Line 3: the comment "Identical in all repos; the tag comes from script/projectname." — the very line warning against this — was deleted and replaced.
  • Line 11: docker build -t ... . became timeout 300 docker build -t ... ..

The timeout 300 presumably enforces "Docker builds must complete in under 5 minutes", but that policy does not authorize editing a shared file. If the timeout belongs anywhere it belongs in the model, upstream.

2. script/lint is a duplicate of script/fmt-check — there is no JS linter

Both now run yarn prettier --check .. They are behaviourally identical, so script/check runs the same prettier pass twice and the repo has no actual linter for JavaScript.

README.md:162 acknowledges it: "Add eslint for JS linting (currently lint target runs prettier only)". No eslint config exists anywhere — no .eslintrc*, no eslint.config.js, no eslintConfig key.

Contrast the backend, which has a real linter. The frontend — 1262 lines of JavaScript — has none.

3. Other script divergences

File Divergence
script/bootstrap Adds an APT_UPDATED guard and an apt-get update before install — a functional change from the model. Pinned-versions date comment moved 2026-07-06 -> 2026-07-07.
script/fmt Model: yarn run prettier --write '**/*.md' --tab-width 4 --prose-wrap always. Repo: yarn prettier --write .. The repo version is arguably better for a JS repo (it formats JS/CSS/HTML too, and .prettierrc supplies the flags) but it drops yarn run.
script/fmt-check Same shape of change as fmt.
script/cibuild Comment says "The Dockerfile runs make check"; model says script/check. Body identical.
script/install-precommit Uses the "$hook" variable it declares rather than the literal path. Cosmetic improvement.
script/test See #21 — it runs yarn build as the test.

Not a finding: all 12 scripts are correct POSIX sh with #!/bin/sh, set -eu, and the mandated repo-root idiom.

4. Makefile gaps

  • make dev is not a thin shim. Makefile:13-14 runs yarn dev inline; there is no script/dev. This breaks the shim pattern and the "always use Makefile targets instead of invoking the underlying tools directly" rule at the layer below. It is also the only target missing a leading @.
  • No make build target. REPO_POLICIES.md requires targets "for every common operation... building artifacts (make build)", and CODE_STYLEGUIDE_JS.md prefers make build. package.json has a build script; the Makefile does not expose it. No run, preview, or clean either.
  • All nine required targets are present. This is about the "Makefile is authoritative documentation" rule, not the required set.

5. .prettierignore hides the backend from formatting

.prettierignore:5 excludes backend/. Since script/fmt-check runs yarn prettier --check ., every markdown file under backend/ escapes make check entirely. backend/README.md's config table is visibly misaligned as a direct result.

6. .claude entries in committed repo config

.dockerignore:5 (.claude) and .prettierignore:5 (.claude/) are agent-tooling residue committed into shared repo configuration. They are additions to the models, inconsistent with each other, and inconsistent with .gitignore, which does not list the directory at all. They should not be in the repo's shared config — a developer-local ignore belongs in .git/info/exclude.

Definition of done

  • script/docker is restored to the model byte-for-byte. If the 5-minute timeout is worth keeping, propose it upstream in the prompts repo rather than diverging here — note in the PR which you did.
  • script/lint runs a real JavaScript linter. eslint is the default choice; use its modern flat config (eslint.config.js). script/fmt-check keeps prettier. The two must stop being duplicates.
  • All lint findings from the new linter are fixed, or the rule is deliberately disabled with a written justification in the config.
  • make dev shims to a script/dev, consistent with every other target, and gains its leading @.
  • make build exists and shims to a script/build.
  • .prettierignore no longer excludes backend/; markdown under backend/ is formatted and passes make fmt-check.
  • .claude / .claude/ entries are removed from .dockerignore and .prettierignore.
  • The remaining script divergences are either reverted to the model or, where the repo's version is genuinely better, left in place with a one-line comment in the script saying why it differs. Decide per file and list your decisions in the PR.
  • README Entrypoints section updated for any new or changed script.
  • make check passes and still does not modify tracked files.
  • TODO.md updated in the same commit.
  • Commit title ends with (closes #N).

Implementation requirements

  • Scripts stay POSIX sh: #!/bin/sh, set -eu, no bashisms, repo-root idiom $(cd "$(dirname "$0")/.." && pwd -P).
  • Coordinate with #16, which also restructures script/ to cover the backend. These two overlap heavily — land #16 first and rebase this onto it, or fold this into #16 if the implementer finds them inseparable. Say which in the PR.
  • Do not change script/test's substance here; #21 owns that.
  • eslint config choices should follow the JS styleguide; do not invent house rules.
  • make targets and script/ entrypoints only.
  • No attribution trailers in the commit message.
## Problem Diffed all 12 `script/` files against the models in the `prompts` repo. Three are byte-identical (`check`, `setup`, `precommit`); nine diverge. Verified on `main` at `fbfe1df`. ### 1. `script/docker` was edited despite being a must-stay-identical file `REPO_POLICIES.md` explicitly names the scripts that stay byte-identical across all repos so they can be maintained centrally — `script/projectname`, `script/docker`, and friends. `script/docker` diverges: - Line 3: the comment "Identical in all repos; the tag comes from script/projectname." — the very line warning against this — was **deleted** and replaced. - Line 11: `docker build -t ... .` became `timeout 300 docker build -t ... .`. The `timeout 300` presumably enforces "Docker builds must complete in under 5 minutes", but that policy does not authorize editing a shared file. If the timeout belongs anywhere it belongs in the model, upstream. ### 2. `script/lint` is a duplicate of `script/fmt-check` — there is no JS linter Both now run `yarn prettier --check .`. They are behaviourally identical, so `script/check` runs the same prettier pass **twice** and the repo has no actual linter for JavaScript. `README.md:162` acknowledges it: "Add eslint for JS linting (currently lint target runs prettier only)". No eslint config exists anywhere — no `.eslintrc*`, no `eslint.config.js`, no `eslintConfig` key. Contrast the backend, which has a real linter. The frontend — 1262 lines of JavaScript — has none. ### 3. Other script divergences | File | Divergence | | --- | --- | | `script/bootstrap` | Adds an `APT_UPDATED` guard and an `apt-get update` before install — a functional change from the model. Pinned-versions date comment moved 2026-07-06 -> 2026-07-07. | | `script/fmt` | Model: `yarn run prettier --write '**/*.md' --tab-width 4 --prose-wrap always`. Repo: `yarn prettier --write .`. The repo version is arguably better for a JS repo (it formats JS/CSS/HTML too, and `.prettierrc` supplies the flags) but it drops `yarn run`. | | `script/fmt-check` | Same shape of change as `fmt`. | | `script/cibuild` | Comment says "The Dockerfile runs make check"; model says `script/check`. Body identical. | | `script/install-precommit` | Uses the `"$hook"` variable it declares rather than the literal path. Cosmetic improvement. | | `script/test` | See #21 — it runs `yarn build` as the test. | Not a finding: all 12 scripts are correct POSIX sh with `#!/bin/sh`, `set -eu`, and the mandated repo-root idiom. ### 4. Makefile gaps - **`make dev` is not a thin shim.** `Makefile:13-14` runs `yarn dev` inline; there is no `script/dev`. This breaks the shim pattern and the "always use Makefile targets instead of invoking the underlying tools directly" rule at the layer below. It is also the only target missing a leading `@`. - **No `make build` target.** `REPO_POLICIES.md` requires targets "for every common operation... building artifacts (`make build`)", and `CODE_STYLEGUIDE_JS.md` prefers `make build`. `package.json` has a `build` script; the Makefile does not expose it. No `run`, `preview`, or `clean` either. - All nine *required* targets are present. This is about the "Makefile is authoritative documentation" rule, not the required set. ### 5. `.prettierignore` hides the backend from formatting `.prettierignore:5` excludes `backend/`. Since `script/fmt-check` runs `yarn prettier --check .`, every markdown file under `backend/` escapes `make check` entirely. `backend/README.md`'s config table is visibly misaligned as a direct result. ### 6. `.claude` entries in committed repo config `.dockerignore:5` (`.claude`) and `.prettierignore:5` (`.claude/`) are agent-tooling residue committed into shared repo configuration. They are additions to the models, inconsistent with each other, and inconsistent with `.gitignore`, which does not list the directory at all. They should not be in the repo's shared config — a developer-local ignore belongs in `.git/info/exclude`. ## Definition of done - [ ] `script/docker` is restored to the model byte-for-byte. If the 5-minute timeout is worth keeping, propose it upstream in the `prompts` repo rather than diverging here — note in the PR which you did. - [ ] `script/lint` runs a real JavaScript linter. **eslint is the default choice**; use its modern flat config (`eslint.config.js`). `script/fmt-check` keeps prettier. The two must stop being duplicates. - [ ] All lint findings from the new linter are fixed, or the rule is deliberately disabled with a written justification in the config. - [ ] `make dev` shims to a `script/dev`, consistent with every other target, and gains its leading `@`. - [ ] `make build` exists and shims to a `script/build`. - [ ] `.prettierignore` no longer excludes `backend/`; markdown under `backend/` is formatted and passes `make fmt-check`. - [ ] `.claude` / `.claude/` entries are removed from `.dockerignore` and `.prettierignore`. - [ ] The remaining script divergences are either reverted to the model or, where the repo's version is genuinely better, left in place with a one-line comment in the script saying why it differs. Decide per file and list your decisions in the PR. - [ ] README **Entrypoints** section updated for any new or changed script. - [ ] `make check` passes and still does not modify tracked files. - [ ] `TODO.md` updated in the same commit. - [ ] Commit title ends with ` (closes #N)`. ## Implementation requirements - Scripts stay POSIX sh: `#!/bin/sh`, `set -eu`, no bashisms, repo-root idiom `$(cd "$(dirname "$0")/.." && pwd -P)`. - Coordinate with #16, which also restructures `script/` to cover the backend. These two overlap heavily — **land #16 first** and rebase this onto it, or fold this into #16 if the implementer finds them inseparable. Say which in the PR. - Do not change `script/test`'s substance here; #21 owns that. - eslint config choices should follow the JS styleguide; do not invent house rules. - `make` targets and `script/` entrypoints only. - No attribution trailers in the commit message.
clawbot added this to the 1.0.0 milestone 2026-08-09 03:45:41 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/netwatch#28