41 lines
1.6 KiB
Markdown
41 lines
1.6 KiB
Markdown
# M12-01F Status
|
|
|
|
status: done
|
|
task: reject duplicate IDs, catalog cycles, oversized text, and unknown fields
|
|
updated: 2026-08-17 America/New_York
|
|
enablingTask: true
|
|
parityStateChange: false
|
|
|
|
## Scope
|
|
|
|
The negative matrix executes production schema v2 and migration parsers against duplicate
|
|
catalog/asset IDs, a legacy parent cycle, an inconsistent v2 `parentPath`, 64-byte UTF-8
|
|
simple-name/tag values, and unknown top-level/nested fields in both v1 and v2. The byte cases
|
|
use multi-byte text to prove limits are not JavaScript character counts.
|
|
|
|
Every failure returns a stable asset error code. The valid v2 fixture is parsed after each
|
|
negative case to prove the failed input did not poison parser state. This task adds negative
|
|
evidence only and does not change catalog parity status.
|
|
|
|
## Evidence
|
|
|
|
- `npm --prefix web run test:asset-catalog-negatives` passed 2/2 with 9/9 negative cases.
|
|
- Duplicate/cycle/parent/unknown cases returned `ASSET_MANIFEST_INVALID`; both 64-byte UTF-8
|
|
payloads returned `ASSET_BUDGET_EXCEEDED`.
|
|
- Typecheck, lint, and `git diff --check` passed.
|
|
|
|
## Artifact Hashes
|
|
|
|
- unit suite: `3a11605ac8666c8c4e1e2e85ccfd423115915820d0de6f92bdf72dff1f01ce41`
|
|
- negative cases: `74672fa0aec248fd5d9a265743ef4dfe4d417fce8a24622b8b3d6be2f95c8874`
|
|
- manifest: `127b2b605ac79a891cd6ab516ee031c02624a512e1043b111bfac2ebf1d8278d`
|
|
|
|
## Next Task
|
|
|
|
`M12-01G`: prove an IndexedDB migration failure preserves the old transaction and index.
|
|
|
|
## Rollback
|
|
|
|
Remove the M12-01F negative suite, golden/manifest, package command, and this status entry.
|
|
Restore M12-01F to pending and `nextTask` to M12-01F. No parity ledger rollback is required.
|