feat(manifest): drop unimplemented json sidecar store (V-L2-F2, #112)#144
Merged
Conversation
V-L2-F2, split from #45. The `[sidecar].storage` enum advertised `sqlite | json`, but `json` never had an implementation and #45 left it rejected with a "tracked by #112" pointer. Decision: drop `json` rather than implement it. The octad data layer is intrinsically relational — provenance hash-chains rely on `BEGIN IMMEDIATE` serialisation, temporal "exactly one current version" is a partial UNIQUE index, enum columns are `CHECK`-constrained, and lineage acyclicity is a recursive-CTE concern. A JSON document store "with the same octad-dimension coverage" would mean reimplementing that entire layer (plus gc/drift) against a non-relational model. The ROADMAP lists only the SQLite sidecar (Phase 1) and never references a JSON store; its "Multi-Backend" phase is about interception sources, not sidecar formats. Changes (the drop path from the issue's acceptance): - `SqlDialect::from_storage` no longer special-cases `json`; it falls into the generic unsupported-value error, which now advertises only the supported stores (no "#112"/"coming soon" pointer). This stays the single source of truth for accepted `[sidecar].storage` values. - `validate` gains a `sidecar-storage-supported` check that defers to `from_storage`, so `validate`/`doctor` surface a dropped/typo'd backend before it reaches codegen. - `SidecarConfig` docs (manifest + abi), the manifest template comment, and the `generate` call-site comment no longer present `json` as an option. - Tests: `unsupported_storage_fails` (validate) and an updated `test_storage_to_dialect_mapping` assert `json` is rejected plainly and never advertised as planned. https://claude.ai/code/session_01S2xDQQU5o85N3xTpeFUSfN
This was referenced May 30, 2026
Merged
hyperpolymath
added a commit
that referenced
this pull request
May 30, 2026
…ure (#147) Test-only follow-up to #144 (which dropped the json sidecar store and closed #112). Adds a positive postgres-storage validate test and switches the gc rejection test to the realistic non-sqlite value. No production change; the storage set stays closed to sqlite + postgres. https://claude.ai/code/session_01Ux144vBDdySvLUqUrCgkT4
hyperpolymath
added a commit
that referenced
this pull request
May 30, 2026
… (V-L2-F3, #146) (#148) Implement a json sidecar store covering plain JSON, JSON-LD, and NDJSON, with full parity to the SQLite runtime path (provenance incl. forks, temporal versioning, drift, gc). `[sidecar].storage = "json"` + a new `[sidecar].format` key; `sidecar::StorageKind::resolve` is the single backend resolver. Re-opens the capability dropped in #112/#144. Closes #146
This was referenced May 30, 2026
hyperpolymath
added a commit
that referenced
this pull request
May 30, 2026
… drop (#149) Wrap-up housekeeping after the V-L2-F2 json-sidecar drop (#112, #144, #147): ADR-0011 documenting why the octad store is relational, a CHANGELOG Removed entry, a README correction, and a Claude Code (web) SessionStart hook + permission allowlist. No production code change. https://claude.ai/code/session_01Ux144vBDdySvLUqUrCgkT4
This was referenced May 30, 2026
🔍 Hypatia Security ScanFindings: 80 issues detected
View findings[
{
"reason": "Action perpolymath/standards/.github/workflows/governance-reusable.yml@main\n needs attention",
"type": "unpinned_action",
"file": "governance.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action actions/checkout@v4 needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action dtolnay/rust-toolchain@stable needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action Swatinem/rust-cache@v2 needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action actions/checkout@v4 needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Action dtolnay/rust-toolchain@master needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "high"
},
{
"reason": "Action Swatinem/rust-cache@v2 needs attention",
"type": "unpinned_action",
"file": "rust-ci.yml",
"action": "pin_sha",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in casket-pages.yml",
"type": "missing_timeout_minutes",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in casket-pages.yml",
"type": "missing_timeout_minutes",
"file": "casket-pages.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
V-L2-F2: resolve the
jsonsidecar storage option (#112)Split from #45, whose acceptance left
[sidecar].storage = "json"rejected with a "tracked by #112" pointer. #112 asks for a decision: implement the JSON store, or drop it.Decision: drop
jsonThe octad data layer is intrinsically relational, so a JSON store "with the same octad-dimension coverage as the sqlite path" would mean reimplementing the whole layer against a non-relational model:
BEGIN IMMEDIATEserialisation + multi-head fork sets;UNIQUEindex;CHECK-constrained;gcanddriftare SQLDELETE/SELECTover those tables.The ROADMAP reinforces this: Phase 1 lists only the SQLite provenance sidecar, and "Phase 2: Multi-Backend Support" is about interception sources (SQLite/MongoDB/Redis/MySQL), not sidecar storage formats. A JSON sidecar appears nowhere across the six phases. Implementing it is a multi-phase feature, not a single-issue completion — so this PR takes the bounded, roadmap-aligned path and removes the never-implemented option.
Changes (the "drop" acceptance items)
storageenumSqlDialect::from_storageno longer special-casesjson; it falls into the generic unsupported-value error, which advertises only the supported stores (sqlite,postgres/postgresql) — no#112/"coming soon" pointer. Remains the single source of truth.SidecarConfigdocssrc/manifest/mod.rsandsrc/abi/mod.rs.[sidecar]block now documents the supported values; nojson.validate/doctorsidecar-storage-supportedcheck delegates tofrom_storage, so a dropped/typo'd backend is surfaced before it reaches codegen.doctorinherits it viavalidate_manifest.User-facing surfaces no longer mention
json. The only remaining references are (1) a maintainer decision-record on the enforcement fn explaining why it was dropped, and (2) the regression tests that assertjsonis rejected plainly — both intentional.Tests
manifest::…::unsupported_storage_fails—validatefails onstorage = "json"with a plain "unsupported" detail and no#112pointer.codegen::overlay::…::test_storage_to_dialect_mapping— updated:jsonrejected as unsupported, must not advertise itself as planned.cargo clippy --all-targets -- -D warningsandcargo fmt --checkclean.Closes #112.
https://claude.ai/code/session_01S2xDQQU5o85N3xTpeFUSfN
Generated by Claude Code