From de812bc02714bc65be285a7972aca047137bb2e6 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Tue, 6 Oct 2026 16:06:46 +0200 Subject: [PATCH] =?UTF-8?q?The=20shared=20rule=20file=20(09=20=C2=A73=20de?= =?UTF-8?q?cision=20152),=20identical=20to=20the=20other=20copies;=20no=20?= =?UTF-8?q?code=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS --- .claude/rules/unprompted-work.md | 69 ++++++++++++++++++++++++++++++++ CHANGELOG.md | 4 ++ REPORT.md | 15 +++---- 3 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 .claude/rules/unprompted-work.md diff --git a/.claude/rules/unprompted-work.md b/.claude/rules/unprompted-work.md new file mode 100644 index 0000000..816a2bd --- /dev/null +++ b/.claude/rules/unprompted-work.md @@ -0,0 +1,69 @@ +--- +unconditional: true +--- +# Unprompted work — rules for any session without a task file + +> Goal sessions, nightly sessions, "work the register" sessions. **A session that starts from +> `/goal` or a standing brief inherits these rules exactly as it inherits the gates.** They are the +> part of `PROMPT-TEMPLATE.md` that a task file used to carry and a goal does not. Same wording lives +> in `felhom.eu`, `felhom-controller`, `felhom-agent` and `app-catalog-felhom.eu` `.claude/rules/`, and in the workspace +> root's unversioned `.claude/rules/`; change all five or none. + +## 1. What you may pick up on your own + +- A register row **you or another CC session filed**, with owner CC, at P3 or a bounded P2, that + needs **no operator decision**, touches **no customer data by design**, and introduces **no + mechanism nobody has measured**. Smallest first. +- A defect you find while exercising the product, filed as a row **before** you fix it — **unless it is small**: + a small finding is fixed in the session and never filed (the size rule, `OPEN-ITEMS.md` „How a row is filed"). +- Hygiene: register compression, stale citations, rows with no owner, documents that contradict + live source. + +**Not yours, ever, without a task file or an operator word:** money; anything that changes risk to +customer data; anything that changes a promise the product makes to a customer; anything that +reverses a documented design decision (`documentation/architecture/` — a design decision is not a +defect, R-370); anything on DooPlex or ep0; baking or vouching a golden; promoting a +catalog version; a new external dependency. + +## 2. When you may decide instead of ask (operator grant, 2026-09-14) + +You may take a decision yourself when **all** of these hold: the architecture folder and the register +give a clear direction; your choice follows that direction; it is reversible without customer-data +risk; and you can write it in the `09-update-architecture.md` §3 shape — one answerable sentence, the +options, what each costs, why this one. **Then record it** as a dated decision in `CONTEXT.md` and +the owning architecture document, tagged *decided by CC unattended — operator may reverse*, and put +it **first** in the morning note. A decision you cannot write in that shape is one you do not take. + +## 3. The discipline a task file used to carry + +1. **Baselines first.** Read each repo's `main` hash and version from live source before touching it. +2. **Read the architecture document for the area, and name it** in the report, before any claim. +3. **Red-proof every correctness fix.** A test never seen failing has not been shown to test anything. +4. **Live-validate on a Tier-0 box** through the endpoints the UI invokes. `demo-hp` is `ssh hp`. + Throwaway apps only; the standing apps and `bentopdf` stay. +5. **Evidence off the machine at the end of each phase**, before any revert (R-320). +6. **One release per repo per session**, with a CHANGELOG entry (controller: with its `MinAgent` + line), REPORT overwritten, floor raised to deliver it. **No golden unless a drill or fresh install + needs one** (the waiver, R-468). **No `--no-verify`.** +7. **An enumerated gap becomes a row in the same session — or, if it is small, is fixed in it** (the size rule). + Prose is not a record. +8. **Hungarian text is searched with ASCII fragments**, with a positive and a negative control. +9. **Never leave a half-state.** If time runs out, revert to clean and say what was reverted. +10. **Teardown, three layers, stated** — machine, host, hub — or "provisioned nothing". + +## 4. The morning note + +One screen, plain language, in this order: **decisions you took** (§2) first; what you exercised; +what broke and whether you fixed it; rows opened and closed with the register size before and after; +what needs the operator, each with what happens if they do nothing. No file paths, no function +names, no row numbers as the subject of a sentence. + +## 5. Instruction files + +**Instruction files (`CLAUDE.md`, `.claude/rules/*`) are kept true by the session that finds them wrong** +(operator ruling 2026-10-06, `09` §3 decision 150). A session MAY, without asking: correct a stale fact (a command, a +count, a version, a path, a description of what a gate does), add a fact it proved, and remove a reference to something +that no longer exists. Each edit is named in the report (file, line, before, after, why). A session MAY NOT, without the +operator's word: loosen a safety rule, a fence, a „never", a protected machine, a secret rule, or a review step; or +remove a rule. When in doubt, it is a rule change, and it goes to the operator. If Claude Code's own permission check +asks before such an edit, wait for the operator's click; if it refuses, record that and file the exact line. diff --git a/CHANGELOG.md b/CHANGELOG.md index cda105d..94ddede 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased (2026-10-06 evening) — the shared rule file (`09` §3 decision 152); no code change + +- `.claude/rules/unprompted-work.md` added, byte-identical to the copies in felhom.eu, felhom-controller, app-catalog-felhom.eu and the workspace root (checked with `diff` against the controller's copy and one md5 across all five). Its copies line names five copies. + ## Unreleased (2026-10-06 afternoon) — instruction files kept true (`09` §3 decision 150); no code change - `CLAUDE.md` „Gates — ONE entry point": the runner runs every gate in its `GATES` table (five: three shared, `published`, `release-complete`); `--fast` skips `published` (network). It said two gates and „all of them". diff --git a/REPORT.md b/REPORT.md index 98cb2aa..9b91407 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,10 +1,7 @@ -# REPORT — instruction files kept true (2026-10-06 afternoon) +# REPORT — the shared rule file (2026-10-06 evening) -Operator ruling 2026-10-06 13:25 (`09` §3 decision 150): a session corrects a stale fact in an instruction file -itself and names the edit; it may not loosen a rule. No code changed in this repo. The full session report, with every -instruction-file edit (file, before, after, why), is `felhom.eu/REPORT.md`. - -Edits here: -- `CLAUDE.md` „Gates — ONE entry point": before „It runs this repo's gates — `reuse_refs_check` and `instructions_gate` … today that is all of them"; after: every gate in `GATES` (five), `--fast` skips `published`. Why: `scripts/agent_gates.py` registers five, `published` is not fast. -- `CLAUDE.md` decoy paragraph: `scripts/decoy_coverage_gate.py` and `documentation/audits/AUDIT-gate-decoys-2026-09-01.md` gained the `felhom.eu/` prefix. Why: neither exists in this repo. -- `.claude/rules/health-checks.md` (HTML comment): „The single source is now felhom.eu/CLAUDE.md 'Code quality rules'" → the copies are felhom.eu `hub.md` and the controller's `gates.md`. Why: that section holds no health-check rule. +Operator ruling 2026-10-06 14:24 (`09` §3 decision 152): the agent repo gets its copy of the shared rule file. Added +`.claude/rules/unprompted-work.md`, byte-identical to the other copies (`diff` against felhom-controller's copy: no +output; md5 `c1e6c881…` across all five before the copies line changed, one md5 after). No code changed; no release. +`agent_gates.py --fast`: reuse-refs, instructions, release-complete, observations OK. The session report is +`felhom.eu/REPORT.md`.