Skip to content

Define experimental packet assembly attestation - #70

Merged
joefeser merged 2 commits into
mainfrom
codex/69-packet-assembly-attestation
Sep 8, 2026
Merged

joefeser merged 2 commits into
mainfrom
codex/69-packet-assembly-attestation

Conversation

@joefeser

@joefeser joefeser commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • define RFC-0010 as a separate experimental packet-assembly-attestation record family
  • bind an authenticated builder claim to the exact packet digest, source revisions and digests, construction profile, tool/runtime identities, time, transformations, and limitations
  • require independently selected builder trust and Ed25519 verification over an RFC 8785 canonical claim
  • preserve the builder, authorized human approver, runtime issuer/admitter, and executor as separate roles
  • add a closed JSON Schema, reproducible signed fixture, synthetic trust context, and six exact negative cases
  • leave every HACP v0.3-candidate schema, fixture, digest domain, and publication artifact unchanged

Explicit boundaries

  • A digest proves integrity after construction; it does not establish builder identity, source authenticity, correct interpretation, approval, or execution authority.
  • Authenticated construction provenance remains an attestation, not proof of correct assembly.
  • A bare createdBy string is rejected as insufficient.
  • The fixture key and identities are public synthetic test material with no production authority.
  • This change does not modify, republish, or version-bump HACP v0.3-candidate.

Validation

  • npm run hacp:packet-assembly-attestation — 1 valid, 6 exact invalid cases; 5/5 tests
  • npm run hacp:v03-candidate — 43/43 tests; all 22 exact negative cases
  • npm run hacp:cli-bridge-examples — 8/8 files
  • agent-control doctor --json
  • agent-control onboard doctor --repo joefeser/hacp --base main --json
  • JSON parsing and Node syntax checks
  • git diff --check
  • confirmed no diff under schemas/v0.3-candidate/

Closes #69.

Summary by Sourcery

Introduce an experimental, independently verifiable packet assembly attestation family without modifying the HACP v0.3-candidate package.

New Features:

  • Define RFC-0010 as a separate experimental packet assembly attestation record family for authenticated construction provenance.
  • Bind builder identity and construction claims to exact packet and source digests, revisions, profiles, tools, runtimes, transformations, timestamps, and limitations.

Enhancements:

  • Specify independent trust-anchor selection, Ed25519 signatures over RFC 8785 canonical claims, verification ordering, diagnostic codes, and explicit separation of builder, approver, runtime, and executor roles.
  • Keep packet assembly provenance separate from HACP v0.3-candidate schemas and clarify that attestations do not prove correct construction, approval, admission, or execution.

Documentation:

  • Add RFC-0010 and repository/schema documentation for the experimental record family and its non-authority boundaries.

Tests:

  • Add a closed JSON Schema, synthetic trust context, reproducible signed fixtures, and validation coverage for three digest representations plus six exact negative cases.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @joefeser, this account has used its review budget of 1,500,000 diff characters for the last 7 days.

You can request another review in 12 hours and 13 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Reviewer's Guide

This PR adds RFC-0010 and a separate experimental packet-assembly-attestation package: a closed schema and reproducible Ed25519/RFC 8785 fixture harness that verifies independently selected builder trust and exact construction provenance, while explicitly preserving the HACP v0.3-candidate package unchanged.

Sequence diagram for packet assembly attestation verification

sequenceDiagram
    participant Verifier
    participant Harness
    participant TrustContext
    participant Packet
    participant Sources
    participant Artifacts

    Verifier->>Harness: validateAttestation(attestation, verificationContext, validateSchema)
    Harness->>Harness: validateSchema(attestation)
    Harness->>Harness: digestClaim(attestation)
    Harness->>TrustContext: Resolve trusted builder principal and key
    TrustContext-->>Harness: Active principal, profile, Ed25519 public key
    Harness->>Harness: verify(signature, canonicalClaimInput(attestation), publicKey)
    Harness->>Packet: Resolve exact packet and compare packet digest
    Packet-->>Harness: Packet identity, schema version, digest
    Harness->>Sources: Resolve source revision and bytes
    Sources-->>Harness: Revision and SHA-256 digest
    Harness->>Artifacts: Resolve profile, tool, and runtime artifacts
    Artifacts-->>Harness: Artifact identities and digests
    Harness-->>Verifier: Valid or exact diagnostic code
Loading

File-Level Changes

Change Details Files
Introduces RFC-0010 as a separate experimental packet-assembly-attestation record family without changing the HACP v0.3-candidate package.
  • Documents the attestation’s scope, role separation, trust-anchor requirements, verification order, diagnostics, and non-authority boundaries.
  • Links the experimental RFC and package from the repository and schema documentation.
  • Adds an experimental package README describing its status, contents, and validation command.
