Repository navigation
apmx 0.6.0
Pre-releaseEXPERIMENTAL prerelease. Native notices and exact downloaded bytes are gated; this is not production certification.
Standalone apmx 0.6.0; candidate commit cadfa207e4645306199ddb85271c5f3e13340924.
Changes in v0.6.0: Accept factory PRs by proof
Review a factory once, then accept its pull requests with one apmx audit workflow step instead of re-reading every generated diff (examples/accept-factory-prs).
apmx auditneeds no flags: locally it audits the newest COMPLETE run; in a GitHub pull request it audits the receipt the PR adds and binds every changed file to a receipt output by SHA-256.--format sarifemits SARIF 2.1.0.- One policy file for APM and apmx:
apmx auditdiscovers the sameapm-policy.ymlasapm audit(read from the PR base in a PR) and owns onefactoriessection: approved definition digests, revoked capability content, required signatures and allowed signer workflows. Its rules gate with exit 1; an unreadable policy is INCOMPLETE (exit 2). - The Identity row verifies the receipt's GitHub artifact attestation with
gh attestation verifyand rejects unsigned receipts underrequire_signed. apmx check PRODUCER_RECEIPT [FACTORY]reruns a factory's checks on a producer's output bytes with no agent and writes the receipt of record.checkis now a reserved word.- The reusable
.github/workflows/run.ymlruns produce (agent), check (no agent) and attest (OIDC, no candidate code) as separate jobs. Thesetupaction installs this release only after verifying its SHA-256; theattestaction signs a VALID receipt. Reference them at@v0.6.0or its commit SHA. run.ymlruns a pinned factory package (factory: owner/repo#ref) against the caller's workspace, andapmx check --from PACKAGE_REFre-checks it; a ref that moves between jobs withdraws the receipt. Itschecks-requirementsinput installs a factory's hash-pinned check tools for the produce and check jobs.- A PR may apply a factory's patch instead of committing the
.diff:apmx auditapplies it to the merge-base with strictgit apply, and every touched file at head must match. apmx --from OWNER/REPO#REF --planpreviews a package that is not installed, resolving it in a private temporary workspace without installing anything or calling a model.scripts/demo.py prepare --factory-ref OWNER/REPO#TAGprepares the demo kit against a pinned factory package, so it shows the same definition digest as a signed CI receipt.- Native Windows retries transient antivirus or indexer locks on the bundled APM pin and backend with bounded backoff instead of halting.
See the v0.6.0 changelog.
What's new since v0.2.0
- Run a factory directory without writing orchestration: APMX derives execution order from the contracts' declared file dependencies.
- Deliver multiple output files together. Handoffs require every declared file, complete passing checks and an intact recorded inventory; the aggregate artifact view retains admitted outputs and the original required inputs/checks.
- Export real patches from private source edits with the bounded artifact tools, without changing the original checkout.
- Discover selected imported skills through native Copilot skill discovery, with clearer package-preparation progress and bounded terminal evidence.
- Try the software-factory example with optional Gherkin/Behave acceptance checks and separate regression checks. Its standalone checker now supports deeply nested Windows file paths with child-only Git configuration.
Compatibility and migration
BREAKING: imported skill metadata. Previously accepted imported skills can now fail admission without a nonempty name and description in SKILL.md. Names must be 1-64 lowercase letters/digits separated by single hyphens, with no leading or trailing hyphen. Selected context names must not collide case-insensitively; unsupported activation metadata is rejected.
Update the authored source package (for example, name: handoff-style with description: Write concise handoffs.), then select its updated revision through the normal dependency workflow, keeping apm.yml and its lock coherent. Do not patch generated apm_modules copies or edit lock digests by hand. Migration guide.
Leaf records use apm-contract-run/0.3 and factory records use apmx-contract-chain/0.2, separating execution from native assurance. Historical records are not rewritten and cannot authorize new handoffs.
Factory execution asks for consent interactively. Automation must pass --allow-host-access --allow-unproven-inputs; these flags do not admit failed or incomplete handoffs. Native execution is not a sandbox. Complete validated and finalized execution yields COMPLETE (0), not isolation or certification. Incomplete work remains UNPROVEN (21); rejection 20; halt 22.
Installation and assurance limits
Five native onedir archives include the runtime, LICENSE, NOTICE, release metadata, and the pinned official APM 0.33.0 backend with its complete runtime under libexec/apm. Extract the complete archive; do not move the executable out of its runtime directory.
Git, Copilot CLI, and contract-declared checker tools are external prerequisites. The CI actor is an explicitly hermetic Copilot JSONL protocol fixture, NOT live inference. Complete validated and finalized execution yields COMPLETE (0), not isolation or certification. Incomplete work remains UNPROVEN (21); rejection 20; halt 22.
No trusted publisher signature or Apple notarization is provided. macOS may carry PyInstaller's local ad-hoc signature; it is not publisher identity. Checksums prove byte integrity, not publisher authentication. Do not disable platform security to run these binaries.