Skip to content

feat(manifest): drop unimplemented json sidecar store (V-L2-F2, #112)#144

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/gracious-curie-HS03A
May 30, 2026
Merged

feat(manifest): drop unimplemented json sidecar store (V-L2-F2, #112)#144
hyperpolymath merged 1 commit into
mainfrom
claude/gracious-curie-HS03A

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

V-L2-F2: resolve the json sidecar 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 json

The 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:

  • provenance hash-chains depend on BEGIN IMMEDIATE serialisation + multi-head fork sets;
  • temporal "exactly one current version" is a partial UNIQUE index;
  • enum columns are CHECK-constrained;
  • lineage acyclicity is a recursive-CTE concern;
  • gc and drift are SQL DELETE/SELECT over 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)

Acceptance item Change
storage enum SqlDialect::from_storage no longer special-cases json; 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.
SidecarConfig docs Updated in both src/manifest/mod.rs and src/abi/mod.rs.
manifest template [sidecar] block now documents the supported values; no json.
validate/doctor New sidecar-storage-supported check delegates to from_storage, so a dropped/typo'd backend is surfaced before it reaches codegen. doctor inherits it via validate_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 assert json is rejected plainly — both intentional.

Tests

  • manifest::…::unsupported_storage_failsvalidate fails on storage = "json" with a plain "unsupported" detail and no #112 pointer.
  • codegen::overlay::…::test_storage_to_dialect_mapping — updated: json rejected as unsupported, must not advertise itself as planned.
  • Full suite green: 119 lib unit tests + all integration tests; cargo clippy --all-targets -- -D warnings and cargo fmt --check clean.

Closes #112.

Note: if a JSON sidecar is in fact wanted later, it should be reopened as a dedicated multi-backend feature (Phase 2+) with its own storage-abstraction design, since it can't reuse the SQL-bound invariants above.

https://claude.ai/code/session_01S2xDQQU5o85N3xTpeFUSfN


Generated by Claude Code

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
@hyperpolymath hyperpolymath marked this pull request as ready for review May 30, 2026 22:21
@hyperpolymath hyperpolymath merged commit e94d2a2 into main May 30, 2026
11 of 20 checks passed
@hyperpolymath hyperpolymath deleted the claude/gracious-curie-HS03A branch May 30, 2026 22:21
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
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
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 80 issues detected

Severity Count
🔴 Critical 1
🟠 High 7
🟡 Medium 72

⚠️ Action Required: Critical security issues found!

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

V-L2-F2: implement the JSON sidecar storage backend (split from #45)

2 participants