All checks were successful
check / check (push) Successful in 59s
REPO_POLICIES.md scopes prettier to JS/CSS/Markdown/HTML, but script/fmt
and script/fmt-check covered only '*.md' - top-level markdown. The
canonical scripts use '**/*.md'. Both now run over '**/*.md' and
'**/*.css', and both header comments, which still described the old
top-level-only scope, were rewritten.
That brings themes/loravega/static/css/style.css into the gate. It is
inlined into every page by baseof.html via readFile, and its formatting
is whitespace-only: the minified <style> block in the built
public/index.html is byte-identical across the reformat, which is the
preceding commit.
Two paths are excluded, each with the reason recorded in
.prettierignore so the exclusion reads as a decision rather than an
oversight:
themes/loravega/layouts/ - these are not HTML. They are Go templates
carrying {{ define }}, {{ block }}, {{ .Content }} and
{{ readFile ... | safeCSS }}, and prettier has no Go-template parser; it
would fail or reflow the delimiters into markup Hugo cannot parse.
Covering them needs an out-of-tree plugin and therefore a package.json,
which this repo deliberately does not have.
content/ - excluded on measurement, not on the earlier assumption. With
content/ in scope, prettier re-wrapped one list item in
content/_index.md, and the rendered public/index.html changed with it:
the wrap landed as a literal newline between "7 PM at" and the following
<a> tag. HTML collapses that newline to a space, so the page looks the
same, but the published bytes do not match, and this content carries raw
div/span/br blocks that goldmark passes through verbatim because
hugo.toml sets markup.goldmark.renderer.unsafe = true. A formatter that
can silently change a published page is not worth the consistency.
archetypes/ stays covered - it is a template for new content, not
published output, and prettier leaves it unchanged.
Verified by extracting public/ from the built image before and after.
With the final scope, index.html, index.xml and sitemap.xml are
byte-identical; only the verbatim-copied public/css/style.css differs,
in whitespace. Each commit on this branch passes make check on its own -
the reformat lands first, under the old narrow glob that does not look
at CSS, so the widening commit arrives on an already-clean tree and no
merge commit is required to land it.
172 lines
11 KiB
Markdown
172 lines
11 KiB
Markdown
# Workflow
|
|
|
|
- branch (from `main`)
|
|
- do the work in Next Step
|
|
- move Next Step to the top of Completed Steps
|
|
- move the top item of Future Steps into Next Step
|
|
- commit (`TODO.md` changes in the same commit as the work)
|
|
- merge to `main` if the branch is not protected, otherwise open a PR
|
|
- push
|
|
|
|
# Status
|
|
|
|
pre-1.0
|
|
|
|
No git tags. The site is live and now has the scripts-to-rule-them-all scaffold
|
|
(`Makefile`, `script/`, `Dockerfile`, `check.yml`) and the canonical policy
|
|
dotfiles; `LICENSE` is the only mandated file still missing. Every external
|
|
reference in the repo is now pinned by cryptographic hash (or, for the wrangler
|
|
CLI install, an exact version), and the Hugo that builds the published site is a
|
|
deliberate pinned version rather than whatever the base image's package repo
|
|
serves.
|
|
|
|
# Next Step
|
|
|
|
Add `LICENSE` (#10) and replace the README's "content is provided as-is" note
|
|
with the committed license. Blocked on the owner's choice of license — the
|
|
remaining policy scaffold is otherwise complete.
|
|
|
|
# Completed Steps
|
|
|
|
- 2026-08-09: widened the prettier gate from top-level markdown to `'**/*.md'`
|
|
and `'**/*.css'` (closes #12). `themes/loravega/static/css/style.css` was
|
|
never formatted or gated even though it is inlined into every page; it is now
|
|
both, and the reformat landed as its own commit ahead of the script change so
|
|
no commit in the branch is red. `content/` is excluded in `.prettierignore`,
|
|
and that exclusion is measured rather than assumed: with `content/` in scope,
|
|
prettier re-wrapped one list item in `content/_index.md` and the rendered
|
|
`public/index.html` changed with it (the wrap became a literal newline between
|
|
`7 PM at` and the following `<a>`). HTML collapses that newline to a space so
|
|
the page looks identical, but the published bytes are not, and this content
|
|
carries raw HTML that goldmark passes through verbatim under `unsafe = true`.
|
|
`themes/loravega/layouts/` is excluded too, with the reason recorded: those
|
|
files are Go templates, not HTML, and prettier has no parser for `{{ ... }}` —
|
|
covering them would need a plugin and therefore a `package.json`. Verified by
|
|
extracting `public/` from the built image before and after: with the final
|
|
scope, `index.html`, `index.xml` and `sitemap.xml` are byte-identical and only
|
|
the verbatim-copied `public/css/style.css` changes, in whitespace only — the
|
|
minified `<style>` block inlined into `index.html` is unchanged, which is the
|
|
direct evidence that CSS formatting cannot reach the rendered page
|
|
- 2026-08-09: added the canonical policy dotfiles and hardened both ignore files
|
|
(closes #8). `REPO_POLICIES.md` is a byte-identical copy of the canonical
|
|
`prompts` file, front matter intact; `.editorconfig`, `.prettierrc` and
|
|
`.prettierignore` are the canonical contents. `.gitignore` keeps its three
|
|
Hugo lines and gains the OS/editor/node/secrets block plus `.claude/`, so a
|
|
clean checkout with agent tooling present is `git status`-clean and a stray
|
|
key or `.env` can no longer be committed. `.dockerignore` gained the same
|
|
coverage but **not** the same syntax: it matches with Go's `filepath.Match`
|
|
rules extended with `**`, where `*` does not cross `/` and an unprefixed
|
|
pattern is anchored at the context root, so every depth-independent pattern
|
|
carries an explicit `**/` prefix and only the genuinely root-anchored entries
|
|
(`.git`, `public`, `resources`, `.hugo_build.lock`) go bare. Verified by
|
|
planting `.env`, `*.key`, `*.pem` and `node_modules` two directories deep: the
|
|
unprefixed form shipped all of them into the image and the `**/` form ships
|
|
none. Excluding `.claude/` also takes `worktrees/` — entire additional
|
|
checkouts of this repo — out of the build context; #23's two-consecutive-run
|
|
proof was re-run against the smaller context, since that issue was validated
|
|
against the old one. Note the canonical upstream `REPO_POLICIES.md` is not
|
|
clean under this repo's prettier settings, so the reformat is a separate
|
|
follow-up commit rather than churn mixed into this one
|
|
- 2026-08-09: stopped `script/cibuild` reporting a green it never earned (closes
|
|
#23). `COPY . .` is keyed on content, so on an unchanged tree Docker served
|
|
`RUN make check` from cache: the checks never executed and the build still
|
|
exited 0. Three separate reviewers had already been fooled by it here. The
|
|
`Dockerfile` now declares `ARG CHECK_EPOCH` below `COPY . .` with no default
|
|
(a default is a constant, and a constant is a stable cache key), guards it
|
|
with `RUN [ -n "$CHECK_EPOCH" ] || exit 1`, and expands it into the check
|
|
command; `script/cibuild` and `script/docker` both pass
|
|
`epoch="$(date +%s%N)$$"` — assigned on its own line, because a failing
|
|
command substitution inside an argument does not trip `set -e`, and with `$$`
|
|
because busybox `date` drops `%N` silently. This is the canonical shape
|
|
settled upstream in `prompts` #26, which has not merged there yet, so it may
|
|
need re-syncing. Verified with two consecutive runs on an unchanged tree that
|
|
both executed the checks while `RUN script/bootstrap` stayed `CACHED`, a
|
|
constant-epoch counterfactual that restored the false green, and a planted
|
|
prettier failure that failed the build
|
|
- 2026-08-09: disabled the unused `taxonomy` and `term` page kinds in
|
|
`hugo.toml` (closes #13). Hugo enables the `tags` and `categories` taxonomies
|
|
by default; this single-page site has no taxonomy terms and no taxonomy
|
|
templates, so every build emitted
|
|
`WARN found no layout file for "html" for kind "taxonomy"` and generated
|
|
`categories/index.xml` and `tags/index.xml` that nothing links to. Re-verified
|
|
the warning still occurs on the now-pinned hugo v0.164.0 rather than trusting
|
|
the issue's text, which predates the version move. `make test` and `make lint`
|
|
are now `WARN`-free, so the build's noise floor is zero and the next warning
|
|
will be visible. `public/` is otherwise byte-identical — `index.html`,
|
|
`css/style.css` and the RSS `index.xml` all unchanged — and `sitemap.xml` is
|
|
still generated, now listing only the home page instead of two taxonomy URLs
|
|
- 2026-08-09: replaced `hugo.toml`'s deprecated `languageCode` key with `locale`
|
|
(closes #18). Hugo deprecated `languageCode` in v0.158.0, so the Hugo pinned
|
|
in the preceding commit warns about it; left alone it would become a third
|
|
routinely-ignored warning, and a latent breakage when the key is removed.
|
|
Deliberately sequenced **after** the Hugo version move and in the same branch:
|
|
under the apk hugo 0.139.0 that CI ran until now, `locale` is an unknown key
|
|
that is silently ignored, which downgrades the generated RSS from
|
|
`<language>en-us</language>` to `<language>en</language>` with no warning and
|
|
exit 0. Verified on hugo v0.164.0 that the RSS `<language>` still reads
|
|
`en-us`, the `lang` attribute is unchanged, and `public/` is byte-identical to
|
|
the preceding commit's output
|
|
- 2026-08-09: installed Hugo at a deliberate, hash-verified version instead of
|
|
taking whatever alpine ships (closes #26). `script/bootstrap` no longer does
|
|
`pkg_install hugo`; it installs `github.com/gohugoio/hugo@v0.164.0` with
|
|
`go install`, which verifies the module against `sum.golang.org`. The version
|
|
is a commented constant, as is the Go toolchain (`go1.26.5`) — hugo v0.164.0
|
|
requires go >= 1.26.0 and alpine 3.21 ships go 1.23.9 with
|
|
`GOTOOLCHAIN=local`, so a bare `go install` refuses to run. `CGO_ENABLED=0` is
|
|
deliberate: standard Hugo, not extended, because this site has no SCSS, no
|
|
`resources.ToCSS`, no PostCSS and no image processing. This moves the build
|
|
off apk's hugo 0.139.0, about two years behind, onto the current stable.
|
|
Rendered output across the whole `public/` tree is unchanged except the
|
|
`meta name=generator` version string
|
|
- 2026-08-09: made `script/check` run `script/lint` (closes #9). It previously
|
|
ran only `fmt-check` then `test`, so `script/lint` executed nowhere — not in
|
|
`make check`, not in the pre-commit hook, and not in CI, even though the
|
|
`Dockerfile` runs `make check` and `script/cibuild` builds it. It now runs
|
|
`test`, `lint`, `fmt-check` in the canonical order, so the
|
|
`hugo --printPathWarnings` render-target-collision signal is no longer
|
|
discarded. `README.md`'s Entrypoints line was corrected to match
|
|
- 2026-08-09: hash-pinned every external reference in
|
|
`.gitea/workflows/deploy.yml` (closes #7): both job container images are
|
|
pinned by digest, all three `uses:` are pinned by 40-hex commit SHA, and the
|
|
wrangler install is pinned to an exact version. The abandoned
|
|
`klakegg/hugo:ext-alpine` image is gone: the build job now runs on the same
|
|
pinned `alpine` digest the `Dockerfile` uses, with a pre-checkout
|
|
`apk add nodejs git tar` step (the Actions runner needs `node` inside the job
|
|
container to execute JavaScript actions), an explicit `shell: sh` default,
|
|
then `script/bootstrap` and `script/test`. The `deploy` job is guarded with
|
|
`if: github.ref_name == 'main'` so it can never publish from a branch. Also
|
|
dropped the dead `feat/initial-site` push trigger and reindented the file to
|
|
4-space YAML to match `check.yml`. This is the second attempt; the first broke
|
|
the deploy and was reverted, so this one was verified by temporarily
|
|
triggering the workflow on the PR branch and iterating until the `build` job
|
|
ran green for real
|
|
- 2026-07-25: added the scripts-to-rule-them-all scaffold (closes #4): `script/`
|
|
entrypoints, `Makefile` shims, a Hugo `Dockerfile` (sha256-pinned alpine) plus
|
|
`.dockerignore` that runs `make check`, `.gitea/workflows/check.yml` running
|
|
`script/cibuild`, and a README Entrypoints section. `test`/`lint` are a clean
|
|
`hugo --minify` build; `fmt`/`fmt-check` run prettier over the repo's own
|
|
top-level markdown only
|
|
- 2026-02-10: design pass: minimal light theme with inline CSS, grey wells for
|
|
mesh channels and signal groups, horizontal overflow fix, body width tuning,
|
|
map link update
|
|
- 2026-02-10: added README and footer contribute link
|
|
- 2026-02-10: added Gitea workflow that builds the site and deploys to
|
|
Cloudflare Pages
|
|
- 2026-02-08: initial Hugo static site for lora.vegas
|
|
|
|
# Future Steps
|
|
|
|
- Move the artifact actions to v4 once this Gitea Actions instance serves the v4
|
|
artifact protocol; they are pinned on the deprecated v3 line because v4 fails
|
|
here (#20)
|
|
- Move the deploy container to a pinned node 22 so the wrangler pin can advance
|
|
past 4.86.0 (#21)
|
|
- Rework README.md into the standard sections: Description, Getting Started,
|
|
Rationale, Design, TODO, License, Author (currently About, Contributing,
|
|
Technical Details, License)
|
|
- Sync the reformat of `REPO_POLICIES.md` back upstream to `prompts` so the
|
|
canonical copy is clean under the shared prettier settings and future syncs
|
|
are a straight byte copy
|
|
- Verify the Cloudflare Pages deploy still works after the workflow changes
|
|
- Keep mesh channel and signal group listings current
|