Skip to content

Feat/release skill sites - #2

Merged
ouyangyipeng merged 67 commits into
masterfrom
feat/release-skill-sites
Aug 15, 2026
Merged

Feat/release skill sites#2
ouyangyipeng merged 67 commits into
masterfrom
feat/release-skill-sites

Conversation

@ouyangyipeng

Copy link
Copy Markdown
Member

What kind of change does this PR introduce?

Bug fix, feature, docs update, ...

What is the current behavior?

Please link any relevant issues here.

What is the new behavior?

Feel free to include screenshots if it includes visual changes.

Additional context

Add any other context or screenshots.

Root cause: NA
Solution: Add typed protocol objects, Domain credentials, exact-byte
Ed25519 envelopes, bilateral contracts, scoped grants, hash-linked events,
and deterministic idempotent contract reduction.
Risks: The v0.1 framing is provisional and requires versioned migration if
changed after external consumers exist.
Dependency: NA
Links: plan/00-v1-local-loopback-mvp.md
Root cause: NA
Solution: Add durable node state, owner-only key storage, content-addressed
artifacts, synchronized journal replay, deterministic signed discovery, and a
bounded loopback HTTP client.
Risks: Plaintext HTTP remains restricted to loopback and journal replication
is not implemented.
Dependency: 9673e5c
Links: plan/00-v1-local-loopback-mvp.md
Root cause: NA
Solution: Add Contract-authorized Artifact reads, real source metrics,
independent recomputation, dynamic provider routing, and requester-only
Evidence-gated acceptance.
Risks: The workload is read-only and does not prove arbitrary task execution
or sandbox isolation.
Dependency: 6029c1f
Links: plan/00-v1-local-loopback-mvp.md
Root cause: NA
Solution: Add the real model adapter wiring, node CLI, ephemeral Domain
provisioning, four-process loopback harness, local pursuit API, retained audit
state, timing/stat summaries, and graceful process cleanup.
Risks: The automated process test uses a synthetic local completion server;
real model behavior remains a separate manual gate.
Dependency: 2033c0f
Links: plan/00-v1-local-loopback-mvp.md
Root cause: The Walkman OPENAI_BASE_URL alias identifies a complete ModelHub
endpoint, but the first adapter treated it as an OpenAI base path.
Solution: Separate the tested OpenAI and ModelHub wire styles, preserve safe
error categories, pass all automated gates, and record the real-model run.
Post-mortem: Provider semantics must be verified from the owning API style and
reference implementation before endpoint construction.
Risks: Validation remains loopback-only and does not establish TLS,
multi-machine failover, quota, or arbitrary-code sandbox guarantees.
Dependency: e38043b
Links: plan/00-v2-modelhub-adapter-correction.md
Root cause: NA
Solution: Document the approved secure node bootstrap, Agent onboarding,
and bilingual GitHub Pages architecture with explicit acceptance gates.
Risks: The v0.2 design is not implemented or multi-machine verified yet.
Dependency: AgenNet loopback MVP commit fda7a6b.
Links: docs/superpowers/specs/2026-08-14-node-bootstrap-and-pages-design.md
Root cause: NA
Solution: Split the approved design into three dependency-ordered,
test-first implementation plans and clarify private transport rules.
Risks: The plans remain unimplemented and need physical-device validation.
Dependency: Design commit b0eb409.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: NA
Solution: Pin the security stack and introduce an explicit v0.2
kernel boundary with typed migration diagnostics.
Risks: The age crate remains pinned below 1.0.
Dependency: AgenNet v0.1 at fda7a6b.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: NA
Solution: Replace direct Root-to-node trust with a versioned
Root-to-Authority-to-node chain and strict validation.
Risks: Retained v0.1 demo state requires a new run rather than
in-place credential reuse.
Dependency: Bootstrap step 1.
Links: docs/superpowers/specs/
2026-08-14-node-bootstrap-and-pages-design.md
Root cause: Contract verification used the credential's Domain as its own
expected value.
Solution: Require the configured Domain for offers, sealed contracts,
recorders, artifact access, providers, and requester responses.
Risks: This is a source-breaking verification API change for v0.2.
Dependency: Bootstrap step 2.
Links: task-2-report.md
Post-mortem: Add negative trust-boundary tests for expected values.
Root cause: NA
Solution: Validate exact private-overlay listeners and peers before
creating sockets or HTTP requests.
Risks: Overlay interface discovery can differ across OS releases.
Dependency: Bootstrap step 2.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: Non-loopback nodes advertised HTTPS while the runtime still
served plaintext, and Tailscale ownership checks could block forever.
Solution: Fail closed before startup side effects, bound and reap the
direct Tailscale probe, and isolate validation with spawn_blocking.
Risks: Tailscale CLI behavior still varies across supported OS releases.
Dependency: Bootstrap step 3 at 1039cc6.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Gate overlay listeners on real TLS and bound external tools.
Root cause: NA
Solution: Store the Domain Root in a passphrase-encrypted
administrative keystore and generate a scoped internal TLS Authority.
Risks: Losing the Root passphrase prevents administrative recovery.
Dependency: Bootstrap step 3.
Links: docs/superpowers/specs/
2026-08-14-node-bootstrap-and-pages-design.md
Root cause: PKI keys and keystore costs relied on unsafe defaults.
Solution: Zeroize rcgen keys, bound scrypt work, and normalize paths.
Risks: Fixed N=2^17 raises interactive administrative unlock cost.
Post-mortem: Security review exposed secret copies and unbounded inputs.
Dependency: Bootstrap step 4.
Links: docs/superpowers/specs/
2026-08-14-node-bootstrap-and-pages-design.md
Root cause: Fixed-cost writes reused the v1 header and default unlock
rejected persisted v1 keystores emitted with age dynamic factors.
Solution: Emit fixed factor 17 as v2, retain bounded v1 recovery,
and add typed opt-in offline migration policies with real fixtures.
Risks: Extended legacy migration can consume about 512 MiB to 1 GiB;
it is explicit, offline-only, and never used by the default unlock path.
Dependency: age 0.12.1 work-factor enforcement and commit a6ed86a.
Links: task-4-report.md and the node bootstrap design specification.
Post-mortem: Persistent-format semantics require a version bump and a
real prior-version fixture before tightening any reader policy.
Root cause: NA
Solution: Add durable HMAC invitations with expiration, lockout,
reservation, consumption, replay, and idempotency.
Risks: Durability still inherits the host volume's guarantees.
Dependency: Bootstrap step 4.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: Invitation authentication omitted mutable public claims.
Solution: Bind deterministic claim digests locally and at reservation.
Risks: Insecure invitation v1 formats are explicitly rejected.
Dependency: Bootstrap step 5.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Authenticate every trust-routing claim at both edges.
Root cause: NA
Solution: Add fingerprint-pinned enrollment that signs a local CSR and
recovers exact durable issuance results.
Risks: Enrollment requires bounded clock skew and private-overlay reachability.
Dependency: Bootstrap step 5.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: The client borrowed bearer state and copied its serialized
secret into an ordinary request buffer. Trust bindings and CA policy were
also incomplete before invitation reservation.
Solution: Consume handoffs, transfer a zeroizing body owner into Reqwest,
and validate exact Authority, CA, CSR, and canonical DER boundaries.
Risks: Retry callers must reacquire the same secure handoff source.
Dependency: Bootstrap step 6 commit 3c1f92a.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Audit ownership and every secret-bearing allocation before
reviewing cryptographic correctness in isolation.
Root cause: Serde serialized the bearer into a growable ordinary Vec
before the final allocation gained zeroizing ownership.
Solution: Serialize through one fixed-capacity zeroizing writer shared by
HTTP transmission and exact-request digesting.
Risks: Each in-flight enrollment reserves 256 KiB of userspace capacity.
Dependency: Bootstrap step 6 commit a05bf26.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Secret-memory reviews must audit allocation history, not only
the final buffer owner.
Root cause: NA
Solution: Distribute monotonic signed revocation snapshots and fail
closed on stale policy for effectful peer operations.
Risks: Authority downtime pauses work after snapshot freshness ends.
Dependency: Bootstrap step 6 at d1facfa.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: Revocation cache trust was domain-wide. Routing reused
admission-time authorization, and uncertain persistence did not freeze
later mutations.

