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
{{ message }}
Repository navigation
Commit 046fa49
Browse filesBrowse the repository at this point in the historyBrowse 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.
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).
42
45
-`W_srs` = `record_study_progress`, `log_review_outcome`, `record_topic_progress` — SRS mutators that accept
43
46
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);
46
52
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.
48
56
49
57
Finish: `docs/architecture/learning-tier/receipts/s1-0-capability-lock.md` committed with file:line per harness.
50
58
51
59
### S1-RED (1 day)
52
60
| Test | File | Fails on `main` because |
53
61
|---|---|---|
54
62
|`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 |
56
64
|`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`|
57
65
| 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 |
58
66
| 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
175
183
Consequence: decision 4 is deferred to the day S2 starts (see below).
176
184
2.**Claude/opencode grants:** approve pre-approving `W_auto` on claude (today: none) and leaving opencode's
177
185
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.
178
197
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.
179
202
4.**Jev spend cap** for S2 (estimate: 13 sessions × ≤ 8 candidates × 2 arms, under $1 at $0.042/Mtok; the
180
203
candidate-generation harness turns cost credits on the owner's subscription — ~13–26 turns).
181
204
-**Deferred, 2026-09-23 (consequence of decision 1):** S2 does not start before 0.5.x closes, so the cap
0 commit comments