The repo now has a .prettierignore but still no .prettierrc. REPO_POLICIES.md lists .prettierrc among the standard files for repos that carry prettier-formatted assets, and the project has first-party JS under static/js/ that script/fmt formats with npx prettier. Today the only pinned setting is the --tab-width 4 flag hard-coded in script/fmt; everything else falls back to whatever the host prettier version defaults to. That makes formatting non-deterministic across machines and prettier versions (a host-vs-CI prettier difference has already been noted as churn in PR review).
This is hygiene only: prettier is not in the make check / fmt-check gate, so main cannot regress from it. Unmilestoned so it does not gate the 1.1.0 release.
Definition of done
Add a root .prettierrc capturing the project prettier settings (at minimum tabWidth: 4, and proseWrap: always for markdown per the shared house style; align with the settings referenced in REPO_POLICIES.md).
script/fmt relies on the config file rather than passing --tab-width inline (or, if kept inline, the flag and the config agree).
make fmt on a clean tree still produces zero modifications; first-party JS and markdown remain formatted; vendored static/js/alpine.min.js stays byte-identical.
Decide whether prettier itself should be pinned (package.json + yarn.lock) or left as a host tool; state the decision in the PR. Full pinning of the JS toolchain (node/prettier via hash-verified nvm) may be split into its own issue if larger.
Lands via PR from a feature branch off next.
Model: opus-4-8
Follow-up observed while reviewing https://git.eeqj.de/sneak/upaas/pulls/195.
The repo now has a `.prettierignore` but still no `.prettierrc`. `REPO_POLICIES.md` lists `.prettierrc` among the standard files for repos that carry prettier-formatted assets, and the project has first-party JS under `static/js/` that `script/fmt` formats with `npx prettier`. Today the only pinned setting is the `--tab-width 4` flag hard-coded in `script/fmt`; everything else falls back to whatever the host prettier version defaults to. That makes formatting non-deterministic across machines and prettier versions (a host-vs-CI prettier difference has already been noted as churn in PR review).
This is hygiene only: prettier is not in the `make check` / `fmt-check` gate, so `main` cannot regress from it. Unmilestoned so it does not gate the 1.1.0 release.
## Definition of done
- Add a root `.prettierrc` capturing the project prettier settings (at minimum `tabWidth: 4`, and `proseWrap: always` for markdown per the shared house style; align with the settings referenced in `REPO_POLICIES.md`).
- `script/fmt` relies on the config file rather than passing `--tab-width` inline (or, if kept inline, the flag and the config agree).
- `make fmt` on a clean tree still produces zero modifications; first-party JS and markdown remain formatted; vendored `static/js/alpine.min.js` stays byte-identical.
- Decide whether prettier itself should be pinned (package.json + yarn.lock) or left as a host tool; state the decision in the PR. Full pinning of the JS toolchain (node/prettier via hash-verified nvm) may be split into its own issue if larger.
- Lands via PR from a feature branch off `next`.
Model: opus-4-8
Added a root .prettierrc (JSON: tabWidth: 4, proseWrap: always) and removed the redundant inline --tab-width 4 from script/fmt, so the config file is the single source of truth. make fmt on a clean tree is a no-op (JS unchanged, vendored alpine.min.js untouched via .prettierignore); make check passes.
script/fmt runs prettier only on static/js/*.js, so markdown formatting was not added to the tooling — that would reflow every .md file and break the zero-modification requirement. Prettier left as a host tool (no package.json exists; it is not in the gate, so main cannot regress); full JS-toolchain pinning left to its own issue.
Model: opus-4-8
Opened https://git.eeqj.de/sneak/upaas/pulls/202 (base `next`).
Added a root `.prettierrc` (JSON: `tabWidth: 4`, `proseWrap: always`) and removed the redundant inline `--tab-width 4` from `script/fmt`, so the config file is the single source of truth. `make fmt` on a clean tree is a no-op (JS unchanged, vendored `alpine.min.js` untouched via `.prettierignore`); `make check` passes.
`script/fmt` runs prettier only on `static/js/*.js`, so markdown formatting was not added to the tooling — that would reflow every `.md` file and break the zero-modification requirement. Prettier left as a host tool (no `package.json` exists; it is not in the gate, so `main` cannot regress); full JS-toolchain pinning left to its own issue.
Model: opus-4-8
Closing as superseded by #203. The DoD here (deterministic prettier) is correct, but the fix is to vendor the canonical .prettierrc and pinned prettier toolchain from the sneak/prompts scaffold rather than hand-author a repo-local config; #203 carries that scope.
Model: opus-4-8
Closing as superseded by https://git.eeqj.de/sneak/upaas/issues/203. The DoD here (deterministic prettier) is correct, but the fix is to vendor the canonical `.prettierrc` and pinned prettier toolchain from the `sneak/prompts` scaffold rather than hand-author a repo-local config; #203 carries that scope.
Model: opus-4-8
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Follow-up observed while reviewing #195.
The repo now has a
.prettierignorebut still no.prettierrc.REPO_POLICIES.mdlists.prettierrcamong the standard files for repos that carry prettier-formatted assets, and the project has first-party JS understatic/js/thatscript/fmtformats withnpx prettier. Today the only pinned setting is the--tab-width 4flag hard-coded inscript/fmt; everything else falls back to whatever the host prettier version defaults to. That makes formatting non-deterministic across machines and prettier versions (a host-vs-CI prettier difference has already been noted as churn in PR review).This is hygiene only: prettier is not in the
make check/fmt-checkgate, somaincannot regress from it. Unmilestoned so it does not gate the 1.1.0 release.Definition of done
.prettierrccapturing the project prettier settings (at minimumtabWidth: 4, andproseWrap: alwaysfor markdown per the shared house style; align with the settings referenced inREPO_POLICIES.md).script/fmtrelies on the config file rather than passing--tab-widthinline (or, if kept inline, the flag and the config agree).make fmton a clean tree still produces zero modifications; first-party JS and markdown remain formatted; vendoredstatic/js/alpine.min.jsstays byte-identical.next.Model: opus-4-8
Opened #202 (base
next).Added a root
.prettierrc(JSON:tabWidth: 4,proseWrap: always) and removed the redundant inline--tab-width 4fromscript/fmt, so the config file is the single source of truth.make fmton a clean tree is a no-op (JS unchanged, vendoredalpine.min.jsuntouched via.prettierignore);make checkpasses.script/fmtruns prettier only onstatic/js/*.js, so markdown formatting was not added to the tooling — that would reflow every.mdfile and break the zero-modification requirement. Prettier left as a host tool (nopackage.jsonexists; it is not in the gate, somaincannot regress); full JS-toolchain pinning left to its own issue.Model: opus-4-8
Closing as superseded by #203. The DoD here (deterministic prettier) is correct, but the fix is to vendor the canonical
.prettierrcand pinned prettier toolchain from thesneak/promptsscaffold rather than hand-author a repo-local config; #203 carries that scope.Model: opus-4-8