README.md
rfcs/0010-packet-assembly-attestation.md
schemas/README.md
schemas/experimental/packet-assembly-attestation/v0.1-draft/README.md
Defines a closed, signed construction claim that binds builder identity and construction provenance to an exact packet.
  • Requires packet identity and digest, source revisions and digests, construction profile/tool/runtime artifacts, timestamp, transformations, limitations, and boundary statement.
  • Uses an RFC 8785 canonical claim envelope with a domain-separated SHA-256 claim digest and Ed25519 signature.
  • Keeps builder, human approver, runtime issuer/admitter, and executor as distinct roles and rejects bare createdBy metadata.
schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/valid/packet-assembly-attestation.valid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/profile.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/tool.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/runtime.json
Adds a reproducible fixture corpus and validator for independent trust and exact provenance verification.
  • Builds and checks a synthetic trust context, source resolution context, construction-artifact resolutions, and pinned candidate packet digest.
  • Validates schema closure, claim digest, independently supplied builder binding, Ed25519 signature, packet binding, source revision/digest, and construction artifact matching.
  • Covers one valid case and six exact negative diagnostics, including untrusted identity, signature corruption, claim mutation, packet mismatch, source substitution, and artifact mismatch.
scripts/validate-packet-assembly-attestation.mjs
scripts/validate-packet-assembly-attestation.test.mjs
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/manifest.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/verification-context.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/source-revision-substitution.invalid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/packet-digest-mismatch.invalid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/self-asserted-identity.invalid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/signature-mismatch.invalid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/changed-claim.invalid.json
schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/construction-artifact-mismatch.invalid.json
Adds a dedicated package validation command while preserving existing candidate validation and publication artifacts.
  • Runs fixture regeneration/checking and the dedicated Node test suite through npm.
  • Leaves v0.3-candidate schemas, fixtures, digest domains, manifests, and publication evidence untouched.
package.json

Assessment against linked issues

Issue Objective Addressed Explanation
#69 Explore authenticated packet-construction provenance as a separate future record family without modifying, republishing, or version-bumping the HACP v0.3-candidate schemas and artifacts.
#69 Define an authenticated construction attestation that binds the builder claim to the exact packet digest, source revisions and digests, construction metadata, time, transformations, limitations, and cryptographic evidence, with independently selected trust anchors and explicit verification and failure semantics.
#69 Preserve role separation and correctness boundaries, explicitly avoid treating digests or authenticated provenance as proof of correct construction, approval, runtime admission, or execution, and provide positive and negative conformance fixtures including identity, binding, substitution, and mismatch failures.

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@joefeser

joefeser commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Define experimental packet assembly attestation

✨ Enhancement 🧪 Tests 📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Defines RFC-0010 as a separate experimental packet assembly attestation family.
• Adds closed-schema, trust-bound RFC 8785 and Ed25519 validation.
• Provides one reproducible valid fixture and six exact negative cases.
Diagram

sequenceDiagram
  actor O as Owner Verifier
  participant A as Attestation
  participant V as Validator
  participant S as Closed Schema
  participant C as Claim Crypto
  participant T as Trust Profile
  participant R as Packet Sources
  participant X as Build Artifacts
  O->>V: Supply trust context
  A->>V: Submit claim
  V->>S: Validate shape
  S-->>V: Shape result
  V->>C: Check digest and signature
  C-->>V: Crypto result
  V->>T: Resolve builder identity
  T-->>V: Trust binding
  V->>R: Verify packet and sources
  R-->>V: Content bindings
  V->>X: Resolve construction identities
  X-->>V: Artifact bindings
  V-->>O: Accept or diagnose
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use DSSE with in-toto/SLSA provenance
  • ➕ Reuses established signing-envelope semantics and provenance tooling.
  • ➕ Improves interoperability with existing supply-chain verification ecosystems.
  • ➕ Avoids defining a bespoke cryptographic envelope if requirements converge.
  • ➖ Requires mapping HACP-specific packet, role-separation, and non-authority semantics onto broader predicates.
  • ➖ May not provide the exact trust-selection rules and stable diagnostics required by this draft.
  • ➖ Adds ecosystem dependencies and specification surface before requirements stabilize.

Recommendation: Keep the separate experimental record family because it isolates risk from v0.3-candidate and precisely captures HACP-specific trust and authority boundaries. Before promotion beyond experimental status, evaluate whether its claim can become an in-toto predicate carried by DSSE without weakening exact field, trust-selection, or diagnostic requirements.

