Skip to content

Commit 046fa49

Browse files
docs(learning-tier): owner decisions 2 and 3 recorded — no new pre-approvals, noticing episode by rule
Decision 2: no pre-approval of W_auto on Claude (prompt per call), OpenCode wildcard untouched this branch; consequence taken: no new pre-approval on any harness, kiro keeps its existing log_topic entry as the one recorded asymmetry. Evidence recorded beside the verdict: kiro and opencode already had grants and still logged zero writer calls, so the defect is the instruction, not the prompt. Naming is distinguished from approving: socratic-mentor.md must name each W_auto tool because its tools: line names none today. The §1 paragraph, S1-0 bullets and the parity test-table row are rewritten to match. Decision 3: the noticing episode is scheduled by rule — the first real study session after S1-GREEN reaches main — with the date recorded in the S1-SIM receipt.
1 parent 797fd14 commit 046fa49

1 file changed

Lines changed: 31 additions & 8 deletions

File tree

‎docs/architecture/learning-tier/plan-2026-09-19.md‎

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ outstanding:** §7. **Base:** `main` @ `4f8e3e0f`.
99
**Item 1 — the mentor writes.** Today the mentor agent can *read* learning state on every harness but records
1010
nothing: no MCP teach-back writer exists (CLI only), kiro pre-approves one writer, claude grants none, the
1111
persona's only concrete "record progress" line points at a different tool. Result: zero writer calls in
12-
143,973 historical messages. This item adds the missing writer, grants the additive writers on the harnesses
13-
that have an in-repo grant grammar, gives every harness one machine-readable trigger table, and proves the
14-
pipe is open with a scripted learner on all six installed harnesses — claiming only what was observed.
12+
143,973 historical messages. This item adds the missing writer, names the additive writers in every harness
13+
definition (no new pre-approvals — owner decision 2, §7), gives every harness one machine-readable trigger
14+
table, and proves the pipe is open with a scripted learner on all six installed harnesses — claiming only what
15+
was observed.
1516

1617
**Item 2 — one honest number for Jev.** A single pre-registered, directional measurement of TypeSafe's Jev
1718
as a *filter* over harness-proposed struggle candidates, on the repo's 13-session human-labelled gold read
@@ -38,21 +39,28 @@ this plan) merges first or is cherry-picked — owner's call (§7).
3839
Record, from source, the grant mechanism per harness and freeze the writer sets:
3940

4041
- `W_auto` = `log_topic`, `log_struggle`, `record_teachback` (new), `record_plan_learning` — additive, learner-
41-
agreed or learner-stated. Pre-approved.
42+
agreed or learner-stated. **Named in every harness definition; prompt-per-call everywhere** (owner decision 2,
43+
§7). No new pre-approval on any harness this branch; kiro's existing `log_topic` allowlist entry stays as the
44+
one recorded asymmetry (`execute_bash` is pre-approved there, so removing it buys no parity).
4245
- `W_srs` = `record_study_progress`, `log_review_outcome`, `record_topic_progress` — SRS mutators that accept
4346
an unverified `card_hash`/topic id (`mcp/tools.py:114,648`). **Stay prompt-per-call** this branch.
44-
- Grant grammar: kiro `allowedTools` (`agents/kiro/study-mentor.json`); claude `settings.json` permissions +
45-
tool names in `socratic-mentor.md`; opencode already `studyloop *` (recorded as not least-privilege, unchanged);
47+
- Grant grammar: kiro `allowedTools` (`agents/kiro/study-mentor.json`, unchanged); claude `settings.json`
48+
permissions (unchanged — no block) + tool names in `socratic-mentor.md` (**must name each `W_auto` tool**:
49+
its `tools:` line lists `Read, Write, Grep, Bash` and no `mcp__studyloop__*` tool today, so naming is what
50+
makes the writers reachable at all — naming is instruction, not approval); opencode already `studyloop *`
51+
(recorded as not least-privilege, unchanged);
4652
codex/pi/grok have **no in-repo grant grammar** — canonical persona via session-dir `AGENTS.md`, approval is
47-
harness-side (`adapters/{codex,pi,grok}.py`). No `agents/grok/` is created.
53+
harness-side (`adapters/{codex,pi,grok}.py`). No `agents/grok/` is created. Parity is of the *instruction*
54+
(trigger table + `W_auto` set, pinned by test), never of approval — the receipt records each harness's
55+
approval cell in the capability matrix as it is.
4856

4957
Finish: `docs/architecture/learning-tier/receipts/s1-0-capability-lock.md` committed with file:line per harness.
5058

