Skip to content

Commit 10ac73c

Browse files
superwilsoclaude
andcommitted
docs(plan): correct three claims before merge
- A4: branch protection IS applied (six required checks, strict, no force pushes); what is missing is enforce_admins, which is why the owner's direct pushes land. B0 #3 becomes the owner's decision on that. - A5 / B0 #1 / CLAUDE.md: the owner has run the v0.3.3 installer, and installer/ is identical to v0.3.4 apart from the version number; platform and log still to be recorded for 11.9. - D1: Reddit is unreachable from the cloud environment only; the owner's machine reads the thread's Atom feed. D2: the watch drafts replies for the owner instead of posting them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 6da4a25 commit 10ac73c

2 files changed

Lines changed: 44 additions & 27 deletions

File tree

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
> | Offline gates | **549 Rust tests**, **41 harness scenarios**, 23 C/C++ files syntax-clean, **234 golden pixel hashes** — all green, all re-run 2026-09-14 |
1818
> | The headline feature | **USB-DAC → LDAC ran end to end** (2026-09-12, owner-reported, no log captured) |
1919
> | Landed since this banner | FM tuner, Bluetooth, NFC, playlists, on-screen keyboard, liked-songs sync, device settings, palettes (device-verified), type scale, **lyrics and search** |
20-
> | Still device-gated | [`docs/DEVICE_CHECKLIST.md`](docs/DEVICE_CHECKLIST.md)and **11.9, the Windows installer, has never been executed once** while being the only Windows install path |
20+
> | Still device-gated | [`docs/DEVICE_CHECKLIST.md`](docs/DEVICE_CHECKLIST.md)**11.9, the Windows installer** (the only Windows install path): the owner reports running the v0.3.3 installer, whose `installer/` is identical to v0.3.4's; platform and log not yet recorded |
2121
>
2222
> **The live documents, in order of what you probably want:**
2323
> - **What to do next, and the skins design system:** [`docs/PLAN_2026-09-14.md`](docs/PLAN_2026-09-14.md) — current audit + ordered plan.

docs/PLAN_2026-09-14.md

Lines changed: 43 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,19 @@ directory. The argument for keeping them was reviewability — but **`golden.txt
7676
does the regression job**, and it does it better, because it fails CI instead of waiting to be
7777
looked at. Delete both, `.gitignore` them, publish the render as a CI artifact.
7878

79-
### A4. Every commit goes straight to `main`
79+
### A4. Branch protection is on — and the owner is exempt from it
8080

81-
`AUDIT_2026-09-01` §D5 called branch protection *"the most important item in this document"* and
82-
*"the one that cannot be fixed from a shell."* It was never recorded as applied. Measured today:
83-
**0 open PRs, and every one of the last 14 commits is a direct push to `main`** (CI event `push`,
84-
branch `main`). CI is green on all of them — so this is currently latent, not active, harm.
81+
`AUDIT_2026-09-01` §D5 called branch protection *"the most important item in this document"*.
82+
**It is applied** (checked through the API, 2026-09-14): `main` requires all six CI checks, strictly
83+
(the branch must be up to date), and refuses force pushes. What it does **not** do is apply to
84+
admins (`enforce_admins: false`) or require a review — which is why every one of the last 14
85+
commits is a direct push to `main` (CI event `push`) and still lands. CI is green on all of them, so
86+
this is latent, not active, harm.
8587

86-
It stops being latent the moment a second contributor arrives, which is precisely what the Reddit
87-
announcement is for.
88+
For anyone else the gate is already real: an outside pull request cannot merge red. The open
89+
question is only whether the owner's own pushes should go through it too — one API call
90+
(`POST /repos/superwilso/Cinder/branches/main/protection/enforce_admins`), and after it every change,
91+
the owner's included, needs a pull request with green checks.
8892

8993
### A5. The highest-consequence unverified code in the tree is shipping to strangers right now
9094

@@ -94,8 +98,14 @@ executed on Windows"* — and since Sony's updater was removed, **it is the only
9498
can install anything.** It is live in v0.3.4, which is what a Reddit link points at.
9599

96100
Downloads as of this audit: **2 Windows, 1 Linux.** The window to test it before it meets an
97-
audience is open and small. `DEVICE_CHECKLIST.md` 11.9 already describes the test; it is re-opened
98-
and unrun.
101+
audience is open and small. `DEVICE_CHECKLIST.md` 11.9 already describes the test.
102+
103+
> **Update, later on 2026-09-14 — owner-reported, no log captured:** the owner has run the
104+
> **v0.3.3** installer. `installer/` is byte-identical between `v0.3.3` and `v0.3.4` apart from the
105+
> version number (`git diff --stat v0.3.3 v0.3.4 -- installer/`: `Cargo.toml` and `Cargo.lock`, one
106+
> line each), and the Windows pass-through landed before `v0.3.2`, so a v0.3.3 run on Windows
107+
> exercises exactly the code v0.3.4 ships. If that run was the Windows executable, A5 is closed in
108+
> substance; 11.9 still wants its install log attached to be recorded as a pass.
99109
100110
---
101111

@@ -107,10 +117,10 @@ Ordered by *consequence × cheapness*, not by interest.
107117

108118
| # | Action | Why now | Cost |
109119
|---|---|---|---|
110-
| 1 | **Run `DEVICE_CHECKLIST.md` 11.9** — the Windows installer, end to end, from the GitHub release | The only install path for Windows users has never run once (A5). A stranger's first experience is currently untested code | One device session |
120+
| 1 | **Record `DEVICE_CHECKLIST.md` 11.9** — the Windows installer, end to end, from the GitHub release | The only install path for Windows users. The owner has since run the v0.3.3 installer (A5, update); what is missing is the platform and the install log that make it a recorded pass | One device session |
111121
| 2 | **Banner `CLAUDE.md`**, pointing at `STATUS.md` / `DEVICE_CHECKLIST.md` / this file | It is read first by every session and is seven weeks wrong (A2) | Minutes |
112-
| 3 | **Turn on branch protection** on `main` (§D5's API call, contexts updated for today's job names) | A public repo with no merge gate, about to receive its first outside PRs (A4) | One API call, needs the owner |
113-
| 4 | **Point the Reddit post at GitHub Issues** | Templates already exist (`bug_report`, `device_report`, `feature_request`) and route correctly. It is also the only channel this session can watch | One post edit |
122+
| 3 | **Decide whether branch protection binds the owner** (`enforce_admins`) | Protection is on and already gates outside PRs; the owner's direct pushes bypass it (A4). Owner's call — it turns every change into a pull request | One API call, needs the owner |
123+
| 4 | **Point the Reddit post at GitHub Issues** | Templates already exist (`bug_report`, `device_report`, `feature_request`) and route correctly. It is also the only channel a cloud session can watch (D1) | One post edit |
114124

115125
### B1. Next — cheap, and each one removes a whole class of future pain
116126

@@ -288,20 +298,24 @@ and the palette loader both follow). This extends that from "unknown" to "unsurv
288298
## Part D — Maintainer watch
289299

290300
**Decisions, 2026-09-14:** fixes go to a **draft PR** and never straight to `main`; **any** new
291-
issue or bug report pings the owner; **GitHub is the channel** (Reddit is unreachable — see below);
292-
device work happens by **script-and-paste**.
301+
issue or bug report pings the owner; **GitHub is the channel** (a cloud session cannot read Reddit —
302+
see below); device work happens by **script-and-paste**.
303+
304+
### D1. Reddit cannot be read from the cloud build environment — it can from the owner's machine
293305

294-
### D1. Reddit cannot be read from the build environment
306+
In the cloud session that wrote this, tested four ways: `WebFetch`, `curl https://www.reddit.com/...`,
307+
`old.reddit.com`, and the `.json` API. All four fail identically at the proxy with
308+
**`connect_rejected` — 403 to CONNECT (organization policy)**: an egress allowlist denying the
309+
domain, which RSS shares. No workaround was attempted there, deliberately.
295310

