Skip to content

Dev - #205

Open
JEJodesty wants to merge 19 commits into
mainfrom
dev
Open

Dev#205
JEJodesty wants to merge 19 commits into
mainfrom
dev

Conversation

@JEJodesty

Copy link
Copy Markdown
Collaborator

Test plan

Automated

  • uv run pytest tests/test_data_integrity.py tests/test_network_seams.py tests/test_provenance.py tests/test_address_store_gateway.py tests/test_ldp_bom_control_plane.py tests/test_solid_control_plane.py tests/test_node_lifecycle_cli.py -q
  • Confirm no regressions in related mesh/node suites if CI runs the full tests/ tree

Phase 1 / 1b — DID + Data Integrity

  • Sign/verify round-trip: sign_execution_bomverify_execution_bom succeeds
  • Tampered invoice_cid (or other claim) fails verify
  • CAT_NODE_DID mismatch / missing keyfile refuse to sign
  • Runtime.execute response bom includes node_did, PROV edges, and proof (eddsa-jcs-2022); bom_cid is CID of the signed object

Phase 2a — AddressStore (data plane)

  • Gateway unset: cat / catObj use Kubo RPC
  • IPFS_GATEWAY_URL set: gateway-first fetch + only-hash verify; tamper fails; gateway miss falls back to RPC
  • Writes still go through Kubo RPC (not gateway)

Phase 2a — Node LDP (control plane cache)

  • Solid unset: Runtime.execute returns bom_ldp_uri, bom_solid_uri is None
  • BomLdpStore persists under .cats/ldp/boms/; Flask GET /ldp/boms/ and GET /ldp/boms/<cid> return JSON-LD + Link headers
  • Client PUT /ldp/boms/...405
  • fetch_bom_envelope(bom_ldp_uri) verifies; tampered envelope fails
  • Path-traversal / invalid bom_cid segments rejected

Phase 2a — Solid dual-write (landing)

  • Solid configured (mocked HTTP): dual-write returns bom_solid_uri; LDN called best-effort
  • Bad credentials / 401–403 from pod → SolidPublishError fails Runtime.execute
  • Auth unset when Solid configured → fail closed
  • LDN Inbox down / 5xx → execute still succeeds after Solid PUT
  • fetch_bom_envelope(bom_solid_uri) verifies Data Integrity
  • WebID profile links Node did:key VM; ensure_solid_bom_acl exercises WAC bootstrap (mocked)
  • Optional live CSS: run Community Solid Server separately; set SOLID_POD_BASE_URL + credentials; ensure_solid_bom_acl; execute Order; GET bom_solid_uri and verify

Node ops (same PR)

  • Foreign process on Node port (e.g. AirPlay) → start/status fail with CAT_NODE_PORT guidance
  • cats.node listener accepted; stop does not shut down host Kubo

Docs / review

JEJodesty and others added 19 commits July 29, 2026 22:07
chore(deps): add cryptography and rfc8785 for did:key signing
 and eddsa-jcs-2022 Data Integrity proofs
feat(identity): multibase z-helpers and did:key keyfile under
 .cats/node_did.json; export node_did and load_node_signing_material;
refactor(identity): keep node_uri as Flask bind only;
chore(gitignore): ignore .cats/ key material
feat(feedback): JSON-LD/PROV ExecutionBom with node_did;
 eddsa-jcs-2022 sign/verify (sign_execution_bom);
feat(runtime): attribute and sign BOM before minting bom_cid;
test: cover DI round-trip, DID seams, and provenance node_did
docs(BOM,ControlFeedbackLoop,Lineage,STORAGE): Phase 1b signed
 JSON-LD/PROV envelope, Data Integrity proof, and DID attribution
feat(network): AddressStore gateway-first cat with only-hash
 verify and RPC fallback; wire ContentMesh cat/catObj;
feat(ipfs): only_hash_bytes, cid_format; skip __pycache__ on
 recursive add;
chore(gitignore): ignore structure **/__pycache__;
test: cover gateway verify, mesh cats, and CAT_NODE endpoint
feat(node): status/start require cats.node on the port; reject
 AirPlay-style listeners and suggest CAT_NODE_PORT;
test(node): cover foreign port holder and cats.node status;
docs(NodeLifeCycle): note AirPlay / CAT_NODE_PORT workaround
fix(infrastructure): run Plant/compose/obj-store stale cleanup
 before terraform destroy (redeploy path);
test: assert destroy invokes stale structure cleanup
docs(IPFS,STORAGE,DASHBOARDS): Phase 2a IPFS_GATEWAY_URL /
 CATS_CID_VERIFY; writes stay on Kubo RPC
feat(ldp): BomLdpStore, GET /ldp/boms routes, and
 fetch_bom_envelope with Data Integrity verify;
feat(runtime): publish signed BOM and return bom_ldp_uri;
feat(node): register LDP routes on cats.node Flask app;
test(ldp): cover store, routes, client verify, Runtime publish
docs(BOM): Runtime response includes bom_ldp_uri;
docs(NodeLifeCycle): GET /ldp/boms container and resource
feat(identity): emit minimal WebID profile linking Node did:key
 verification method; export webid_uri helpers
feat(ldp): SolidBomPublisher PUT with CID-safe paths;
 ensure_solid_bom_acl WAC bootstrap; LDN announce helper;
 extend fetch_bom_envelope for Solid URLs
feat(runtime): after BomLdpStore put, publish to Solid when
 configured and return bom_solid_uri; fail execute on PUT
 failure; LDN announce best-effort
test(ldp): unit/integration for publisher, LDN, WebID/WAC,
 Runtime dual-publish; update LDP fetch mocks for headers
docs(solid): add SOLID.md env/plane split; document
 bom_solid_uri in BOM, NodeLifeCycle, STORAGE
docs(W3C): document w3c vs dev provenance delta with
 linked W3C/Solid/LDP/DID/Data Integrity stack
docs(images): regenerate code2flow and pyreverse assets
 after W3C network seams
W3C Integration: signed BOM, AddressStore, LDP cache, Solid dual-write
@JEJodesty JEJodesty added this to the 2. CATs’ Node milestone Aug 1, 2026
@JEJodesty JEJodesty self-assigned this Aug 1, 2026
@JEJodesty JEJodesty added documentation Improvements or additions to documentation enhancement New feature or request story Agile story testing Testing functionality System functionality labels Aug 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request functionality System functionality story Agile story testing Testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant