Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions LICENSE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ Copyright (c) 2026 Joe Feser.
The HACP draft text in this repository is licensed under the Creative Commons
Attribution 4.0 International License (CC BY 4.0).

Machine-readable artefacts, examples, and validation fixtures in this
repository are licensed under the Apache License, Version 2.0.
Machine-readable artefacts, schemas, examples, validation fixtures, executable
source code, and validation or generation scripts in this repository are
licensed under the Apache License, Version 2.0.

This split is intended to make the prose specification easy to review and cite
while allowing schemas, examples, and fixtures to be copied into implementation
test suites. If a file contains a different SPDX identifier or license notice,
that file's notice controls.
while allowing schemas, examples, fixtures, and their supporting code to be
copied into implementation test suites. Markdown and other narrative protocol
documents are prose unless explicitly identified as machine-readable data or
code. If a file contains a different SPDX identifier or license notice, that
file's notice controls.

License references:

Expand Down
17 changes: 12 additions & 5 deletions PUBLICATION-CHECKLIST.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,23 @@ Use this before making the repository public.
- [ ] Confirm README links resolve from the repository root.
- [ ] Confirm RFC drafts still say HACP is a working draft, not a standard.
- [ ] Confirm schemas and examples validate against the current draft intent.
- [ ] For HACP v0.3 candidate material, confirm owner-accepted external proof
- [x] For HACP v0.3 candidate material, confirm owner-accepted external proof
exists for single-consumer admission, restart readback,
claim-before-start failure (reject successor start without durable
readback of its accepted claim), ambiguous execution reporting, and
expiry/revocation ordering before merging the consumption-contract draft.
- [ ] Before publishing the executable v0.3 candidate conformance package,
Joe accepted the pinned who-decides 44-case proof on 2026-09-07 with its
closed-world, local, synthetic, and no-external-effect limitations.
- [x] Before publishing the executable v0.3 candidate conformance package,
record Joe's approval of every exact digest-domain string and the
second-implementation qualification rule.
- [ ] Require two independent reviews against the same pinned v0.3 candidate
package before treating its contracts as publication-ready.
second-implementation qualification rule. The exact `io.hacp.*` domains
and issue #47 Option 1 rule are recorded in the v3 manifest.
- [x] Require two independent reviews against the same pinned v0.3 candidate
package before treating its contracts as publication-ready. Two reviewers
independently reviewed exact package pin
`a865b36b371f8f49033fb3b05ebbb1f28fabbaa0`; their synthesis and the bounded
documentation corrections are recorded in
[the publication-readiness record](docs/v0.3-candidate-publication-readiness.md).
- [ ] Confirm issue templates or discussion settings are ready for public
review.
- [ ] Decide whether to publish as a personal repo first or move under an
Expand Down
27 changes: 18 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,15 @@ and matrix drift.

## Status

HACP is not a standard yet. It is a working draft based on practical experience
building and dogfooding one implementation. Vendor-neutrality is a design goal;
achieving it requires independent implementations and feedback from tool owners
who did not inherit the original implementation context.
HACP is not a standard yet. It is a working draft and candidate protocol based
on practical implementation evidence. WITS independently produces the seven
v0.3 candidate record kinds and HACP cross-validates that encoding. The pinned
who-decides 44-case proof supplies separate bounded evidence for the underlying
one-use continuation semantics; it does not produce or validate the v0.3 record
encoding. Together these are useful candidate evidence, not a claim of
distributed execution, external effects, bidirectional production, or standard
maturity. Vendor-neutrality remains a design goal and needs feedback from
implementers who did not inherit the original project context.

This repository is intended for public review of the draft contracts. Do not
describe an implementation as "HACP compliant" yet; use narrower labels such as
Expand All @@ -204,7 +209,8 @@ checked.
### Experimental Or Product-Proven But Not Standardized

- product-specific UX/readback and governance workflows;
- cross-vendor interoperability claims without independent implementations;
- interoperability claims beyond the two bounded candidate implementations and
their published limitations;
- any claim that schema validation alone proves operational safety;
- any maturity framing that implies a finalized or ratified standard.

Expand Down Expand Up @@ -386,8 +392,10 @@ executable candidate package:
[schemas/v0.3-candidate/](schemas/v0.3-candidate/).

