Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/merge-bot-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ on:

# Concurrency keys on the pull request number rather than github.ref.
# Under pull_request_target github.ref is the base branch, which would serialize every bot pull request.
# cancel-in-progress is false so a follow-up synchronize cannot cancel an in-flight opened run.
# Setting cancel-in-progress to false means a follow-up synchronize cannot cancel an in-flight opened run.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: false
Expand Down
2 changes: 1 addition & 1 deletion HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Pieter Viljoen's blog, and the tooling that builds, verifies, and deploys it.
## Release History

- Version 1.0:
- First public release. The blog's content, media, URL contract, and deploy tooling are published as a repository for the first time, having previously lived inside a hosted blogging platform.
- The blog's content, media, URL contract, and deploy tooling live in one repository, under version control and gated by CI.
- 108 posts and 2 pages as Hugo content, in a tree that mirrors the URLs it serves, with 778 media files carried at their original bytes.
- The URL contract as committed ground truth: 328 addresses that must render, 917 that must redirect, and 778 legacy image URLs that must resolve, each verified with a live request rather than predicted.
- CI gates that contract on every pull request, alongside the doc, shell, and workflow linters, with the Hugo version pinned by checksum so a build is reproducible.
Expand Down
2 changes: 1 addition & 1 deletion OPERATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ A restart is needed whenever **any** Caddy config changes, not only this file. T

## Redirects

The site answers 917 addresses it does not render, satisfied by 13 `redir` directives reading 5 map files, all inside the bundle. [`deploy/README.md`](./deploy/README.md) carries the per-class breakdown and the counts; this section covers the operational shape only, so the two do not restate each other.
The site answers 917 addresses it does not render, satisfied by 13 `redir` directives reading 5 map files, all inside the bundle. [`deploy/README.md`](./deploy/README.md) carries the per-class breakdown and the counts. This section covers the operational shape only, so the two do not restate each other.

Ordering is load-bearing, so every redirect lives in a single `route` block. Outside one, Caddy sorts directives by its own precedence rather than by file order, and the broad attachment rule claims the per-post comment feeds that the narrower rule must match first.

Expand Down
2 changes: 1 addition & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ The site is built and gated in CI. It is on GitHub, and it is not yet serving it
| Deploy shape | done and proven against a running Caddy, on a local mirror |
| CI workflows | green. Validation runs on every pull request and feeds the required check |
| GitHub repo | public, both rulesets active, `configure.sh check` exits 0 |
| Release pipeline | proven end to end. Release `1.0.11` carries the tag, source archive, README, and LICENSE |
| VPS | untouched |

## Blocked on the maintainer
Expand All @@ -22,7 +23,6 @@ The site is built and gated in CI. It is on GitHub, and it is not yet serving it

## Next, in dependency order

- Dispatch `publish-release.yml` once to prove the release path, which exists but has never run.
- Provision the VPS: an unprivileged `blogdeploy` user, the deploy root, and `unattended-upgrades` with automatic reboot.
- Restrict the deploy key with `restrict,command=...`, no pty and no forwarding, so it can do nothing but rsync into `releases/` and swap the symlink. Generate per-environment keys so staging cannot reach production.
- Choose the staging FQDN, add its DNS record, and expose it through Pangolin as a public resource with **no auth**, since CI's live-URL check has to reach it. Authentication defaults to on for a public resource and has to be turned off deliberately.
Expand Down
5 changes: 2 additions & 3 deletions reports/Blog/audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ Eight carried files arrived CRLF and were normalized to LF to satisfy this repos

This repository will deploy a built site to a VPS over SSH, which is a release surface the fleet spec has no type for. The measured shape will be reported to [ProjectTemplate#456][hub-issue] once CI has run a deploy, rather than predicted now. The VPS does not exist, so there is nothing to measure.

`publish-release.yml` exists and is dispatch-only, but has never been dispatched. The release path is therefore untested.
`publish-release.yml` is dispatch-only and proven end to end: release `1.0.11` on 2026-08-01 carries the tag, the source archive, the README, and the LICENSE.

## Deliberate Deviations

Expand All @@ -122,8 +122,7 @@ Both are recorded in [AUDIT.md](../../AUDIT.md) and reported upstream, so neithe
Carried forward rather than closed:

- The redirect half of the contract is proven only against the local mirror, by hand, before a pull request. CI has no server to point at, so nothing enforces it automatically until staging exists.
- `publish-release.yml` has never been dispatched, so the release path is untested.
- No deploy exists, so the publish surface stays deferred and the registry entry stays `publish: []`.
- No deploy exists, so the publish surface stays deferred. The hub registry declares the GitHub release, which is the only channel that currently ships, and the VPS target is revisited when a deploy has actually run.
- `checks/README.md` carries a small prose backlog of `dash` and `semicolon` findings, left for the next edit of that file per the correct-as-you-next-edit rule.

<!-- Repo -->
Expand Down