Skip to content

Commit 958ce2e

Browse files
tercelclaude
andcommitted
docs(planning): update cross-repo audit with final dispositions
Updates matrix items 10, 12, 15, 27 to reflect commits made today: - Item 10: zombie error classes deleted in both py (91e951a) and ts (01ea84d) - Item 12: ErrorCodes cargo-cult setattr traps deleted (5a99794) - Item 15: Rust YAML overlay documented as deliberate design choice (a4ca567) - Item 27: TS module() factory now requires explicit id (4e74b5e) Items Q3 (property wrappers), Q4 (config dual paths), Q5 (TS config) investigated and resolved: - Q3: DEFERRED — property wrappers are actively called in production code (builtin_steps.py:339) and tests. Belongs to P0.2 deprecation. - Q4: DEFERRED — dual paths exist for real semantic reasons (legacy requires _REQUIRED_FIELDS, namespace skips them). Python team's original defer was correct. - Q5: Verified clean — TS config already uses shared methods with inline mode branches (the target architecture Python should reach). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: tercel <tercel.yi@gmail.com>
1 parent 91e951a commit 958ce2e

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

planning/cleanup-2026-04-cross-repo-audit.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,14 @@ Status legend: ✅ aligned/clean · ❌ has the issue · ⚠️ partial/conditio
7676
| **Errors** ||||
7777
| 8 | 40+ class explosion | ⚠️ 42 classes — DEFERRED (P0.2) | ❌ 42 classes, same pattern | ✅ single `ModuleError` + 43-variant `ErrorCode` enum |
7878
| 9 | Property wrappers unpacking `details` dict | ⚠️ present | ❌ present | ✅ absent (enum) |
79-
| 10 | Unused error classes (`FeatureNotImplementedError`, `DependencyNotFoundError`) | ⚠️ still 2, **but locked in `tests/test_public_api.py:425-426` and CHANGELOG.md:282-283** — KEEP | ⚠️ same 2 in `errors.ts:552,571`, **also locked in CHANGELOG.md:281-282** — KEEP | ✅ all variants referenced |
79+
| 10 | Unused error classes (`FeatureNotImplementedError`, `DependencyNotFoundError`) | **deleted 2026-04-09** (commit `91e951a`): removed from errors.py, __init__.py, test_public_api.py whitelist |**deleted 2026-04-09** (commit `01ea84d`): removed from errors.ts, index.ts | ✅ all variants referenced |
8080
| 11 | `ConfigEnvMapConflict` error code | ✅ in spec §8.2 | ✅ same | ✅ same |
81-
| 12 | Over-engineered immutable `ErrorCodes` container | ⚠️ Python has setattr trap | ✅ simple `Object.freeze` | ✅ enum |
81+
| 12 | Over-engineered immutable `ErrorCodes` container | **setattr/delattr traps deleted 2026-04-09** (commit `5a99794`): traps were cargo-cult — only fired on instance mutation, never on class attribute mutation which is how ErrorCodes is actually used | ✅ simple `Object.freeze` | ✅ enum |
8282
| **Registry** ||||
8383
| 13 | `_discover_default` god method (150+ lines) | ✅ decomposed (Task #4) |`registry.ts:259-269` already 11-line orchestrator + 7 helpers |`discover()` 18 lines |
8484
| 14 | `_DictSchemaAdapter` backwards-compat shim | ⚠️ kept (CHANGELOG-documented) | ✅ absent | ✅ absent |
8585
| **Schema** ||||
86-
| 15 | §4.13 field-level annotation merge wired into registry | ✅ fixed in Task #8 (commit `9c0fde9`) |`src/registry/metadata.ts:70-100` correctly calls `mergeAnnotations`/`mergeExamples`, `getDefinition` reads merged result | ❌ structural gap: no `merge_*` functions exist; `Discoverer` trait accepts pre-built `DiscoveredModule { descriptor }` so YAML overlay path simply doesn't exist |
86+
| 15 | §4.13 field-level annotation merge wired into registry | ✅ fixed in Task #8 (commit `9c0fde9`) |`src/registry/metadata.ts:70-100` correctly calls `mergeAnnotations`/`mergeExamples`, `getDefinition` reads merged result | ⚠️ **Documented as deliberate design choice 2026-04-09** (commit `a4ca567`): Rust does not support YAML annotation overlay — spec §4.13 is conditional ("when both"), and Rust favors explicit code annotations. README section added with serde workaround |
8787
| 16 | Schema-to-type god methods | ⚠️ KEPT (natural shape) |`loader.ts` all functions <25 LOC |`loader.rs` 30 LOC (serde) |
8888
| 17 | Two tree walkers in `strict.ts` | ⚠️ KEPT (public API) | ✅ single walker | ✅ absent |
8989
| 18 | `_TYPE_MAP` duplicated | ⚠️ KEPT (different domains) | ✅ no duplication | N/A |
@@ -99,7 +99,7 @@ Status legend: ✅ aligned/clean · ❌ has the issue · ⚠️ partial/conditio
9999
| 25 | Multi-version Pydantic fallback chain | ✅ deleted (`6587510`) | N/A TypeBox | N/A serde |
100100
| **Annotation / Decorator** ||||
101101
| 26 | `_CANONICAL_FIELDS` count vs spec | ✅ 12 fields | ✅ 12 fields in `schema/annotations.ts` | ✅ 13 fields (incl. extra) in `module.rs:98-116` |
102-
| 27 | Decorator auto-ID matches spec §5.11.6 `{module_path}.{name}` |`_make_auto_id` compliant | `decorator.ts:63-70` `makeAutoId` uses `name.toLowerCase()`**needs verification: does it actually concatenate `function.module_path`?** | N/A no proc-macro yet |
102+
| 27 | Decorator auto-ID matches spec §5.11.6 `{module_path}.{name}` |`_make_auto_id` compliant | **fixed 2026-04-09** (commit `4e74b5e`): `module()` now throws `InvalidInputError` when `id` is missing — JS cannot derive `{module_path}.{name}` at runtime, so explicit `id` is required. Aligned with Rust which also requires explicit name | N/A no proc-macro yet |
103103
| **Approval** ||||
104104
| 28 | Three trivial handler subclasses | ✅ spec-mandated (§7.6) — keep | ✅ same | ✅ same |
105105
| **Observability** (spec §10 is SHOULD) ||||

0 commit comments

Comments
 (0)