Files changed (20) +1815 / -1

Enhancement (2) +678 / -0
packet-assembly-attestation.schema.jsonDefine the closed attestation JSON Schema +179/-0

Define the closed attestation JSON Schema

• Requires exact builder, packet, source, construction, transformation, limitation, digest, signature, and boundary fields. Restricts cryptography to SHA-256, RFC 8785 canonicalization, and Ed25519 for this draft.

schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json

validate-packet-assembly-attestation.mjsImplement fixture generation and fail-closed verification +499/-0

Implement fixture generation and fail-closed verification

• Generates the reproducible corpus and validates schema shape, canonical claim digest, trust binding, Ed25519 signature, packet and source bindings, and construction artifacts. Emits stable diagnostics for each failure stage.

scripts/validate-packet-assembly-attestation.mjs

Tests (13) +855 / -0
profile.jsonAdd synthetic construction profile descriptor +7/-0

Add synthetic construction profile descriptor

• Defines the fixture-only construction profile whose identity and bytes are bound by the attestation.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/profile.json

runtime.jsonAdd synthetic runtime identity descriptor +6/-0

Add synthetic runtime identity descriptor

• Defines the fixture-only Node.js runtime identity used for construction artifact verification.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/runtime.json

tool.jsonAdd synthetic builder tool descriptor +6/-0

Add synthetic builder tool descriptor

• Defines the fixture-only packet builder identity and version bound into the valid claim.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/construction/tool.json

changed-claim.invalid.jsonAdd post-signature claim mutation case +94/-0

Add post-signature claim mutation case

• Changes a declared transformation without refreshing the digest or signature, expecting CLAIM_DIGEST_MISMATCH.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/changed-claim.invalid.json

construction-artifact-mismatch.invalid.jsonAdd construction artifact mismatch case +94/-0

Add construction artifact mismatch case

• Uses a validly signed claim containing a tool digest that differs from resolved artifact bytes.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/construction-artifact-mismatch.invalid.json

packet-digest-mismatch.invalid.jsonAdd packet digest mismatch case +94/-0

Add packet digest mismatch case

• Uses a validly signed claim bound to a digest other than the reviewed packet digest.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/packet-digest-mismatch.invalid.json

self-asserted-identity.invalid.jsonAdd untrusted builder identity case +94/-0

Add untrusted builder identity case

• Signs the claim with an untrusted key and self-asserted principal, expecting fail-closed identity rejection.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/self-asserted-identity.invalid.json

signature-mismatch.invalid.jsonAdd corrupted Ed25519 signature case +94/-0

Add corrupted Ed25519 signature case

• Corrupts the valid fixture signature while preserving the claim digest, expecting SIGNATURE_INVALID.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/signature-mismatch.invalid.json

source-revision-substitution.invalid.jsonAdd source revision substitution case +94/-0

Add source revision substitution case

• Signs a substituted source revision that conflicts with independently supplied resolution context.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/invalid/source-revision-substitution.invalid.json

manifest.jsonDeclare exact conformance fixture outcomes +53/-0

Declare exact conformance fixture outcomes

• Lists one valid and six invalid fixtures with their exact expected diagnostics and evidence boundary.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/manifest.json

packet-assembly-attestation.valid.jsonAdd reproducible signed attestation fixture +94/-0

Add reproducible signed attestation fixture

• Provides a complete synthetic construction claim with packet, source, artifact, digest, and Ed25519 bindings.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/valid/packet-assembly-attestation.valid.json

verification-context.jsonAdd independent synthetic trust context +46/-0

Add independent synthetic trust context

• Supplies the admitted builder key, subject packet, source resolutions, and construction artifact resolutions externally to the attestation.

schemas/experimental/packet-assembly-attestation/v0.1-draft/fixtures/verification-context.json

validate-packet-assembly-attestation.test.mjsTest attestation trust and boundary semantics +79/-0

Test attestation trust and boundary semantics

• Covers the valid claim, six exact negative diagnostics, rejection of bare createdBy metadata, signed non-authority boundaries, and unchanged v0.3-candidate semantics.

scripts/validate-packet-assembly-attestation.test.mjs

Documentation (4) +280 / -0
README.mdList RFC-0010 and the experimental attestation package +12/-0

List RFC-0010 and the experimental attestation package

• Adds RFC-0010 to the RFC index and links the experimental schema package. Explicitly states that the package does not modify HACP v0.3-candidate.

README.md

0010-packet-assembly-attestation.mdSpecify authenticated packet construction provenance +208/-0

Specify authenticated packet construction provenance

