Skip to content

ci(p3a): establish reproducible Windows portable build identity - #448

Merged
masarray merged 10 commits into
mainfrom
ci/p3a-reproducible-portable-build
Oct 7, 2026
Merged

masarray merged 10 commits into
mainfrom
ci/p3a-reproducible-portable-build

Conversation

@masarray

@masarray masarray commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Closes #447

What changes

  • Request MSVC reproducible shared-library output (/Brepro) for the pinned ArdIrec bridge.
  • Make managed publish determinism explicit with Deterministic=true and ContinuousIntegrationBuild=true.
  • Emit ARSAS-*-portable-build-identity.json containing source, ARIEC61850, ArdIrec lock, native bridge and portable EXE SHA-256/size evidence.
  • Upload build identity from both existing independent builders: Build ARSAS and Smart Discovery Field Capture.
  • Add regression tests locking the reproducibility contract.
  • No new heavy workflow and no static CI-count increase.

Safety boundary

P3A does not authorize binary reuse yet. P2F's binary-reuse prohibition remains until the two independent CI lanes actually produce identical bridge and portable hashes on matching inputs.

Acceptance

All existing CI green; canonical and Field Capture identities show exact matching source/engine/ArdIrec commits; bridge SHA-256 identical; portable EXE SHA-256 identical. If hashes still differ, P3B is blocked and the identity evidence will locate the remaining nondeterminism.

masarray commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

CI-P3A final acceptance on exact head 7b2a0a9d98d45e34689bf587c0c23ee1c76b40ca / synthetic merge 3794b29fa71695ec4ea099469ae2e55054d3d3f8:

  • All 13 triggered workflows SUCCESS, including Build ARSAS, Windows installer validation, COMTRADE integration, Field Capture, P0/P1 and Smart Discovery authority guards.
  • Early PowerShell packaging syntax gate PASS.
  • Pinned ArdIrec native bridge regression PASS with MSVC /Brepro.
  • Build ARSAS canonical identity:
    • source 3794b29f...
    • engine 64812409...
    • ArdIrec 7dbc7149...
    • bridge SHA256 fa8efcaf26e8ebb0a29808a2e52ad5c9f466ec2df146945d29c5d662987c41ce
    • portable SHA256 9fa7fac00c96acb24c98e64ff91ca9ee1709d9f1b89bf55030284ee3da4fc369
    • portable size 78,789,758 bytes.
  • Independent Field Capture identity is byte-for-byte identical on all of the above hashes and sizes.
  • This resolves the P2F non-reproducible binary blocker. The old binary-reuse prohibition remains conceptually fail-closed unless exact build identity matches; P3B can now promote canonical artifacts instead of rebuilding.

No runtime, IEC 61850 authority, physical evidence, installer semantics or release publication authority changed in P3A.

@masarray
masarray marked this pull request as ready for review October 7, 2026 08:30
@masarray
masarray merged commit c5946a2 into main Oct 7, 2026
18 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 7, 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-10-07T08:33:01.048726Z 7b2a0a9 Draft marked ready
ℹ️ 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.

@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: 7b2a0a9d98

ℹ️ 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".

portableSha256 = $portableHash
portableSizeBytes = (Get-Item $singleExePath).Length
deterministicManagedBuild = $true
reproducibleNativeLinkRequested = $true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Report reproducible linking only when it occurred

When callers supply -ArdIrecBridgePath, or when build-ardirec-bridge.ps1 reuses its existing destination DLL, this publish invocation never links the bridge with /Brepro; nevertheless, the emitted identity unconditionally attests that reproducible native linking was requested. This can make an arbitrary or stale bridge appear to carry reproducible-build provenance in evidence later used for cross-run acceptance. Derive this field from the actual bridge-build path, or verify/rebuild the bridge before setting it to true.

AGENTS.md reference: AGENTS.md:L11-L17

Useful? React with 👍 / 👎.

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.

CI-P3A: establish reproducible Windows portable build identity before artifact promotion

1 participant