Solution: Pin one stable publisher, carry verified envelope claims into
private revocation subjects, filter routes at query time, reject stale
timelines, and poison mutation after persistence errors.

Risks: Cache state is now v0.3 and older cache files fail closed.
Publisher issuer or key rollover requires an explicit migration.

Dependency: c336e0d

Links: plan/01-v1-multi-host-node-bootstrap.md Task 7

Post-mortem: Tests cover publisher substitution, post-rename
uncertainty, authorization at use, raw-chain forgery, and proxy bypass
with a real sentinel.
Root cause: NA
Solution: Require Authority-issued mTLS and bind the TLS identity to
every signed envelope issuer.
Risks: TLS rotation must complete before certificate expiration.
Dependency: Bootstrap step 7.
Links: docs/superpowers/specs/
Root cause: Client SAN was not bound to the configured local IP.
Solution: Reject local peer leaves whose sole IP SAN differs from the
network boundary before constructing Reqwest.
Risks: Existing identities issued for a different bind IP must rotate.
Dependency: 866ef58.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Review dual-use certificates in both TLS directions.
Root cause: Peer routers treated missing TLS metadata as loopback, and
certificate and key parsing accepted ambiguous identities.
Solution: Require connection-derived loopback or TLS identity, exact
singleton IP SANs, strict PEM and PKCS8, and bind signed responses to TLS
peers.
Risks: Embedded loopback peer routers must supply Axum ConnectInfo.
Dependency: 866ef58 and
255be5d.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Test missing metadata and multi-valued identity fields at
every transport boundary.
Root cause: PeerClient compared an unverified response issuer with the TLS
peer before validating the credential chain and envelope signature.
Solution: Open each response exactly once, classify cryptographic failures as
InvalidSignedResponse, then bind the verified issuer to the TLS peer.
Risks: Invalid responses with multiple faults now report signature validation
before TLS identity mismatch.
Dependency: e200132.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Never authorize or classify identity from parsed claims before
their enclosing cryptographic object verifies.
Root cause: NA
Solution: Add versioned user configuration and a crash-recoverable
bootstrap phase journal.
Risks: Cross-device atomic rename is rejected.
Dependency: Bootstrap step 8.
Links: plan/01-v1-multi-host-node-bootstrap.md
Root cause: Atomic publication re-resolved a validated parent path,
while runtime journal bounds and replay validation diverged.
Solution: Pin publication and journal I/O to verified descriptors and
enforce symmetric validation and append limits.
Risks: Managed Task 9 parent directories require exact mode 0700.
Dependency: Bootstrap step 9.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Validate and mutate through one pinned filesystem object.
Root cause: Pre-publication early returns bypassed temporary-file
cleanup after the secure fd-relative create.
Solution: Guard each temporary name with parent-fd-relative RAII cleanup
and disarm only after successful publication.
Risks: A process crash can still leave an owner-only temporary inode.
Dependency: Bootstrap step 9 and commit 0196b5f.
Links: plan/01-v1-multi-host-node-bootstrap.md
Post-mortem: Cleanup ownership must begin when a resource is created.
Root cause: NA
Solution: Expose Domain, invitation, and pinned enrollment through one
typed CLI with TTY-only secret entry.
Risks: Headless enrollment requires an interactive operator.
Dependency: Bootstrap step 9.
Links: docs/superpowers/specs/
2026-08-14-node-bootstrap-and-pages-design.md
Root cause: NA
Solution: Add strict evidence tooling, production pursuit, and live
invitation coordination for the physical gate.
Risks: Physical evidence, Linux parity, and private-overlay validation
remain pending.
Dependency: Task 13 at ff8e097
Links: docs/testing/two-device-acceptance.md
Root cause: Path-reopened locks and metadata-only readiness could split
coordination or admit stale evidence.
Solution: Pin and unify invitation locks, probe live runtime identity, and
filter model configuration through an allowlist.
Risks: Physical overlay validation and Linux adoption remain pending.
Dependency: Preflight checkpoint 41a60c6
Links: docs/testing/two-device-acceptance.md
Post-mortem: ROADMAP.md records causes and prevention.
Root cause: Initial invitation replay read without the writer inode
lock, and Device B evidence trusted persisted runtime metadata.

