Conversation
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
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.
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 -qtests/treePhase 1 / 1b — DID + Data Integrity
sign_execution_bom→verify_execution_bomsucceedsinvoice_cid(or other claim) fails verifyCAT_NODE_DIDmismatch / missing keyfile refuse to signRuntime.executeresponsebomincludesnode_did, PROV edges, andproof(eddsa-jcs-2022);bom_cidis CID of the signed objectPhase 2a — AddressStore (data plane)
cat/catObjuse Kubo RPCIPFS_GATEWAY_URLset: gateway-first fetch + only-hash verify; tamper fails; gateway miss falls back to RPCPhase 2a — Node LDP (control plane cache)
Runtime.executereturnsbom_ldp_uri,bom_solid_uri is NoneBomLdpStorepersists under.cats/ldp/boms/; FlaskGET /ldp/boms/andGET /ldp/boms/<cid>return JSON-LD + Link headersPUT /ldp/boms/...→ 405fetch_bom_envelope(bom_ldp_uri)verifies; tampered envelope failsbom_cidsegments rejectedPhase 2a — Solid dual-write (landing)
bom_solid_uri; LDN called best-effortSolidPublishErrorfailsRuntime.executefetch_bom_envelope(bom_solid_uri)verifies Data Integritydid:keyVM;ensure_solid_bom_aclexercises WAC bootstrap (mocked)SOLID_POD_BASE_URL+ credentials;ensure_solid_bom_acl; execute Order; GETbom_solid_uriand verifyNode ops (same PR)
CAT_NODE_PORTguidancecats.nodelistener accepted; stop does not shut down host KuboDocs / review
SOLID_*)bom_ldp_uri/bom_solid_uri)