|
| 1 | +# Release Roadmap: Kida 0.10.0 |
| 2 | + |
| 3 | +**Status**: Release branch candidate prepared; final local gates passed; publishing not performed |
| 4 | +**Created**: 2026-05-30 |
| 5 | +**Target theme**: Structured diagnostics and release-readiness hardening |
| 6 | +**Baseline**: `origin/main` at `66cf8ec` (`[codex] Improve UndefinedError diagnostics for framework views (#132)`) |
| 7 | + |
| 8 | +## Objective |
| 9 | + |
| 10 | +Ship the post-0.9.0 structured diagnostics work as a focused 0.10.0 release, |
| 11 | +without mixing in new syntax, new runtime dependencies, new schema versions, or |
| 12 | +large-app ergonomics features that still need separate approval. |
| 13 | + |
| 14 | +## Research Basis |
| 15 | + |
| 16 | +- Initial audit found `pyproject.toml` at `0.9.0`; release prep now updates the |
| 17 | + project metadata and lockfile to `0.10.0`. |
| 18 | +- Initial local audit before fetching remote state found six post-`v0.9.0` |
| 19 | + diagnostics commits: structured undefined diagnostics, preserved undefined |
| 20 | + attribution, render surface diagnostic parity, a standalone diagnostic HTML |
| 21 | + page, public docs, and the coalescing line-marker contract. Remote `main` now |
| 22 | + carries that work as squash commit `66cf8ec` from PR #132, so the release |
| 23 | + branch is based on current `origin/main` instead of replaying the pre-squash |
| 24 | + local history. |
| 25 | +- Focused diagnostics tests pass, and `make lint` / `make ty` are clean on the |
| 26 | + current baseline. |
| 27 | +- `CHANGELOG.md` initially had an empty `[Unreleased]` section; release prep now |
| 28 | + includes a dated `0.10.0` changelog entry and published release-page source. |
| 29 | + |
| 30 | +## Steward Signals |
| 31 | + |
| 32 | +### Planning |
| 33 | + |
| 34 | +- Steward: Planning |
| 35 | +- Area: Release scope |
| 36 | +- Severity: P1 |
| 37 | +- Invariant: Plans sequence real work and do not smuggle stop-and-ask changes. |
| 38 | +- Evidence: The active commits are diagnostics-only; large-app ergonomics is |
| 39 | + still proposed and contains public API/open-question items. |
| 40 | +- User Impact: A focused release is reviewable and avoids making unrelated |
| 41 | + promises. |
| 42 | +- Required Fix: Treat 0.10.0 as diagnostics hardening; defer new validation |
| 43 | + APIs, schemas, and framework policies. |
| 44 | +- Required Proof: Changelog entry, roadmap record, focused tests, lint, and ty. |
| 45 | +- Collateral: `CHANGELOG.md`, docs pages touched by diagnostics. |
| 46 | +- Confidence: High |
| 47 | + |
| 48 | +### Runtime |
| 49 | + |
| 50 | +- Steward: Runtime |
| 51 | +- Area: Exception contracts |
| 52 | +- Severity: P1 |
| 53 | +- Invariant: Public errors preserve template names, source locations, hints, and |
| 54 | + zero-dependency rendering helpers. |
| 55 | +- Evidence: `UndefinedError.to_diagnostic()` exposes location, snippets, hints, |
| 56 | + stacks, docs URL, and escaped HTML/Markdown renderers. |
| 57 | +- User Impact: Framework debug pages can stop scraping terminal-formatted text. |
| 58 | +- Required Fix: Do not export new top-level diagnostic dataclasses in this |
| 59 | + release unless explicitly approved; document the current method-based access. |
| 60 | +- Required Proof: `tests/test_diagnostics_contract.py` and public API snapshot. |
| 61 | +- Collateral: Error handling and undefined-variable docs. |
| 62 | +- Confidence: High |
| 63 | + |
| 64 | +### Template Runtime |
| 65 | + |
| 66 | +- Steward: Template Runtime |
| 67 | +- Area: Render-mode diagnostic parity |
| 68 | +- Severity: P1 |
| 69 | +- Invariant: Full render, streaming, imported components, and slot caller bodies |
| 70 | + attribute failures to the template line users can edit. |
| 71 | +- Evidence: Existing focused tests cover coalesced output source lines, imported |
| 72 | + slot errors, component stacks, streaming runtime enhancement, HTML pages, and |
| 73 | + Markdown diagnostics. |
| 74 | +- User Impact: Users debugging generated code see actionable template source, |
| 75 | + not misleading Python frames. |
| 76 | +- Required Fix: Keep diagnostic tests in the release gate; add more render-mode |
| 77 | + parity only if failures appear. |
| 78 | +- Required Proof: Focused diagnostics suite and full test/coverage gate. |
| 79 | +- Collateral: Troubleshooting docs mention caller-template attribution for slots. |
| 80 | +- Confidence: High |
| 81 | + |
| 82 | +### Compiler |
| 83 | + |
| 84 | +- Steward: Compiler |
| 85 | +- Area: F-string coalescing source locations |
| 86 | +- Severity: P1 |
| 87 | +- Invariant: Hot-path coalescing must not erase source mapping. |
| 88 | +- Evidence: `fix: declare coalescing line marker contract` plus a test asserting |
| 89 | + undefined diagnostics remain on the correct template line with coalescing on. |
| 90 | +- User Impact: Optimized templates remain debuggable. |
| 91 | +- Required Fix: No further compiler optimization in this release without |
| 92 | + benchmark or explicit no-benchmark rationale. |
| 93 | +- Required Proof: Existing coalescing diagnostic test; no benchmark required for |
| 94 | + source-map-only hardening. |
| 95 | +- Collateral: Changelog names the source-location fix. |
| 96 | +- Confidence: Medium-high |
| 97 | + |
| 98 | +### Static Analysis |
| 99 | + |
| 100 | +- Steward: Static Analysis |
| 101 | +- Area: Diagnostic/code contract |
| 102 | +- Severity: P2 |
| 103 | +- Invariant: Codes and machine-readable diagnostics stay documented and |
| 104 | + snapshotable. |
| 105 | +- Evidence: `test_every_error_code_is_documented()` covers all `ErrorCode` |
| 106 | + anchors. |
| 107 | +- User Impact: CI and agents can link users to stable remediation docs. |
| 108 | +- Required Fix: Keep every new code documented before release. |
| 109 | +- Required Proof: Diagnostics contract tests. |
| 110 | +- Collateral: `site/content/docs/errors.md`. |
| 111 | +- Confidence: High |
| 112 | + |
| 113 | +### Docs Site |
| 114 | + |
| 115 | +- Steward: Documentation Site |
| 116 | +- Area: Public diagnostic docs |
| 117 | +- Severity: P1 |
| 118 | +- Invariant: Public docs match current API names, tuple shapes, and render |
| 119 | + behavior. |
| 120 | +- Evidence: Error-handling docs now describe `to_diagnostic()` and framework |
| 121 | + debug-page usage; a docs typo incorrectly referenced `ErrorCode.K_RUN_001` |
| 122 | + before this roadmap pass. |
| 123 | +- User Impact: Framework authors can copy examples without runtime errors. |
| 124 | +- Required Fix: Keep docs examples aligned with actual exception attributes. |
| 125 | +- Required Proof: Docs source review and docs build when release collateral is |
| 126 | + finalized. |
| 127 | +- Collateral: `site/content/docs/usage/error-handling.md`, |
| 128 | + `site/content/docs/troubleshooting/undefined-variable.md`. |
| 129 | +- Confidence: High |
| 130 | + |
| 131 | +### Tests |
| 132 | + |
| 133 | +- Steward: Test Corpus |
| 134 | +- Area: Release evidence |
| 135 | +- Severity: P1 |
| 136 | +- Invariant: User-facing diagnostics need focused assertions and release gates. |
| 137 | +- Evidence: Focused diagnostics suite passes locally. |
| 138 | +- User Impact: Regressions in escaping, attribution, or stack context fail before |
| 139 | + release. |
| 140 | +- Required Fix: Run full release-relevant gates before tagging. |
| 141 | +- Required Proof: `make lint`, `make ty`, diagnostics tests, full test coverage; |
| 142 | + `make verify-stability` for final release candidate. |
| 143 | +- Collateral: None beyond test output; no fixtures changed. |
| 144 | +- Confidence: High |
| 145 | + |
| 146 | +### Benchmark |
| 147 | + |
| 148 | +- Steward: Benchmark |
| 149 | +- Area: Performance evidence |
| 150 | +- Severity: P3 |
| 151 | +- Invariant: Hot-path claims require benchmarks, but source-mapping fixes do not |
| 152 | + need new public performance claims. |
| 153 | +- Evidence: The current changes do not advertise speedups. |
| 154 | +- User Impact: Avoids noisy benchmark churn for a diagnostics release. |
| 155 | +- Required Fix: No benchmark update unless a compiler/render hot-path change is |
| 156 | + added after this plan. |
| 157 | +- Required Proof: Explicit no-benchmark rationale in release notes or PR body. |
| 158 | +- Collateral: no collateral: no performance claim or baseline change. |
| 159 | +- Confidence: Medium |
| 160 | + |
| 161 | +### GitHub Workflow |
| 162 | + |
| 163 | +- Steward: GitHub Workflow |
| 164 | +- Area: Release mechanics |
| 165 | +- Severity: P2 |
| 166 | +- Invariant: Release/publish and floating action tag behavior must not change |
| 167 | + casually. |
| 168 | +- Evidence: No workflow changes are needed for a diagnostics release. |
| 169 | +- User Impact: Existing release automation remains stable. |
| 170 | +- Required Fix: Use existing `make verify-stability`, release, and action-tag |
| 171 | + process; do not alter workflows. |
| 172 | +- Required Proof: Local gate output and CI on the release PR. |
| 173 | +- Collateral: no collateral: workflows unchanged. |
| 174 | +- Confidence: High |
| 175 | + |
| 176 | +## Convergence |
| 177 | + |
| 178 | +All consulted stewards converge on a narrow 0.10.0: ship diagnostics hardening, |
| 179 | +document it, and verify release gates. No steward requires new syntax, public |
| 180 | +configuration, schemas, workflow permissions, or dependencies for this release. |
| 181 | + |
| 182 | +## Minority Reports |
| 183 | + |
| 184 | +- Large-app ergonomics remains important, but it should not be bundled into |
| 185 | + 0.10.0 unless a specific approved implementation is already complete and |
| 186 | + covered by docs/tests. It has open questions around API shape and suppression |
| 187 | + policy. |
| 188 | +- Benchmark steward does not require a new baseline for current diagnostics work, |
| 189 | + but would object if later 0.10.0 changes alter compiler or render hot paths |
| 190 | + while skipping performance evidence. |
| 191 | + |
| 192 | +## Ranked Backlog |
| 193 | + |
| 194 | +1. Release collateral for diagnostics: update `CHANGELOG.md`, docs examples, and |
| 195 | + this roadmap. |
| 196 | +2. Verification: run focused diagnostics tests, `make lint`, `make ty`, full |
| 197 | + test/coverage gate, safety/concurrency tests, docs build, and package smoke |
| 198 | + before tagging. |
| 199 | +3. Release notes: maintain `site/content/releases/0.10.0.md` with the final |
| 200 | + release date and user-facing upgrade notes. |
| 201 | +4. Optional hardening: add `TemplateRuntimeError.to_diagnostic()` only after a |
| 202 | + public-contract check-in, because it widens the programmatic surface beyond |
| 203 | + the current undefined-error implementation. |
| 204 | +5. Post-release: resume `plan/epic-large-app-ergonomics.md` starting with |
| 205 | + route-agnostic context/catalog checks that already have evidence. |
| 206 | + |
| 207 | +## Not Now |
| 208 | + |
| 209 | +- No `TemplateDiagnostic` top-level export without explicit public API approval. |
| 210 | +- No new CLI flags or `Environment(...)` knobs. |
| 211 | +- No privacy-lint suppression/config surface. |
| 212 | +- No public render-packet schema. |
| 213 | +- No schema or report-template changes. |
| 214 | +- No workflow, publish, or action-tag behavior changes. |
| 215 | +- No benchmark baseline churn unless later code changes affect hot paths. |
| 216 | + |
| 217 | +## Parity Matrix |
| 218 | + |
| 219 | +| Contract | API/CLI | Programmatic | Protocol | Schema/Types | Docs | Examples | Tests | |
| 220 | +|---|---|---|---|---|---|---|---| |
| 221 | +| Undefined diagnostics | no CLI change | `UndefinedError.to_diagnostic()` | none | internal dataclasses only | error handling, troubleshooting | no new example | diagnostics contract | |
| 222 | +| Source attribution | no CLI change | exception fields/snippets | none | none | troubleshooting | no new example | coalescing, slots, streaming | |
| 223 | +| HTML/Markdown renderers | no CLI change | diagnostic format helpers | none | none | error handling | no new example | escaped output assertions | |
| 224 | +| Release process | existing Makefile | none | none | none | changelog/release notes | no new example | lint, ty, tests, verify-stability | |
| 225 | + |
| 226 | +## Execution Record |
| 227 | + |
| 228 | +- 2026-05-30: `uv run pytest tests/test_diagnostics_contract.py` passed. |
| 229 | +- 2026-05-30: `make lint` passed. |
| 230 | +- 2026-05-30: `make ty` passed. |
| 231 | +- 2026-05-30: `uv run pytest tests/test_diagnostics_contract.py tests/test_public_api_snapshot.py` passed. |
| 232 | +- 2026-05-30: `make docs` initially built 262 pages with one generated autodoc |
| 233 | + `/llms.txt` health warning. After release-page and metadata updates, `make |
| 234 | + docs` built 270 pages with clean health output. |
| 235 | +- 2026-05-30: `make test-cov` passed: 4,279 passed, 5 skipped, 84.14% coverage against the 83% floor. |
| 236 | +- 2026-05-30: `make format-check` passed. |
| 237 | +- 2026-05-30: `make package-smoke` passed against the prepared `0.10.0` package metadata. |
| 238 | +- 2026-05-30: `make test-safety` passed under `PYTHON_GIL=0`: 131 passed. |
| 239 | +- 2026-05-30: Version metadata updated to `0.10.0` in `pyproject.toml` and |
| 240 | + `uv.lock`. |
| 241 | +- 2026-05-30: `site/content/releases/0.10.0.md` added. |
| 242 | +- 2026-05-30: Focused release verification passed against 0.10.0 metadata: |
| 243 | + diagnostics contract, public API snapshot, compiler AST baseline, and async |
| 244 | + streaming exception contract. |
| 245 | +- 2026-05-30: Final `make test-cov` passed: 4,279 passed, 5 skipped, 84.13% |
| 246 | + coverage against the 83% floor. |
| 247 | +- 2026-05-30: Final `make verify-stability` passed: lint, format-check, ty, |
| 248 | + full coverage, safety, and package smoke all completed successfully against |
| 249 | + the prepared `0.10.0` release candidate. |
| 250 | +- 2026-05-30: README and installation docs updated for `0.10.0` upgrade/version |
| 251 | + collateral; `make docs` rebuilt the site successfully with clean health checks. |
| 252 | +- 2026-05-30: After fetching, remote `main` was at `66cf8ec` and the local |
| 253 | + pre-squash history diverged. Release prep was replayed onto |
| 254 | + `codex/release-0.10.0` from current `origin/main` to avoid publishing the |
| 255 | + duplicate pre-squash history. Remote tag push, GitHub release, PyPI publish, |
| 256 | + and floating action tag update remain pending. |
| 257 | +- 2026-05-30: Origin-main-based focused verification passed: |
| 258 | + `uv run pytest tests/test_diagnostics_contract.py tests/test_public_api_snapshot.py tests/test_kida_async_rendering.py::TestAsyncExceptionPropagation::test_error_in_async_iterable_propagates` |
| 259 | + reported 15 passed. |
| 260 | +- 2026-05-30: Origin-main-based docs verification passed: `make docs` found no |
| 261 | + pending site changes and completed with clean health checks. |
| 262 | +- 2026-05-30: Origin-main-based final `make verify-stability` passed: lint, |
| 263 | + format-check, ty, full coverage, safety, and package smoke completed |
| 264 | + successfully. Coverage summary: 84.1% against the 83% floor. |
0 commit comments