Solution: Lock initial replay and verify both peers through exact
self-mTLS health bound to one public process generation.

Risks: Physical evidence and Linux overlay execution remain pending.

Dependency: d5cbe96

Links: docs/testing/two-device-acceptance.md

Post-mortem: Require framed readers and liveness collectors to join
the exact durable or authenticated coordination boundary.
Root cause: NA
Solution: Define one immutable preview release, WSL2 Agent bootstrap
Skill, and bilingual GPT Sites surface before physical acceptance.
Risks: WSL and physical-device tests may require versioned corrections.
Dependency: AgenNet host preview at 7db2556.
Links: docs/superpowers/specs/
2026-08-15-preview-release-skill-sites-design.md
Root cause: NA
Solution: Split the immutable release, bootstrap Skill, GPT Sites, and
WSL acceptance into independently gated implementation plans.
Risks: Native runner or Sites availability can delay publication.
Dependency: Approved release surfaces design at f7cae6f.
Links: plan/04-v1-preview-release-orchestration.md
Root cause: NA
Solution: Add a strict deterministic four-platform release manifest.
Risks: New targets require a schema-versioned manifest revision.
Dependency: Host preview commit 7db2556.
Links: plan/02-v2-installation-surfaces.md
Root cause: NA
Solution: Define the AgenNet to Agent Society research narrative.
Risks: Long-term institutions remain hypotheses, not current features.
Dependency: AgenNet v0.2 Developer Preview evidence boundary.
Links: docs/vision/agent-society.md
Root cause: NA
Solution: Add deterministic native packaging and a pinned matrix.
Risks: Native runner availability can delay one platform artifact.
Dependency: Release manifest step 1.
Links: packaging/release.md
Root cause: NA
Solution: Render one immutable checksum-verifying user installer.
Risks: Missing guides or Skill assets block the tag publication job.
Dependency: Native archive release step 2.
Links: plan/02-v2-installation-surfaces.md
Root cause: Public copy followed an obsolete CLI sketch.
Solution: Use the compiled doctor output flag and reject the old form.
Risks: NA
Dependency: Release installer step 3.
Links: plan/02-v2-installation-surfaces.md

