Feat/release skill sites - #2
Merged
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.