From a18b9828e1efbd5816096c8be4b9d408bd3e9e60 Mon Sep 17 00:00:00 2001 From: Joe Feser Date: Tue, 6 Oct 2026 14:11:34 -0500 Subject: [PATCH 1/2] Prepare Artifact Memory v0.1.4 candidate --- README.md | 1 + artifact_memory/__init__.py | 2 +- docs/release/v0.1.4-release-notes.md | 124 ++++++++++++++++++ docs/release/versioning-and-launch.md | 2 +- .../synthetic/scan/v2/expected-receipt.json | 16 +-- pyproject.toml | 2 +- 6 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 docs/release/v0.1.4-release-notes.md diff --git a/README.md b/README.md index 8a2e1e5..bfa922e 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Versioning and release requirements are in [the release policy](docs/release/versioning-and-launch.md) and [the readiness audit](docs/release/public-readiness-audit.md). The current [support boundary](SUPPORT.md), +[v0.1.4 candidate notes](docs/release/v0.1.4-release-notes.md), [published v0.1.3 release notes](docs/release/v0.1.3-release-notes.md), historical [v0.1.2 release notes](docs/release/v0.1.2-release-notes.md), historical [v0.1.1 release notes](docs/release/v0.1.1-release-notes.md), historical diff --git a/artifact_memory/__init__.py b/artifact_memory/__init__.py index 4d29fed..d3b30c1 100644 --- a/artifact_memory/__init__.py +++ b/artifact_memory/__init__.py @@ -1,4 +1,4 @@ """Provider-free Artifact Memory v0 reference runtime.""" -__version__ = "0.1.3" +__version__ = "0.1.4" CONTRACT_VERSION = "v0" diff --git a/docs/release/v0.1.4-release-notes.md b/docs/release/v0.1.4-release-notes.md new file mode 100644 index 0000000..9424b27 --- /dev/null +++ b/docs/release/v0.1.4-release-notes.md @@ -0,0 +1,124 @@ +# Artifact Memory 0.1.4 release notes + +Artifact Memory 0.1.4 is a private-vault onboarding and coordination-plane +update over v0.1.3. It adds a CLI-first path for bounded private operational +context, strict portable coordination records, local-first synchronization, +repository-bound freshness and scoping, and optional authenticated HTTP seams +for WITS coordination. + +Release status is established only by an owner-signed annotated `v0.1.4` tag +and its verified release-manifest binding. This reviewed source document does +not claim that signing, publication, or attestation has occurred. + +## Private-vault onboarding + +- The private-project guide and synthetic end-to-end fixture demonstrate + canonical records outside Git, replaceable SQLite projections, literal + search, bounded context-pack v4 export, and independent informational recall. +- Public fixtures remain wholly synthetic. Real vault records, generated + private views, credentials, raw conversations, and private topology remain + outside the public repository. +- The session-ledger importer converts a bounded dated Markdown done log into + deterministic private draft knowledge records. It rejects undated content, + oversized input, unsafe paths, immutable collisions, and credential-like + material before publishing any record. +- A generated projection or context pack remains a disposable view rather than + the canonical source. Storage does not imply encryption or backup, and + expiry does not establish deletion or global erasure. + +## Coordination records and local-first synchronization + +- Strict TaskPacket, WorkReceipt, and AccessLabel schemas preserve portable + UUID identity, display-name provenance, typed evidence, predecessor + transitions, project-scoped permissions, and explicit no-authority fields. +- Revision identity remains the complete `(record_id, revision_digest)` pair. + Local and hub sets merge by union; different revisions of one logical record + coexist, while different bytes claiming the same complete pair are + quarantined rather than auto-resolved. +- Local append writes immutable coordination records and an outbox receipt + before network synchronization. Pending HTTP outcomes survive interruption + and require exact replay and acknowledgement before removal. +- Sync verifies complete authorized history, current task leaves, pair-set + digests, bounded pagination, continuation binding, and explicit exclusion + counts. Withheld identities are not disclosed by count-only receipts. +- Resource limits are checked before expensive parsing, canonicalization, or + uniqueness comparison. Unsafe files, links, reparse points, oversized state, + recursive JSON, out-of-profile canonical values, and interrupted local apply + fail with typed outcomes. + +## Repository identity, onboarding, context and freshness + +- A committed `.agent-memory/repo.json` binds a repository to a stable UUID and + public-safe display name without treating a path, remote URL, hostname, or + checkout location as identity. +- Project onboarding validates the exact server-bound label and repository + identity, synchronizes the authorized set, and publishes immutable link, + kickoff, receipt, attempt, checkpoint, and recovery evidence transactionally. +- Scoped coordination context export uses the latest authorized projection and + effective AccessLabel. Grant/deny overlap, stale or ambiguous bindings, and + unsupported required extensions fail closed. +- Freshness is linked to an exact repository head. A kickoff pack may report + current, stale, dirty, unavailable, or unsupported evidence without claiming + global task truth. +- Acceptance commands are escaped and rendered as untrusted informational + data. Artifact Memory never executes them or promotes them into tool policy. + +## Authenticated HTTP coordination seams + +- The optional HTTP sync adapter uses standard-library TLS, refuses redirects + and URL credentials, ignores environment proxies, and permits cleartext only + for literal loopback fixtures. Bearers are supplied out of band through an + environment variable or in-memory API and are not persisted. +- The adapter verifies the expected logical hub, principal, exact AccessLabel, + sequential page receipts, complete authorized pair set, and the existing + local projection contract. It does not create a second coordination store. +- `artifact-memory claim` accepts one explicit exact open TaskPacket reference. + The authenticated hub alone mints and admits a claimed successor; the client + performs a second verified pull and reports only reference-bound evidence. +- Claim conflicts never select a fallback task. Lost or invalid responses are + unverified outcomes, and retries require the same original exact reference. +- The synthetic WITS bridge fixtures demonstrate protocol interoperability on + one machine. They do not establish deployed two-host operation, automatic + worker launch, production availability, or HTTP project onboarding. + +## Compatibility + +- Published v0.1.0-v0.1.3 schemas retain their original meanings. Existing + record, context-pack, exchange, retention, release, search, and projection + contracts are not silently reinterpreted. +- Coordination schemas and CLI commands are additive and opt-in. Existing + provider-free record, projection, search, context, and release commands + remain available. +- The local-directory sync adapter and deterministic fixture behavior remain + supported. HTTP transport requires separately provisioned compatible WITS + routes, bearer capabilities, retained labels, origin/project ownership, and + server token policy. +- Repository onboarding writes a new strict public identity manifest only when + explicitly invoked. Existing repositories are not discovered or modified + automatically. + +## Authority and remaining limitations + +Artifact Memory preserves and transports informational evidence. Records, +labels, receipts, context packs, kickoff packs, successful sync, and an +authenticated transport grant no execution, mutation, routing, disclosure, +credential, spending, deployment, approval, declassification, or merge +authority. A WITS Task Packet or HACP route remains a separate authority-bearing +contract enforced by its owning system. + +The reference runtime is not a hosted coordination service, scheduler, agent +runner, credential manager, or global deletion system. HTTP project onboarding +and automatic worker launch remain unsupported. Integrity and provenance do not +establish authenticity or trust; unsigned evidence remains +`integrity-verified / issuer-unverified`. Generated indexes remain replaceable, +and private-vault custody, encryption, backup, retention, and disclosure policy +remain operator responsibilities. + +## Verification + +Before publication, run the complete unit and conformance suites, public-safety +and public-JSON scans, installed-package smoke test, platform matrix, release +compatibility checks, deterministic candidate preparation, and the signed-tag +release-candidate verifier against the exact owner-approved commit. Publication +then triggers the separate keyless attestation workflow; that supplemental +workflow does not replace owner signing. diff --git a/docs/release/versioning-and-launch.md b/docs/release/versioning-and-launch.md index b2f178f..1d27be3 100644 --- a/docs/release/versioning-and-launch.md +++ b/docs/release/versioning-and-launch.md @@ -6,7 +6,7 @@ Artifact Memory versions five surfaces independently: | --- | --- | --- | | Protocol | Product protocol generation such as `v0`. | Describes the supported product contract set; it is not an implementation API promise. | | Schemas | Every schema identifier ends in its own `/vN`. | Breaking field, identity, authority, or required-behavior changes require a new schema version. | -| Reference CLI/package | Python package semantic version, currently `0.1.3`. | Before 1.0, implementation APIs may change; versioned record and receipt contracts are not silently reinterpreted. | +| Reference CLI/package | Python package semantic version, currently `0.1.4`. | Before 1.0, implementation APIs may change; versioned record and receipt contracts are not silently reinterpreted. | | Adapters/providers | Provider-owned contract `/vN` plus the Artifact Memory adapter-manifest version. | Provider schemas remain provider contracts and never become core schemas implicitly. | | Fixtures/receipts | Each vector and receipt schema has its own `/vN`. | Checked receipts bind exact fixture bytes and cannot be carried forward after vectors change. | diff --git a/fixtures/synthetic/scan/v2/expected-receipt.json b/fixtures/synthetic/scan/v2/expected-receipt.json index df28f42..3cdf258 100644 --- a/fixtures/synthetic/scan/v2/expected-receipt.json +++ b/fixtures/synthetic/scan/v2/expected-receipt.json @@ -1,13 +1,13 @@ { "case_count": 7, "cases": [ - {"excluded_entry_count": 0, "failure_codes": [], "id": "complete-file", "manifest_ref": "manifest://f8a73f74fe531b11edff773cb2e60aafc428726fc92234fd9f50968212b43e1f", "manifest_tree_digest": "sha-256:12d95ba17f4e886845a16f47cbd9baf3e15daab3a5ee264148a37f5e661051c2", "outcome": "complete", "receipt_ref": "scan-receipt://sha-256/60904c6bb8e9683520e5bee4917d01b9853f16f8589644f32282ebb1cec14ec7", "warning_codes": []}, - {"excluded_entry_count": 1, "failure_codes": [], "id": "declared-exclusion", "manifest_ref": "manifest://734c54a61fd7eca22f63ad72b707b8093559bade29ac9e75a23191452e3a6b76", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "complete", "receipt_ref": "scan-receipt://sha-256/57896c26dc60b9410e5d7ccfc0f042c7e3df794df2d43afb84f0c11811c50d85", "warning_codes": []}, - {"excluded_entry_count": 0, "failure_codes": ["unreadable"], "id": "inaccessible-entry", "manifest_ref": "manifest://d027f409de045584140f1c667cc5c12f33d9d1f908623e00718967f3bfb5654a", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/25c03a8878406894d3de776e307afd1d419053884f272d601b66fbb2d69afe30", "warning_codes": []}, - {"excluded_entry_count": 0, "failure_codes": ["unstable"], "id": "changing-file", "manifest_ref": "manifest://fe08626dca8aaab25919e0964123e77bcce0e6ee2ee7a91d348e0c9f1bc4320c", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/914262efefc49ef4b942b04f34e3d44fdb6cc62d3129ca01f1b4e9ff9f4ae980", "warning_codes": []}, - {"excluded_entry_count": 0, "failure_codes": [], "id": "byte-budget", "manifest_ref": "manifest://5cf0b959f636529c1b5ba20196882618cc896c291d1399d5d4806f299a2b263e", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/701c7890893b0f588b8f375213cf9d7fe75972bfc6c7bd31dfe302f35f5dba65", "warning_codes": ["resource-limit"]}, - {"excluded_entry_count": 0, "failure_codes": ["unreadable"], "id": "unavailable-root", "manifest_ref": "manifest://f705a1b2eead1bbfcf342eab20af596ed18061af6f5c6e07346d3c5dc3b722b5", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "failed", "receipt_ref": "scan-receipt://sha-256/89e9c19eb4daf7d38e70002592b88457614f3e7c5de45db04a6653bea0399fad", "warning_codes": []}, - {"excluded_entry_count": 0, "failure_codes": [], "id": "caller-cancelled", "manifest_ref": "manifest://fc7e07358e2f065681468f8336da90525ddfa3298336bf116c8f233a34c74289", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "cancelled", "receipt_ref": "scan-receipt://sha-256/b502fe3472ffb879228adc2c2449cad5902a0e54c2188ee01651fbde64a01b96", "warning_codes": ["cancelled"]} + {"excluded_entry_count": 0, "failure_codes": [], "id": "complete-file", "manifest_ref": "manifest://f8a73f74fe531b11edff773cb2e60aafc428726fc92234fd9f50968212b43e1f", "manifest_tree_digest": "sha-256:12d95ba17f4e886845a16f47cbd9baf3e15daab3a5ee264148a37f5e661051c2", "outcome": "complete", "receipt_ref": "scan-receipt://sha-256/d172ea6b5cf3bc025032ede9d24eba595f3389d28a0fb75a98497cbce4e603a6", "warning_codes": []}, + {"excluded_entry_count": 1, "failure_codes": [], "id": "declared-exclusion", "manifest_ref": "manifest://734c54a61fd7eca22f63ad72b707b8093559bade29ac9e75a23191452e3a6b76", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "complete", "receipt_ref": "scan-receipt://sha-256/4aa5fb37d7937d6fde0a2d72dde7971eaa83db3915a9296fba9947485741f2ff", "warning_codes": []}, + {"excluded_entry_count": 0, "failure_codes": ["unreadable"], "id": "inaccessible-entry", "manifest_ref": "manifest://d027f409de045584140f1c667cc5c12f33d9d1f908623e00718967f3bfb5654a", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/c4f5fac9399338ae1af61e4159d21a80c24aef05773193c50f8f390104b77661", "warning_codes": []}, + {"excluded_entry_count": 0, "failure_codes": ["unstable"], "id": "changing-file", "manifest_ref": "manifest://fe08626dca8aaab25919e0964123e77bcce0e6ee2ee7a91d348e0c9f1bc4320c", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/7c78e45d9f3bff06150c5951c14fa8e32c546601248d8e7ab98e1e799a126e6e", "warning_codes": []}, + {"excluded_entry_count": 0, "failure_codes": [], "id": "byte-budget", "manifest_ref": "manifest://5cf0b959f636529c1b5ba20196882618cc896c291d1399d5d4806f299a2b263e", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "partial", "receipt_ref": "scan-receipt://sha-256/88f537ff280721a7290d2e469acf0b346b5778b58d44510d7f850a5bb0d1f531", "warning_codes": ["resource-limit"]}, + {"excluded_entry_count": 0, "failure_codes": ["unreadable"], "id": "unavailable-root", "manifest_ref": "manifest://f705a1b2eead1bbfcf342eab20af596ed18061af6f5c6e07346d3c5dc3b722b5", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "failed", "receipt_ref": "scan-receipt://sha-256/887d7e6a24926a73609ed32817a96bc4faa1b07011a24d604ffcf2e09556a47c", "warning_codes": []}, + {"excluded_entry_count": 0, "failure_codes": [], "id": "caller-cancelled", "manifest_ref": "manifest://fc7e07358e2f065681468f8336da90525ddfa3298336bf116c8f233a34c74289", "manifest_tree_digest": "sha-256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "outcome": "cancelled", "receipt_ref": "scan-receipt://sha-256/47c8ca1a8e95e499170a082db9fb57a7769ef867a9c7a0b8ffcf2d711d41398d", "warning_codes": ["cancelled"]} ], "claims": [ "declared exclusions remain separately accounted without weakening a complete outcome", @@ -21,7 +21,7 @@ ], "outcome": "complete", "outcomes": {"cancelled": 1, "complete": 2, "failed": 1, "partial": 3}, - "receipt_id": "scan-conformance-receipt://4493b3cd4bd78aafd28c9d945323abd42bf782bde6db6af87e33ce20e58b38fd", + "receipt_id": "scan-conformance-receipt://9e2261524828bc7554d77f7922cb9334289d9cbc3c9996c64e951c62067c59aa", "schema_id": "artifact-memory/scan-conformance-receipt/v1", "synthetic": true } diff --git a/pyproject.toml b/pyproject.toml index 0ec12d2..03a7085 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "artifact-memory" -version = "0.1.3" +version = "0.1.4" description = "Provider-free reference runtime for portable, verifiable artifact memory" readme = "README.md" requires-python = ">=3.11" From 8b8a51ae636f6c8d555dfd58d6cf274650c58607 Mon Sep 17 00:00:00 2001 From: Joe Feser Date: Tue, 6 Oct 2026 14:26:14 -0500 Subject: [PATCH 2/2] Clarify v0.1.4 release compatibility --- docs/release/v0.1.4-release-notes.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/release/v0.1.4-release-notes.md b/docs/release/v0.1.4-release-notes.md index 9424b27..b217cee 100644 --- a/docs/release/v0.1.4-release-notes.md +++ b/docs/release/v0.1.4-release-notes.md @@ -60,6 +60,9 @@ not claim that signing, publication, or attestation has occurred. - Freshness is linked to an exact repository head. A kickoff pack may report current, stale, dirty, unavailable, or unsupported evidence without claiming global task truth. +- The exact-head hardening reviewed through PR #158 bounds retained + coordination reads, project-UUID sets, interrupted-apply recovery, and + canonicalization failure paths while preserving typed outcomes. - Acceptance commands are escaped and rendered as untrusted informational data. Artifact Memory never executes them or promotes them into tool policy. @@ -93,6 +96,12 @@ not claim that signing, publication, or attestation has occurred. supported. HTTP transport requires separately provisioned compatible WITS routes, bearer capabilities, retained labels, origin/project ownership, and server token policy. +- WITS's original authenticated round-trip v0 canary remains intentionally + pinned to the owner-signed Artifact Memory 0.1.0 package and rejects other + package versions. Run that historical canary in its dedicated 0.1.0 + environment; do not substitute 0.1.4 until WITS separately updates its + release binding and expected-version guard. The v0.1.4 coordination HTTP + fixtures are separate, explicitly pinned interoperability evidence. - Repository onboarding writes a new strict public identity manifest only when explicitly invoked. Existing repositories are not discovered or modified automatically.