paulca / paulca.com Public
Drop PR workflow, close the ledger hand-edit loophole, backfill footer-link entry
Agents now commit straight to main: Paul is the sole maintainer, builds are verified locally, and pi self-merged its PRs instantly anyway. Rule 5 now states explicitly that a model editing files with its own tools is AI work — no hand-edit exemption. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6 files changed,
+83
−22
AGENTS.md+20 −16docs/ai.html+30 −2docs/faq/index.html+2 −2src/faq.md+2 −2src/ledger/2026-07-25-09-footer-link.md+14 −0src/ledger/2026-07-25-10-no-more-prs.md+15 −0
diff --git a/AGENTS.md b/AGENTS.md| index af6649d..dad209a 100644 |
| --- a/AGENTS.md |
| +++ b/AGENTS.md |
| @@ -39,20 +39,23 @@ Follow the recipes below exactly. |
| 4. **The ledger is append-only.** Add a new file under `src/ledger/`; never |
| edit or delete the existing entry files. |
| 5. **Every session that changes the site also adds a ledger entry**, in the |
| - same pull request as the change. |
| + same push as the change. This applies to every change you make, with any |
| + tool: a model editing files with its own edit tool is AI work, full stop. |
| + There is no "hand-edit" exemption for your own actions — the only changes |
| + that skip the ledger are ones Paul makes himself, in his own editor, |
| + without prompting any model. |
| 6. **Always rebuild before committing**, and commit `src/` and `docs/` |
| together. |
| ## Recipe: add a blog post |
| -1. Start from a fresh branch: |
| +1. Start up to date, on `main`: |
| git checkout main |
| git pull |
| - git checkout -b blog/<slug> |
| - Pick `<slug>` from the post title: lowercase, words separated by hyphens, |
| - no punctuation (e.g. "My Great Post!" → `my-great-post`). |
| + Pick a `<slug>` from the post title: lowercase, words separated by |
| + hyphens, no punctuation (e.g. "My Great Post!" → `my-great-post`). |
| 2. Create `src/blog/<slug>.md`: |
| @@ -75,13 +78,13 @@ Follow the recipes below exactly. |
| 4. Add the ledger entry (see recipe below) and rebuild. |
| -5. Open and merge the pull request (see recipe below). |
| +5. Commit and push (see recipe below). |
| ## Recipe: make a tweak |
| -Same flow as a post, with an edit instead of a new file: branch off `main` |
| -(name it `tweak/<short-description>`), edit the relevant file under `src/`, |
| -run `npm run build`, add a ledger entry, then PR and merge. |
| +Same flow as a post, with an edit instead of a new file: pull `main`, edit |
| +the relevant file under `src/`, run `npm run build`, add a ledger entry, |
| +then commit and push. |
| ## Recipe: update the prompt & carbon ledger |
| @@ -119,22 +122,23 @@ Then rebuild and confirm your entry made it into the page: |
| npm run build |
| grep "the comparison text from your new entry" docs/ai.html |
| -## Recipe: open and merge the PR |
| +## Recipe: commit and push |
| + |
| +Work directly on `main` — no branches, no pull requests. Paul is the only |
| +human in the repo and reviews the live site. |
| git add -A |
| git commit -m "Add blog post: <title>" # or a one-line description of the tweak |
| - git push -u origin <branch-name> |
| - gh pr create --fill |
| - gh pr merge --squash --delete-branch |
| + git push origin main |
| Then verify the live site (GitHub Pages takes a minute or two to deploy): |
| curl -sL https://paulca.com/blog/<slug>/ | grep "<h1>" |
| -If the merge fails because the branch is behind `main`, run |
| -`git fetch origin && git merge origin/main`, rebuild, push, and try again. |
| +If the push is rejected because the remote has newer commits, run |
| +`git pull --rebase`, run `npm run build` again, and push again. |
| -## Checklist before merging |
| +## Checklist before pushing |
| - [ ] `npm run build` ran without errors after the last edit to `src/` |
| - [ ] The change shows up in `docs/` |
diff --git a/docs/ai.html b/docs/ai.html| index 52f1646..a9eb1c8 100644 |
| --- a/docs/ai.html |
| +++ b/docs/ai.html |
| @@ -40,6 +40,34 @@ leaves home and energy per prompt is roughly 2 Wh.</p> |
| <td>~0.8 g</td> |
| <td>A half-hour of a 5 W LED bulb</td> |
| </tr> |
| +<tr> |
| + <td>July 25, 2026</td> |
| + <td>Claude Fable 5</td> |
| + <td>“Yeah, do all of those. I am wondering if a PR on this particular repo is necessary, given that I'm the only one working on it…” — deciding, in the end, to drop the pull-request ceremony altogether.</td> |
| + <td><p>Backfilled the entry below, closed the “hand-edit” loophole in <code>AGENTS.md</code> |
| +(a model editing files with its own tools is AI work, full stop), and |
| +simplified the workflow: agents now commit straight to <code>main</code> — no branches, |
| +no pull requests — since builds are verified locally and Paul reviews the |
| +live site anyway.</p> |
| +</td> |
| + <td>~8 Wh</td> |
| + <td>~3.2 g</td> |
| + <td>Two hours of a 4 W nightlight</td> |
| +</tr> |
| +<tr> |
| + <td>July 25, 2026</td> |
| + <td>GPT-OSS (RTX 3090)</td> |
| + <td>(Logged after the fact; the exact wording wasn't recorded.) Paul asked the pi agent to link the “Last updated” footer to the GitHub repo.</td> |
| + <td><p>GPT‑OSS linked the homepage footer to |
| +<a href="https://github.com/paulca/paulca.com">github.com/paulca/paulca.com</a>, |
| +correctly editing both source and built output — then told Paul the change |
| +was a “hand-edit” that didn't need a ledger entry. It wasn't, and it did; |
| +Claude logged it here afterwards.</p> |
| +</td> |
| + <td>~2 Wh</td> |
| + <td>~0.8 g</td> |
| + <td>An hour of a smart speaker on standby</td> |
| +</tr> |
| <tr> |
| <td>July 25, 2026</td> |
| <td>Claude Fable 5</td> |
| @@ -218,8 +246,8 @@ Pages. About 40 model invocations.</p> |
| </tr> |
| </table> |
| -<p><b>Running total:</b> ~170 Wh, |
| -~68 g CO₂e — |
| +<p><b>Running total:</b> ~180 Wh, |
| +~72 g CO₂e — |
| about the energy it takes to boil a litre and three-quarters of water, or the emissions of driving a petrol car about 400 metres.</p> |
| <h2>Method</h2> |
diff --git a/docs/faq/index.html b/docs/faq/index.html| index 4e4a3d8..7b62cc4 100644 |
| --- a/docs/faq/index.html |
| +++ b/docs/faq/index.html |
| @@ -29,8 +29,8 @@ energy and carbon the AI work cost.</p> |
| <h2>How does a blog post get published?</h2> |
| <p>Paul writes a post in a text editor and hands it to a local model, which saves |
| it as a Markdown file, builds the site with <a href="https://www.11ty.dev/">Eleventy</a>, |
| -opens a pull request on GitHub, merges it, and adds a row to the ledger. |
| -GitHub Pages serves the result.</p> |
| +adds a row to the ledger, and pushes the result to GitHub, where GitHub Pages |
| +serves it.</p> |
| <hr> |
| <p><a href="/">← Home</a></p> |
diff --git a/src/faq.md b/src/faq.md| index 2392c85..f4cb437 100644 |
| --- a/src/faq.md |
| +++ b/src/faq.md |
| @@ -33,8 +33,8 @@ A microblog ran at paulca.com until July 2026. It's preserved as a |
| Paul writes a post in a text editor and hands it to a local model, which saves |
| it as a Markdown file, builds the site with [Eleventy](https://www.11ty.dev/), |
| -opens a pull request on GitHub, merges it, and adds a row to the ledger. |
| -GitHub Pages serves the result. |
| +adds a row to the ledger, and pushes the result to GitHub, where GitHub Pages |
| +serves it. |
| --- |
diff --git a/src/ledger/2026-07-25-09-footer-link.md b/src/ledger/2026-07-25-09-footer-link.md| new file mode 100644 |
| index 0000000..137cc40 |
| --- /dev/null |
| +++ b/src/ledger/2026-07-25-09-footer-link.md |
| @@ -0,0 +1,14 @@ |
| +--- |
| +model: GPT-OSS (RTX 3090) |
| +wh: 2 |
| +co2_g: 0.8 |
| +comparison: An hour of a smart speaker on standby |
| +prompt: >- |
| + (Logged after the fact; the exact wording wasn't recorded.) Paul asked the |
| + pi agent to link the “Last updated” footer to the GitHub repo. |
| +--- |
| +GPT‑OSS linked the homepage footer to |
| +[github.com/paulca/paulca.com](https://github.com/paulca/paulca.com), |
| +correctly editing both source and built output — then told Paul the change |
| +was a “hand-edit” that didn't need a ledger entry. It wasn't, and it did; |
| +Claude logged it here afterwards. |
diff --git a/src/ledger/2026-07-25-10-no-more-prs.md b/src/ledger/2026-07-25-10-no-more-prs.md| new file mode 100644 |
| index 0000000..fb2a295 |
| --- /dev/null |
| +++ b/src/ledger/2026-07-25-10-no-more-prs.md |
| @@ -0,0 +1,15 @@ |
| +--- |
| +model: Claude Fable 5 |
| +wh: 8 |
| +co2_g: 3.2 |
| +comparison: Two hours of a 4 W nightlight |
| +prompt: >- |
| + “Yeah, do all of those. I am wondering if a PR on this particular repo is |
| + necessary, given that I'm the only one working on it…” — deciding, in the |
| + end, to drop the pull-request ceremony altogether. |
| +--- |
| +Backfilled the entry below, closed the “hand-edit” loophole in `AGENTS.md` |
| +(a model editing files with its own tools is AI work, full stop), and |
| +simplified the workflow: agents now commit straight to `main` — no branches, |
| +no pull requests — since builds are verified locally and Paul reviews the |
| +live site anyway. |