Post-mortem: Validate every advertised command against compiled CLI help.
Root cause: NA
Solution: Add bilingual human and Agent guides with CLI parity gates.
Risks: Public URLs remain unavailable until the release and site publish.
Dependency: Verified installer step 3.
Links: docs/bootstrap/agent-node-setup.md
Root cause: NA
Solution: Teach Agents the fixed CLI flow and local TTY boundary.
Risks: Agent runtimes vary; fresh WSL2 acceptance remains pending.
Dependency: Canonical Agent guide step 4.
Links: skills/agenet-node-bootstrap/SKILL.md
Root cause: NA
Solution: Gate one consistent candidate across every public surface.
Risks: Physical two-device acceptance remains pending after publish.
Dependency: Release and Skill steps 1-5.
Links: docs/releases/v0.2.0-preview.1.md
Root cause: NA
Solution: Add the bilingual Sites landing page, documentation, particle
field, and generated fixed-release installation content.
Risks: Physical two-device acceptance remains pending; WebGL is optional.
Dependency: v0.2.0-preview.1 release candidate and canonical guides.
Links: plan/03-v2-public-sites.md
Root cause: The minimal Rust profile omitted rustfmt and clippy.
Solution: Install both components and advance the candidate to preview.2.
Risks: The failed preview.1 tag remains public without release assets.
Dependency: v0.2.0-preview.1 failed workflow run 31882587122.
Links: .github/workflows/release.yml
Post-mortem: Clean-runner tool availability now has an explicit CI check.
Root cause: Linux dev_t is already u64 while macOS requires a cast.
Solution: Normalize stat device IDs behind target-specific code.
Risks: NA
Dependency: preview.2 clean-runner workflow 31882809544.
Links: src/runtime/key_store.rs
Post-mortem: Cross-platform release lint now runs before tag creation.
Root cause: Fixed-port host tests and secure-path fixtures relied on macOS-specific isolation.

Solution: Serialize founding runtimes and place successful secure-path fixtures below an owner-safe repository ancestor.

Risks: Test-only path selection changes; production runtime and path policy are unchanged.

Dependency: 41f693e
Links: https://github.com/Nexa-Language/AgenNet/actions/runs/31883037390

Post-mortem: Clean Linux and Apple Silicon runners exposed assumptions that local macOS test evidence did not cover.
Root cause: Founding-host tests still placed runtime metadata below Linux world-writable /tmp.