• Defines the record, canonical claim, trust-anchor selection, ordered verification, role separation, diagnostics, and correctness boundaries. Keeps the proposal explicitly separate from HACP v0.3-candidate.

rfcs/0010-packet-assembly-attestation.md

README.mdDocument the experimental schema family +16/-0

Document the experimental schema family

• Publishes the experimental schema identifier, validation command, and explicit non-authority boundaries.

schemas/README.md

README.mdDocument the experimental attestation package +44/-0

Document the experimental attestation package

• Explains package status, validation behavior, synthetic trust limitations, and included schema and fixtures.

schemas/experimental/packet-assembly-attestation/v0.1-draft/README.md

Other (1) +2 / -1
package.jsonAdd packet assembly attestation validation command +2/-1

Add packet assembly attestation validation command

• Registers an npm command that checks generated fixtures and runs the dedicated test suite.

package.json

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-08T07:13:19.852921Z 200c615 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@qodo-code-review

qodo-code-review Bot commented Sep 8, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Some valid attestations are rejected ✓ Resolved 🐞 Bug ≡ Correctness
Description
sourceDigest() always hashes the supplied bytes directly and labels the result raw-bytes,
although $defs.sourceDigest also permits git-blob and json-rfc8785-jcs for source and
construction artifact digests. When a producer submits a schema-valid record using either
alternative representation, both validation loops compare the declaration with the raw-byte result
and report a mismatch even if the representation-specific digest is correct.
Code

schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json[R151-153]

+        "algorithm": { "const": "sha256" },
+        "representation": { "enum": ["raw-bytes", "git-blob", "json-rfc8785-jcs"] },
+        "value": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
Relevance

●●● Strong

Accepted history strongly favors tightening validators when schema permits states implementation
logic mishandles.

PR-#45
PR-#53

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The schema citation explicitly accepts three digest representations, while the shared
sourceDigest() helper citation shows that it hashes bytes directly and hard-codes the
representation as raw-bytes; the validation-loop citations show that both source bindings and
construction artifacts compare their declared digests against this result.

schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json[146-154]
scripts/validate-packet-assembly-attestation.mjs[63-68]
scripts/validate-packet-assembly-attestation.mjs[411-441]
scripts/validate-packet-assembly-attestation.mjs[418-440]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The schema accepts raw-byte, Git-blob, and canonical-JSON source digest representations, but the validator only derives and labels `raw-bytes` digests. Implement each advertised representation or restrict the schema to the one representation the validator supports so schema-valid `git-blob` and `json-rfc8785-jcs` records do not incorrectly fail validation.

## Issue Context
Both source bindings and construction artifacts use the shared `sourceDigest` definition and must follow the same representation policy. Add positive tests for every representation retained in the schema.

## Fix Focus Areas
- schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json[146-154]
- scripts/validate-packet-assembly-attestation.mjs[63-68]
- scripts/validate-packet-assembly-attestation.mjs[411-441]
- scripts/validate-packet-assembly-attestation.test.mjs[25-42]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Tests fail in spaced checkout paths ✓ Resolved 🐞 Bug ☼ Reliability
Description
The test module computes repoRoot from new URL(import.meta.url).pathname rather than converting
the file URL with fileURLToPath(), leaving escaped characters encoded and retaining a URL-style
drive prefix on Windows. Checkouts beneath paths containing spaces or non-ASCII characters, as well
as Windows checkouts, therefore make schema and candidate-fixture reads target nonexistent paths
before any tests execute.
Code

scripts/validate-packet-assembly-attestation.test.mjs[13]

+const repoRoot = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..');
Relevance

●●● Strong

Portable filesystem-path fixes are consistently accepted, including validator reliability
improvements.

PR-#20
PR-#25
PR-#45

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The test passes a URL pathname directly to path.dirname() and immediately derives all schema and
fixture filesystem reads from the resulting repoRoot. The adjacent production validator
demonstrates the portable approach by applying fileURLToPath(import.meta.url) before resolving its
repository root.

scripts/validate-packet-assembly-attestation.test.mjs[13-18]
scripts/validate-packet-assembly-attestation.test.mjs[70-73]
scripts/validate-packet-assembly-attestation.mjs[16-18]
scripts/validate-packet-assembly-attestation.test.mjs[13-22]
scripts/validate-packet-assembly-attestation.mjs[16-24]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The test derives a filesystem path from `new URL(import.meta.url).pathname`, which is not portable: URL-escaped characters remain encoded, and Windows file URLs retain a URL-style drive prefix. Replace this with Node's `fileURLToPath()` conversion so the test can locate repository files across supported paths and platforms.