296-
Tested four ways: `WebFetch`, `curl https://www.reddit.com/...`, `old.reddit.com`, and the `.json`
297-
API. All four fail identically at the proxy with **`connect_rejected` — 403 to CONNECT
298-
(organization policy)**. This is an egress allowlist denying the domain, not rate limiting and not
299-
a User-Agent problem; RSS resolves to the same blocked host and fails the same way. `WebSearch`
300-
does not surface the thread either.
311+
**That is a property of that environment, not of Reddit.** On the owner's own machine the thread's
312+
Atom feed (`…/comments/1wedu23/.rss?sort=new&limit=100`, browser User-Agent) returns 200, and a
313+
local session has been watching it alongside GitHub on 2026-09-13/14. The `.json` endpoints do 403
314+
there too, and WebFetch is blocked for the domain, so the feed is the one route.
301315

302-
No workaround was attempted, deliberately: routing around an explicit network policy is not a thing
303-
to do quietly. **The supported path is to funnel reports to GitHub Issues**, where the templates
304-
already exist and already route bricks/boot failures to `RECOVERY.md` and `SECURITY.md`.
316+
So the conclusion stands for anything **scheduled in the cloud**: funnel reports to GitHub Issues,
317+
where the templates already exist and already route bricks/boot failures to `RECOVERY.md` and
318+
`SECURITY.md`. A local session can keep reading the thread directly.
305319

306320
### D2. What the watch does
307321

@@ -312,11 +326,14 @@ An hourly Routine wakes a session that:
312326
2. for anything new: reproduces it if it can be reproduced off-device, writes the fix, runs
313327
**all** gates (549 tests, 41 harness scenarios, syntax check, `golden.txt`), pushes a branch and
314328
opens a **draft PR**;
315-
3. replies on the issue with the diagnosis and the PR link;
316-
4. **pings the owner's phone** — on every new report, per D's decision, whether or not a fix landed;
329+
3. **drafts** a reply with the diagnosis and the PR link, and hands it to the owner — it does not
330+
post it. Anything said in public on the project is in the owner's own words;
331+
4. **pings the owner's phone** — on every new report, per D's decision, whether or not a fix landed,
332+
with the draft reply attached;
317333
5. if it is device-gated, writes a self-contained diagnostic script, says so, and does not guess.
318334

319-
**The boundary it does not cross:** nothing merges to `main`; nothing is pushed that fails a gate;
335+
**The boundary it does not cross:** nothing merges to `main`; nothing is posted publicly in the
336+
owner's name; nothing is pushed that fails a gate;
320337
anything touching the boot path, the installer, root helpers or Sony IPC gets a diagnosis and a
321338
proposed patch rather than a speculative fix, because CI cannot execute that half of the tree
322339
(A1) and a wrong guess there costs a device with no public recovery path.

0 commit comments

Comments
 (0)