5159
### S1-RED (1 day)
5260
| Test | File | Fails on `main` because |
5361
|---|---|---|
5462
| `record_teachback` MCP tool exists, validates exactly as `cli/_teachback.py:16-46` (cardinality, ints, 1–4, `review_type` enum), lands one row honouring CHECK, no row on failure, `session_id` bound from session state | `tests/test_mcp_teachback.py` (new) | tool absent |
55-
| kiro `allowedTools` ⊇ `W_auto`; claude permissions ⊇ `W_auto` and `socratic-mentor.md` names each; opencode wildcard covers `W_auto`; codex/pi/grok canonical persona names each `W_auto` tool | `tests/test_adapter_parity.py` (extend) | grants/names absent |
63+
| every harness definition names each `W_auto` tool (kiro `tools`, claude `socratic-mentor.md` `tools:`, opencode persona, codex/pi/grok canonical persona); **no new pre-approval**: kiro `allowedTools` ∩ `W_auto` == {`log_topic`} exactly, claude `settings.json` still has no permissions block, opencode wildcard unchanged; each harness's approval cell in the capability matrix equals what its definition file says | `tests/test_adapter_parity.py` (extend) | names absent |
5664
| `agents/shared/recording-protocol.md` exists; fenced YAML trigger table parses; every trigger names a writer in `W_auto`; every projected copy carries identical bytes; `agents/manifest.json` hashes match; `persona.md` no longer routes "record progress" to `tutor-checkpoint` | `tests/test_docs_harness_tier_contract.py` (extend) | file absent; `:32` still names `tutor-checkpoint` |
5765
| Isolation: child process with conflicting `HOME`/`XDG_*` runs each `W_auto` writer → 0 writes outside the sandbox, including Markdown | `tests/test_writer_isolation.py` (new) | passes or fails on `main` — if it passes, keep it as a guard, do not count it as RED |
5866
| No-trigger + duplicate: a replayed sequence with a non-triggering turn writes nothing; a repeated `record_teachback` call produces the documented behaviour (two rows — teach-backs are events) | `tests/test_mcp_teachback.py` | tool absent |
@@ -175,7 +183,22 @@ between J-b-filtered and J-b-unfiltered*, nothing more. Three-seat council reads
175183
Consequence: decision 4 is deferred to the day S2 starts (see below).
176184
2. **Claude/opencode grants:** approve pre-approving `W_auto` on claude (today: none) and leaving opencode's
177185
wildcard untouched this branch.
186+
- **Owner verdict, 2026-09-23: no pre-approval on Claude — prompt per call; OpenCode's wildcard untouched
187+
this branch.** Stated by the owner ("No pre-approval on Claude; prompt per call"), then confirmed by
188+
delegation after the parity question. Evidence that made it cheap: kiro already pre-approved `log_topic`
189+
and opencode already allowed `studyloop *`, and both still logged zero writer calls — the absence is the
190+
*instruction* (no MCP teach-back writer, the persona's record-progress line pointing elsewhere), not the
191+
prompt. Consequences taken with it: no new pre-approval on *any* harness this branch (kiro's `log_topic`
192+
entry stays as the one recorded asymmetry); `socratic-mentor.md` must still *name* each `W_auto` tool,
193+
because its `tools:` line lists no `mcp__studyloop__*` tool today and an unnamed tool is unreachable —
194+
naming is instruction, not approval; parity is pinned on the instruction (trigger table + `W_auto` set),
195+
and each harness's approval cell is recorded in the capability matrix as it is. The S1-0 bullets and the
196+
test-table parity row above were rewritten to this verdict.
178197
3. **The owner-led noticing episode** — ten minutes, once, after S1-GREEN; scheduled when?
198+
- **Scheduled by rule, 2026-09-23 (owner delegated):** the first real study session the owner runs after
199+
S1-GREEN reaches `main` — ten minutes, no logging asked for. The S1-SIM receipt records the date and the
200+
adjudicated trigger/no-trigger outcomes afterwards. The owner may name a date instead; the rule stands
201+
until he does.
179202
4. **Jev spend cap** for S2 (estimate: 13 sessions × ≤ 8 candidates × 2 arms, under $1 at $0.042/Mtok; the
180203
candidate-generation harness turns cost credits on the owner's subscription — ~13–26 turns).
181204
- **Deferred, 2026-09-23 (consequence of decision 1):** S2 does not start before 0.5.x closes, so the cap

0 commit comments

Comments
 (0)