## Issue Context
All schema and candidate-fixture paths in the test are derived from `repoRoot`, so an incorrect module-URL conversion prevents the complete test module from loading. The adjacent validator already uses `fileURLToPath(import.meta.url)` before resolving its repository root; use the same conversion in the test.

## Fix Focus Areas
- scripts/validate-packet-assembly-attestation.test.mjs[13-18]
- scripts/validate-packet-assembly-attestation.mjs[16-18]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Consumers cannot fetch the schema ✓ Resolved 🔗 Cross-repo conflict ≡ Correctness
Description
schemas/README.md and the new schema assign the experimental contract an official
https://hacp.io/schemas/... namespace, but the separately deployed hacp.io build only copies its
own site/src tree and has no mechanism to publish files from this repository. Any validator or
reader that dereferences the advertised directory or $id after this merge reaches the website
deployment without the schema, so publication must be coordinated or the identifier kept
non-routable.
Code

schemas/README.md[R33-34]

+  - `https://hacp.io/schemas/experimental/packet-assembly-attestation/v0.1-draft/`
+    for the separate experimental construction-provenance record family.
Relevance

●● Moderate

Publication concern is plausible, but historical evidence supports publication gates rather than
this exact cross-repository URL issue.

PR-#68

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR declares both the hacp.io namespace and the concrete schema $id. The hacp.io deployment
builds only the independent website repository's site/src directory into its artifact, so the
schema added under the protocol repository cannot appear at that URL without a coordinated website
change.

schemas/README.md[28-34]
schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json[1-4]
External repo: joefeser/hacp.io, site/scripts/build.mjs [5-11]
External repo: joefeser/hacp.io, amplify.yml [2-15]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new experimental schema uses an official hacp.io URL, but the hacp.io deployment does not publish files from the protocol repository.

## Issue Context
Either coordinate a hacp.io change that serves the schema at the declared path, or use a deliberately non-routable namespace and direct users to the repository copy.

## Fix Focus Areas
- schemas/README.md[28-34]
- schemas/experimental/packet-assembly-attestation/v0.1-draft/packet-assembly-attestation.schema.json[1-4]
- /cross_repos/hacp.io/site/scripts/build.mjs[5-11]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Cross-repo context — repo relationships
  Explored: repo: joefeser/hacp.io (sha: fbf3a724)
Review mode: 🧠 Deep: This introduces security-sensitive attestation, trust-anchor selection, canonical hashing/signature verification, schema enforcement, fixture generation, and multiple independent validation paths across substantial new logic, making redundant review materially valuable.

Grey Divider

Tip of the day
💡 Did you know, you can tweak Display preferences with a live preview to see your comment before it ships

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread scripts/validate-packet-assembly-attestation.test.mjs Outdated
Comment thread schemas/README.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dcaef16158

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/validate-packet-assembly-attestation.mjs Outdated
@joefeser

joefeser commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

@codex review

agent-control fresh required Codex review request

  • Current head: 200c615
  • Prior reviewed head: dcaef16
  • Reason: agent-control clean stale-review recovery: current head 200c615 has no unresolved threads, actionable bot findings, failed checks, or unacceptable merge state after patching review findings

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Another round soon, please!

Reviewed commit: 200c615b63

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@joefeser

joefeser commented Sep 8, 2026

Copy link
Copy Markdown
Owner Author

PR review loop disposition:

  • Thread: Define experimental packet assembly attestation #70 (review)
  • Reason: The stale Qodo summary covered four underlying threads: portable file-URL conversion, representation-aware source and construction-artifact digests, positive coverage for all retained digest representations, and the non-routable experimental schema identifier. Commit 200c615 patches each finding, and all four threads are resolved.
  • Fixing commit: 200c615
  • Validation evidence: npm run hacp:cli-bridge-examples passed (8 files); npm run hacp:v03-candidate passed (43/43 tests and 22 exact negatives); npm run hacp:packet-assembly-attestation passed (5/5 tests, 3 valid representations, 6 exact negatives); all schema JSON parsed; node syntax and git diff checks passed; schemas/v0.3-candidate is unchanged from origin/main.
  • Residual risk: medium: Qodo did not publish a refreshed exact-head top-level review; Codex returned on exact head and current checks are green, but required-review freshness remains subject to the repository owner gate.

This note records why the loop is not waiting indefinitely on this finding state.

@joefeser
joefeser merged commit 038fad8 into main Sep 8, 2026
2 checks passed
@joefeser
joefeser deleted the codex/69-packet-assembly-attestation branch September 8, 2026 07:58
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.

Define authenticated packet-construction provenance as a future record

1 participant