Implementation-specific trial artefacts are not required to review this public
draft. Future releases may add public evidence bundles, conformance test
fixtures, and independent implementation reports.
draft. The v0.3 candidate package includes bounded public evidence, conformance
fixtures, and an independent-implementation report. Future work may add other
implementations, distributed-effect evidence, and the bidirectional evidence
required for full-release consideration.

## Reviewer Packet

Expand Down Expand Up @@ -482,8 +490,9 @@ and see [CONTRIBUTING.md](CONTRIBUTING.md) for contribution expectations.
## License

See [LICENSE.md](LICENSE.md). The draft prose is offered under CC BY 4.0, and
machine-readable artefacts, examples, and validation fixtures are offered under
Apache-2.0 unless a file states otherwise.
machine-readable artefacts, schemas, examples, validation fixtures, executable
source code, and validation or generation scripts are offered under Apache-2.0
unless a file states otherwise.

## Machine-Readable Draft Artefacts

Expand Down
17 changes: 10 additions & 7 deletions docs/source-packets/wits-v0/accountable-continuation-v0.3-draft.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,12 @@ Digest objects use `sha256` and the [HACP 0.2 canonicalization rules](../../hacp
omit a record's own top-level `digest` when hashing its JCS representation;
retain embedded reference digests, which bind their referenced records in their
own domains. This applies also to the separately referenced start-evidence
record, not to its display copy inside a report. The proposed
`org.hacp.*.v0.3-candidate` domains remain REVIEW-REQUIRED: consumers must
reject them unless an approved profile declares their coverage and
interpretation. The executable package supplies reproducible computed
candidate values without finalizing those domain strings as a standard.
record, not to its display copy inside a report. This source packet originally
proposed `org.hacp.*.v0.3-candidate` domains. That proposal is superseded by
Joe Feser's 2026-09-07 approval of the exact `io.hacp.*.v0.3-candidate` set
recorded in the executable package's v3 manifest. The approved strings remain
candidate-scoped and do not become standard or full-release domains merely
because they are reproducible.

Accepting a consumption claim proves only that one successor invocation was
admitted under the profile's concurrency rule. It does not prove provider
Expand Down Expand Up @@ -382,8 +383,10 @@ record is still required before marking work complete.
## Candidate Conformance Fixtures

The executable candidate package promotes the seven example shapes into
closed schemas and computed vectors. Its exact digest-domain identifiers
remain an explicit owner review gate. Issue
closed schemas and computed vectors. Joe approved its exact eight
`io.hacp.*.v0.3-candidate` digest-domain identifiers on 2026-09-07 for this
candidate package only; a changed identifier or full-release namespace remains
a separate owner review gate. Issue
[#47](https://github.com/joefeser/hacp/issues/47) records independent
production plus cross-validation as the second-implementation criterion for
candidate promotion; bidirectional production and consumption remains a
Expand Down
28 changes: 14 additions & 14 deletions docs/source-packets/wits-v0/examples/agent-report.candidate.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.agent-report.v0.3-candidate",
"value": "8883d823cdb11f94ab09163922cdf5d1a02b8f7a5f685491250a33ef1ee58840"
"digestDomain": "io.hacp.agent-report.v0.3-candidate",
"value": "11485a2f6ae984c39774a8552ddd54a67cf9fbce7488ef1fd7dbdef49f666e0d"
},
"continuationContext": {
"id": "context_example_successor_001",
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.continuation-context.v0.3-candidate",
"value": "92dfe026bee268300467761ad158a672bd3012331c56799bef6effa666b97993"
"digestDomain": "io.hacp.continuation-context.v0.3-candidate",
"value": "004fdf803d6bfe61a18f71ae8f350013ae5232d866352ec83387d9ff6114d3e1"
}
},
"packetId": "taskpkt_example_continue_review_001",
Expand All @@ -24,8 +24,8 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.human-decision.v0.3-candidate",
"value": "fcdc44811249a82aa110a64b4a0100612bcf8f80fb45f63a1f0e000b4df2d45a"
"digestDomain": "io.hacp.human-decision.v0.3-candidate",
"value": "545b43ca3c706c47090d953189d984506e6009a5efe5cfe03400edc0abcc0e0b"
}
},
"decisionRequest": {
Expand All @@ -34,16 +34,16 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.review-finding.v0.3-candidate",
"value": "9109eca466f076597196f4a043c5b09dc5d657c5771d99530974f7b038f9e769"
"digestDomain": "io.hacp.review-finding.v0.3-candidate",
"value": "eb4f41e53bcbe6a6f8bada28db2b4397996c7b3e2dc4d9349e35d42c40f95c95"
}
},
"consumptionReceiptId": "receipt_example_claim_successor_001",
"consumptionReceiptDigest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.consumption-receipt.v0.3-candidate",
"value": "7e55396c6535614bb09c431cb34f26967ae7a5c8f75dc1718107bb68e35e81bd"
"digestDomain": "io.hacp.consumption-receipt.v0.3-candidate",
"value": "826e13a192113d89e805ecd906d004cbe55e018e55721871d8c95a8a8f3d5bc1"
},
"successorInvocationId": "invoke_example_docs_worker_001",
"startEvidence": {
Expand All @@ -52,16 +52,16 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.successor-start-evidence.v0.3-candidate",
"value": "b0dd85bf66139e05657234d7acf590d479eebbef2818dd17400752db8356fced"
"digestDomain": "io.hacp.successor-start-evidence.v0.3-candidate",
"value": "bca53a6750b9b15d0fc5d29caf00557aef93c8bcfb48c419e3a4816231543d4c"
},
"successorInvocationId": "invoke_example_docs_worker_001",
"consumptionReceiptId": "receipt_example_claim_successor_001",
"consumptionReceiptDigest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.consumption-receipt.v0.3-candidate",
"value": "7e55396c6535614bb09c431cb34f26967ae7a5c8f75dc1718107bb68e35e81bd"
"digestDomain": "io.hacp.consumption-receipt.v0.3-candidate",
"value": "826e13a192113d89e805ecd906d004cbe55e018e55721871d8c95a8a8f3d5bc1"
},
"acceptedClaimReadBackAt": "2026-09-03T18:05:01Z",
"workStartedAt": "2026-09-03T18:05:02Z",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
"decisionDigest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.human-decision.v0.3-candidate",
"value": "fcdc44811249a82aa110a64b4a0100612bcf8f80fb45f63a1f0e000b4df2d45a"
"digestDomain": "io.hacp.human-decision.v0.3-candidate",
"value": "545b43ca3c706c47090d953189d984506e6009a5efe5cfe03400edc0abcc0e0b"
},
"decisionRequest": {
"kind": "review_finding",
"id": "finding_example_needs_owner_decision_001",
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.review-finding.v0.3-candidate",
"value": "9109eca466f076597196f4a043c5b09dc5d657c5771d99530974f7b038f9e769"
"digestDomain": "io.hacp.review-finding.v0.3-candidate",
"value": "eb4f41e53bcbe6a6f8bada28db2b4397996c7b3e2dc4d9349e35d42c40f95c95"
}
},
"claim": {
Expand Down Expand Up @@ -48,8 +48,8 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.consumption-receipt.v0.3-candidate",
"value": "7e55396c6535614bb09c431cb34f26967ae7a5c8f75dc1718107bb68e35e81bd"
"digestDomain": "io.hacp.consumption-receipt.v0.3-candidate",
"value": "826e13a192113d89e805ecd906d004cbe55e018e55721871d8c95a8a8f3d5bc1"
},
"boundaryStatement": "Illustrative acceptance only: issuer trust, uniqueness, and current-status policy require an independently approved profile. These hypothetical evidence references prove no actual admission. Accepted admission does not prove provider execution, external side effects, merge readiness, or exactly-once downstream completion."
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.human-decision.v0.3-candidate",
"value": "fcdc44811249a82aa110a64b4a0100612bcf8f80fb45f63a1f0e000b4df2d45a"
"digestDomain": "io.hacp.human-decision.v0.3-candidate",
"value": "545b43ca3c706c47090d953189d984506e6009a5efe5cfe03400edc0abcc0e0b"
}
},
"consumptionReceipt": {
"id": "receipt_example_claim_successor_001",
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.consumption-receipt.v0.3-candidate",
"value": "7e55396c6535614bb09c431cb34f26967ae7a5c8f75dc1718107bb68e35e81bd"
"digestDomain": "io.hacp.consumption-receipt.v0.3-candidate",
"value": "826e13a192113d89e805ecd906d004cbe55e018e55721871d8c95a8a8f3d5bc1"
}
},
"successorInvocationId": "invoke_example_docs_worker_001",
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.continuation-context.v0.3-candidate",
"value": "92dfe026bee268300467761ad158a672bd3012331c56799bef6effa666b97993"
"digestDomain": "io.hacp.continuation-context.v0.3-candidate",
"value": "004fdf803d6bfe61a18f71ae8f350013ae5232d866352ec83387d9ff6114d3e1"
},
"boundaryStatement": "Illustrative required input, not active authority. The consumer must authenticate the context integrity through its independently trusted human-approved profile; a self-supplied digest is insufficient. Revocation/current-status policy and external proof remain unresolved."
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
"packetDigest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.task-packet.v0.3-candidate",
"value": "93d2671faf60e66f1011130da23c39df6d949fb7a6eba8c65c38089c8303e9d8"
"digestDomain": "io.hacp.task-packet.v0.3-candidate",
"value": "c330d201bd02c7176542740377ea5be9f9b0621b3ea67f7e8e520464a10d58a4"
},
"decisionRequest": {
"kind": "review_finding",
"id": "finding_example_needs_owner_decision_001",
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.review-finding.v0.3-candidate",
"value": "9109eca466f076597196f4a043c5b09dc5d657c5771d99530974f7b038f9e769"
"digestDomain": "io.hacp.review-finding.v0.3-candidate",
"value": "eb4f41e53bcbe6a6f8bada28db2b4397996c7b3e2dc4d9349e35d42c40f95c95"
}
},
"actor": {
Expand Down Expand Up @@ -50,8 +50,8 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.human-decision.v0.3-candidate",
"value": "fcdc44811249a82aa110a64b4a0100612bcf8f80fb45f63a1f0e000b4df2d45a"
"digestDomain": "io.hacp.human-decision.v0.3-candidate",
"value": "545b43ca3c706c47090d953189d984506e6009a5efe5cfe03400edc0abcc0e0b"
},
"boundaryStatement": "This decision is immutable source evidence. Consumption is recorded in a separate receipt."
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"packetDigest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.task-packet.v0.3-candidate",
"value": "93d2671faf60e66f1011130da23c39df6d949fb7a6eba8c65c38089c8303e9d8"
"digestDomain": "io.hacp.task-packet.v0.3-candidate",
"value": "c330d201bd02c7176542740377ea5be9f9b0621b3ea67f7e8e520464a10d58a4"
},
"severity": "medium",
"summary": "Returned evidence is actionable, but continuation would consume a human decision and start a successor invocation.",
Expand All @@ -23,7 +23,7 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.review-finding.v0.3-candidate",
"value": "9109eca466f076597196f4a043c5b09dc5d657c5771d99530974f7b038f9e769"
"digestDomain": "io.hacp.review-finding.v0.3-candidate",
"value": "eb4f41e53bcbe6a6f8bada28db2b4397996c7b3e2dc4d9349e35d42c40f95c95"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.stop-response.v0.3-candidate",
"value": "0233f83463eea76bce60acd0de145c232e70e0524df3e02fa3aee546b4913868"
"digestDomain": "io.hacp.stop-response.v0.3-candidate",
"value": "64a590fc29e8e0969771dbfeab58d3b59bf9bcfdab8a338cccd10ea826a8745e"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"digest": {
"algorithm": "sha256",
"canonicalization": "json-rfc8785-jcs",
"digestDomain": "org.hacp.task-packet.v0.3-candidate",
"value": "93d2671faf60e66f1011130da23c39df6d949fb7a6eba8c65c38089c8303e9d8"
"digestDomain": "io.hacp.task-packet.v0.3-candidate",
"value": "c330d201bd02c7176542740377ea5be9f9b0621b3ea67f7e8e520464a10d58a4"
},
"sourceContext": {
"humanRequest": "Review the returned finding and continue only if the owner approves the bounded follow-up.",
Expand Down
Loading