You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- 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>
Copy file name to clipboardExpand all lines: CLAUDE.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,7 @@
17
17
> | 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 |
18
18
> | The headline feature |**USB-DAC → LDAC ran end to end** (2026-09-12, owner-reported, no log captured) |
19
19
> | 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|
21
21
>
22
22
> **The live documents, in order of what you probably want:**
23
23
> -**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.
Copy file name to clipboardExpand all lines: docs/PLAN_2026-09-14.md
+43-26Lines changed: 43 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -76,15 +76,19 @@ directory. The argument for keeping them was reviewability — but **`golden.txt
76
76
does the regression job**, and it does it better, because it fails CI instead of waiting to be
77
77
looked at. Delete both, `.gitignore` them, publish the render as a CI artifact.
78
78
79
-
### A4. Every commit goes straight to `main`
79
+
### A4. Branch protection is on — and the owner is exempt from it
80
80
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.
85
87
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.
88
92
89
93
### A5. The highest-consequence unverified code in the tree is shipping to strangers right now
90
94
@@ -94,8 +98,14 @@ executed on Windows"* — and since Sony's updater was removed, **it is the only
94
98
can install anything.** It is live in v0.3.4, which is what a Reddit link points at.
95
99
96
100
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.
99
109
100
110
---
101
111
@@ -107,10 +117,10 @@ Ordered by *consequence × cheapness*, not by interest.
107
117
108
118
| # | Action | Why now | Cost |
109
119
|---|---|---|---|
110
-
| 1 |**Run`DEVICE_CHECKLIST.md` 11.9** — the Windows installer, end to end, from the GitHub release | The only install path for Windows usershas 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 |
111
121
| 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 |
114
124
115
125
### B1. Next — cheap, and each one removes a whole class of future pain
116
126
@@ -288,20 +298,24 @@ and the palette loader both follow). This extends that from "unknown" to "unsurv
288
298
## Part D — Maintainer watch
289
299
290
300
**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
293
305
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.
295
310
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.
301
315
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.
305
319
306
320
### D2. What the watch does
307
321
@@ -312,11 +326,14 @@ An hourly Routine wakes a session that:
312
326
2. for anything new: reproduces it if it can be reproduced off-device, writes the fix, runs
313
327
**all** gates (549 tests, 41 harness scenarios, syntax check, `golden.txt`), pushes a branch and
314
328
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;
317
333
5. if it is device-gated, writes a self-contained diagnostic script, says so, and does not guess.
318
334
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;
320
337
anything touching the boot path, the installer, root helpers or Sony IPC gets a diagnosis and a
321
338
proposed patch rather than a speculative fix, because CI cannot execute that half of the tree
322
339
(A1) and a wrong guess there costs a device with no public recovery path.
0 commit comments