Solution: Create every successful founding-host fixture beneath the owner-safe repository root.

Risks: Test-only fixture locations change; production security policy remains unchanged.

Dependency: 5a7a06f
Links: https://github.com/Nexa-Language/AgenNet/actions/runs/31883642964

Post-mortem: The first isolation fix covered service fixtures but missed four founding-host fixtures with the same assumption.
Root cause: The production pursuit fixture always provisioned the
macOS user layout while Linux children resolved Linux user paths.
Solution: Resolve fixture paths with the runner platform so parent and
child use the same isolated config and state directories.
Risks: Test-only path selection; production behavior is unchanged.
Dependency: e57b1733ef0784f2e9e268f53b82da9cb910f9ee.
Links: GitHub Actions run 31884022954.
Post-mortem: Real child-process tests must use production platform
layout rather than a host-specific fixture default.
Root cause: The positive identity purge test used the system temp
root, which is world-writable on Linux and correctly rejected by the
production fd-walk policy.
Solution: Create the fixture below the runner-owned repository so the
successful purge case has a trusted ancestor on every platform.
Risks: Test-only fixture placement; production deletion stays strict.
Dependency: 2a17900.
Links: GitHub Actions run 31884390088.
Post-mortem: Positive destructive-state tests must never inherit a
world-writable system temporary ancestor.
Root cause: The overwrite-protection subprocess test always wrote its
existing Root marker to the macOS state directory.
Solution: Place the sentinel in the native macOS or Linux AgenNet state
layout used by the real child process.
Risks: Test-only fixture selection; production state discovery is unchanged.
Dependency: 7f6d8e0.
Links: GitHub Actions run 31884939802.
Post-mortem: Child-process fixtures must use target-native paths for every
artifact, including early fail-closed sentinels.
Root cause: Linux tempfile roots are below world-writable /tmp, which the secure service publisher correctly rejects.

Solution: Create positive systemd fixtures below the runner-owned repository so only the intended manager behavior is exercised.

Risks: Test-only path selection; production service path policy is unchanged.

Dependency: 8debaac

Links: https://github.com/Nexa-Language/AgenNet/actions/runs/31885286143
Root cause: Cross-platform LaunchAgent tests inherited Linux world-writable /tmp and either failed early or passed for the wrong rejection reason.

Solution: Run non-native LaunchAgent fixtures below the runner-owned repository so each test reaches its intended boundary.

Risks: Test-only path selection; production service path policy is unchanged.

Dependency: 763bd2b

Links: https://github.com/Nexa-Language/AgenNet/actions/runs/31885962429
Root cause: Non-archive uploads use each native archive filename as the GitHub artifact name.

Solution: Match the fixed versioned archive names before the existing exact-set validation.

Risks: The prerelease tag must be repointed before publication because the failed tag has no Release.

Dependency: 9aee57c

Links: ROADMAP.md
Root cause: The failed preview.2 publication exposed an artifact-name mismatch after its public tag was already created.

Solution: Advance all fixed release surfaces to preview.3 and retain the older tag instead of rewriting published history.

Risks: Physical two-device and fresh WSL2 Agent acceptance remain pending.

Dependency: aa5059b71

Links: ROADMAP.md
Root cause: The Linux publisher re-executed macOS and ARM archives after native runners had already verified them.

Solution: Keep executable smoke checks on each native runner and make the aggregate verifier structure-only for foreign targets; advance the immutable candidate to preview.4.

Risks: Physical two-device and fresh WSL2 Agent acceptance remain pending.

Dependency: 061c6e67

Links: ROADMAP.md

Post-mortem: The release preflight now includes a complete four-target aggregate simulation before tagging.
Root cause: NA

Solution: Published the immutable four-platform prerelease, bootstrap Skill, bilingual guides, and synchronized GPT Sites documentation.

Risks: Physical two-device and clean WSL2 Agent acceptance remain pending.

Dependency: 088585ef

Links: ROADMAP.md
Copilot AI lite review requested due to automatic review settings August 15, 2026 15:03

Copilot AI 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.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@ouyangyipeng
ouyangyipeng merged commit 9986519 into master Aug 15, 2026
4 of 9 checks passed
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.

2 participants