--- issue: 18 issue_title: "Drop unread special.tool_call_limit from permissions schema" --- # Retro: #18 — Drop unread `special.tool_call_limit` from permissions schema ## Final Retrospective (2026-05-03T01:50:00Z) ### Session summary Removed the unread `special.tool_call_limit` field from the permissions schema and README. Added a tolerant-loader deprecation path: `normalizeRawPermission()` now returns `{ permissions, configIssues }`, and `PermissionManager.getConfigIssues()` surfaces deprecation messages at session start via the existing `notifyWarning` channel. Released as v1.1.0. ### Observations #### What went well - **Unambiguous issue, clean execution.** The issue body was precise (remove field, add deprecation warning, clean docs), AGENTS.md rules were clear (tolerant loader pattern), and the plan mapped directly to 5 TDD steps that executed without deviation. - **Plan-to-code fidelity.** All 5 TDD steps landed exactly as planned with no rework, scope changes, or unexpected test failures. #### What caused friction (agent side) - `instruction-violation` (self-identified) — The plan commit failed markdownlint because a table cell in the plan contained unescaped pipe characters inside backtick-quoted JSON (`"tool_call_limit": "allow"` was fine, but a separate cell had `tool_call_limit | _(schema only)_` with a bare pipe) and used underscore emphasis instead of asterisks. Fixed in one iteration before the commit landed. Impact: one failed pre-commit hook, ~30 seconds of rework. #### What caused friction (user side) - No friction observed. The user ran `/plan-issue`, `/tdd-plan`, `/ship-issue` in sequence with no corrections or redirections needed.