diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/accepted-state.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/accepted-state.json new file mode 100644 index 00000000..b254366d --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/accepted-state.json @@ -0,0 +1,34 @@ +{ + "schema_version": 1, + "workflow_version": 2, + "workflow_origin_version": 2, + "id": "accept-windows-refused-connection-wording-in-the-isolation-test", + "slug": "accept-windows-refused-connection-wording-in-the-isolation-test", + "title": "Accept Windows' refused-connection wording in the isolation test", + "description": "Accept Windows' refused-connection wording in the isolation test", + "kind": "bug_fix", + "state": "accepted", + "canonical_applied": true, + "base_commit": "c65af7f55d832475c877fb9032bc89da4bb685f3", + "created_at": 1790441579, + "updated_at": 1790448323, + "affected_specs": [], + "affected_paths": [ + "tests/isolation.rs" + ], + "no_spec_change": true, + "no_spec_change_rationale": "Only tests/isolation.rs changes, and tests/ is outside source_dirs (src, templates). The behavior under test is unchanged: the default TempEnv GitHub base is loopback and the spawned search fails with a refused connection. The test now also recognizes the Windows wording of that refusal, which ureq 3.4 passes through from the OS. specs/github/testing.md already describes the test in wording-neutral terms.", + "acceptance_criteria": [ + "default_temp_env_points_github_at_a_dead_port in tests/isolation.rs passes on Linux, macOS and Windows: it still asserts the default TempEnv GitHub base starts with http://127.0.0.1: and that the spawned templates search fails, and it recognizes the refusal as 'connection refused' (Linux, macOS) or Windows' WSAECONNREFUSED wording ('actively refused' / 'os error 10061'), so a genuine api.github.com failure still does not satisfy it; cargo test --locked is green on ubuntu-latest, macos-latest and windows-latest with both the ureq 3.3.0 lockfile on main and the ureq 3.4.2 lockfile the v1.8.0 release carries" + ], + "selected_artifacts": [ + "context", + "testing", + "tasks" + ], + "dependencies": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } +} diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json new file mode 100644 index 00000000..ef1bff2a --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json @@ -0,0 +1,42 @@ +{ + "approvals": [ + { + "gate": "definition", + "actor": "user:0xLeif", + "timestamp": 1790447727, + "digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "note": "Approved by Leif in the orc session, 2026-09-26: fledge #537", + "approved_scope": { + "schema_version": 1, + "change_id": "accept-windows-refused-connection-wording-in-the-isolation-test", + "title": "Accept Windows' refused-connection wording in the isolation test", + "description": "Accept Windows' refused-connection wording in the isolation test", + "kind": "bug_fix", + "affected_specs": [], + "affected_paths": [ + "tests/isolation.rs" + ], + "no_spec_change": true, + "no_spec_change_rationale": "Only tests/isolation.rs changes, and tests/ is outside source_dirs (src, templates). The behavior under test is unchanged: the default TempEnv GitHub base is loopback and the spawned search fails with a refused connection. The test now also recognizes the Windows wording of that refusal, which ureq 3.4 passes through from the OS. specs/github/testing.md already describes the test in wording-neutral terms.", + "acceptance_criteria": [ + "default_temp_env_points_github_at_a_dead_port in tests/isolation.rs passes on Linux, macOS and Windows: it still asserts the default TempEnv GitHub base starts with http://127.0.0.1: and that the spawned templates search fails, and it recognizes the refusal as 'connection refused' (Linux, macOS) or Windows' WSAECONNREFUSED wording ('actively refused' / 'os error 10061'), so a genuine api.github.com failure still does not satisfy it; cargo test --locked is green on ubuntu-latest, macos-latest and windows-latest with both the ureq 3.3.0 lockfile on main and the ureq 3.4.2 lockfile the v1.8.0 release carries" + ], + "dependencies": [], + "supersedes": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } + }, + "approved_delta_digests": {} + }, + { + "gate": "finalization", + "actor": "specsync:finalization", + "timestamp": 1790448323, + "digest": "bb3ac0fdd2087ebfddedd9515130f152ef1a3195880f0956afaa42e51db241f4", + "note": "Same-PR finalization closing digest" + } + ], + "reopenings": [] +} diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/change.md b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/change.md similarity index 98% rename from .specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/change.md rename to .specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/change.md index 241530b6..ca55e2ca 100644 --- a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/change.md +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/change.md @@ -1,6 +1,6 @@ --- id: accept-windows-refused-connection-wording-in-the-isolation-test -state: draft +state: archived type: bug_fix base_commit: c65af7f55d832475c877fb9032bc89da4bb685f3 --- diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/context.md b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/context.md similarity index 100% rename from .specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/context.md rename to .specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/context.md diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/finalization.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/finalization.json new file mode 100644 index 00000000..d4256612 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/finalization.json @@ -0,0 +1,12 @@ +{ + "schema_version": 2, + "change_id": "accept-windows-refused-connection-wording-in-the-isolation-test", + "implementation_commit": "b17675bb3457b75714b39d3e2cf76207f1a796e9", + "implementation_tree": "14f5f76c2eef89697e0316e57c9b9493b74cdbed", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "closing_digest": "bb3ac0fdd2087ebfddedd9515130f152ef1a3195880f0956afaa42e51db241f4", + "review_digest": "0745b7f9e0211f44d715b1fc117ca94e0da3ac3d0aaed38395cfe245a348a91a", + "finalization_digest": "1511e59e4eabfd4975a912abd52e28aabb2fe4d53c7edd9c064c66e5600d00aa", + "timestamp": 1790448323 +} diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/lesson-bundle.md b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/lesson-bundle.md new file mode 100644 index 00000000..c990de79 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/lesson-bundle.md @@ -0,0 +1,116 @@ +# Lesson bundle — accept-windows-refused-connection-wording-in-the-isolation-test + +Material for folding this change's lessons into the affected specs' `context.md`. +Synthesise from what actually happened below; do not restate the change description. + +## What this change was + +- **Title**: Accept Windows' refused-connection wording in the isolation test +- **Kind**: BugFix +- **Paths**: tests/isolation.rs +- **Acceptance**: default_temp_env_points_github_at_a_dead_port in tests/isolation.rs passes on Linux, macOS and Windows: it still asserts the default TempEnv GitHub base starts with http://127.0.0.1: and that the spawned templates search fails, and it recognizes the refusal as 'connection refused' (Linux, macOS) or Windows' WSAECONNREFUSED wording ('actively refused' / 'os error 10061'), so a genuine api.github.com failure still does not satisfy it; cargo test --locked is green on ubuntu-latest, macos-latest and windows-latest with both the ureq 3.3.0 lockfile on main and the ureq 3.4.2 lockfile the v1.8.0 release carries + +## Evidence + +- Verification commit: `b17675bb3457b75714b39d3e2cf76207f1a796e9` +- Base commit: `c65af7f55d832475c877fb9032bc89da4bb685f3` +- Verified by: `specsync check (no spec in scope)` + +## From the change's context.md + +# Context + +## What led here + +The v1.8.0 release PR (#532) went red on exactly one cell: `test (windows-latest)`, +in `tests/isolation.rs::default_temp_env_points_github_at_a_dead_port`: + +```text +expected a refused local connection, got: error: searching github for template repos: +github api request failed: io: no connection could be made because the target machine +actively refused it. (os error 10061) +``` + +The same test is green on Windows on `main`. The difference is the lockfile: the release +bump moves `ureq` from 3.3.0 to 3.4.2. In 3.3.0, when every resolved address refused, +`ureq`'s TCP connector threw the OS error away and returned a synthesized +`io::Error::new(ConnectionRefused, "Connection refused")`, so every platform printed the +same English words. 3.4 keeps the last per-address error instead (`last_err` in +`unversioned/transport/tcp.rs`), so the message is now the OS's own: + +| Platform | stderr on ureq 3.4.2 | +|---|---| +| Linux | `io: Connection refused (os error 111)` | +| macOS | `io: Connection refused (os error 61)` (observed locally) | +| Windows | `io: No connection could be made because the target machine actively refused it. (os error 10061)` (from the CI log) | + +The test's two alternatives were `connection refused` and `127.0.0.1`. The Windows text +has neither, and `ureq` never puts the address in the message, so the test failed. +Nothing in fledge's behavior changed: the request was refused locally, as intended. + +## Decisions + +**Widen the wording, keep both halves of the proof.** The test exists to rule out a real +request to api.github.com. It does that in two halves, and both are kept unchanged in +strength: the base handed to the child starts with `http://127.0.0.1:`, and the failure is +a refusal. Only the set of words that count as "a refusal" grows, by the two stable parts +of WSAECONNREFUSED's message: `actively refused` and `os error 10061`. A generic +`contains("failed")` stays excluded, because a genuine api.github.com failure satisfies it. + +**Match the message, not the error kind.** The test sees a spawned binary's stderr, not +an `io::Error`, so `ErrorKind::ConnectionRefused` is not observable here. Matching the OS +text is the only option at this boundary. + +**Land on `main` first.** `main` is green today only because it still pins ureq 3.3.0. +Any lockfile refresh, the release's included, brings in 3.4 and the failure. Fixing it +on `main` lets the release PR rebase onto a test that is already correct, instead of +carrying a test change inside a release commit. + +## Out of scope + +- Dropping or skipping the Windows matrix cell. corvid-agent offered it as an + alternative. It would hide the signal instead of fixing a test that is wrong. +- The `127.0.0.1` alternative in the stderr assertion. It predates this change and is + unreachable with ureq, but removing it is a separate tightening. + +## From the change's testing.md + +# Testing + +## Automated + +`tests/isolation.rs::default_temp_env_points_github_at_a_dead_port` is the only test in +scope. It runs in CI's `cargo test --verbose --locked` on `ubuntu-latest`, +`macos-latest` and `windows-latest`. + +## What was verified + +| Check | Result | +|---|---| +| `fledge run test -- --test isolation` on `main`'s lockfile (ureq 3.3.0), macOS | 4 passed | +| Same, on the v1.8.0 release lockfile (ureq 3.4.2), macOS | 4 passed | +| Spawned binary stderr, ureq 3.3.0, macOS | `io: Connection refused` (synthesized by ureq) | +| Spawned binary stderr, ureq 3.4.2, macOS | `io: Connection refused (os error 61)` (the OS's text) | +| Windows stderr, ureq 3.4.2 (#532 CI log) | contains `actively refused` and `os error 10061`, now accepted | +| `test` on all three OSes, #535 (ureq 3.3.0) | green, CI run 36257383427 | +| `test` on all three OSes, ureq 3.4.2 | green, CI run 36257571327 (`workflow_dispatch` probe: `main` + this fix + #532's release commit). The Windows log shows `Compiling ureq v3.4.2` and `default_temp_env_points_github_at_a_dead_port ... ok` | +| `test` on all three OSes, the v1.8.1 release PR #536 (ureq 3.4.2) | green, CI run 36260828952 | + +## Acceptance signals + +- `test (windows-latest)` is green on the rebased release PR, which carries ureq 3.4.2. +- `test (ubuntu-latest)`, `test (macos-latest)` and `test (windows-latest)` stay green on + `main`'s ureq 3.3.0 lockfile. + +## Rejection signals + +- A run that reached api.github.com and failed there must still fail the test. The + loopback assertion on `env.github_api_base()` is unchanged, and no accepted phrase + (`connection refused`, `actively refused`, `os error 10061`) appears in a GitHub HTTP + error or a DNS failure. +- A generic "the command failed" must not be enough. No new alternative matches + `failed` or `error` alone. + +## Where these lessons go + +This change declared no affected specs, so there is no module context to fold into. diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review-attempts.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review-attempts.json new file mode 100644 index 00000000..79323ed6 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review-attempts.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "reviews": [ + { + "schema_version": 2, + "change_id": "accept-windows-refused-connection-wording-in-the-isolation-test", + "reviewer": "user:0xLeif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "b17675bb3457b75714b39d3e2cf76207f1a796e9", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "timestamp": 1790448304 + } + ] +} diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review.json new file mode 100644 index 00000000..d5e1d2dc --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/review.json @@ -0,0 +1,16 @@ +{ + "schema_version": 2, + "change_id": "accept-windows-refused-connection-wording-in-the-isolation-test", + "reviewer": "user:0xLeif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "b17675bb3457b75714b39d3e2cf76207f1a796e9", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "timestamp": 1790448304 +} diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/state.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/state.json similarity index 95% rename from .specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/state.json rename to .specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/state.json index 63e9acfa..33548d2d 100644 --- a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/state.json +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/state.json @@ -7,10 +7,11 @@ "title": "Accept Windows' refused-connection wording in the isolation test", "description": "Accept Windows' refused-connection wording in the isolation test", "kind": "bug_fix", - "state": "draft", + "state": "archived", + "canonical_applied": true, "base_commit": "c65af7f55d832475c877fb9032bc89da4bb685f3", "created_at": 1790441579, - "updated_at": 1790441589, + "updated_at": 1790448360, "affected_specs": [], "affected_paths": [ "tests/isolation.rs" diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md similarity index 56% rename from .specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md rename to .specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md index c2832fef..90b301ca 100644 --- a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/tasks.md @@ -13,5 +13,10 @@ artifact: tasks - [x] Accept `actively refused` / `os error 10061` alongside `connection refused`, keeping the loopback-base assertion and excluding a bare `failed` - [x] Run the isolation tests on both lockfiles locally (macOS) -- [ ] `test (windows-latest)` green on this PR (ureq 3.3.0) -- [ ] `test (windows-latest)` green on the rebased #532 (ureq 3.4.2) +- [x] `test (windows-latest)` green on #535 (ureq 3.3.0), in CI run 36257383427 +- [x] `test (windows-latest)` green with ureq 3.4.2, in CI run 36257571327: a + `workflow_dispatch` probe of `main` + this fix + #532's release commit rebased + onto it +- [x] `test (windows-latest)` green on the release PR itself, in CI run 36260828952. That + PR is #536 (v1.8.1), which replaced the closed #532 because 1.8.0 was already on + crates.io; it carries ureq 3.4.2 on top of this change diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/testing.md b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/testing.md similarity index 78% rename from .specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/testing.md rename to .specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/testing.md index 7d8935bb..54a4079a 100644 --- a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/testing.md +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/testing.md @@ -20,8 +20,9 @@ scope. It runs in CI's `cargo test --verbose --locked` on `ubuntu-latest`, | Spawned binary stderr, ureq 3.3.0, macOS | `io: Connection refused` (synthesized by ureq) | | Spawned binary stderr, ureq 3.4.2, macOS | `io: Connection refused (os error 61)` (the OS's text) | | Windows stderr, ureq 3.4.2 (#532 CI log) | contains `actively refused` and `os error 10061`, now accepted | -| `windows-latest` on this PR | runs with `main`'s ureq 3.3.0, must stay green | -| `windows-latest` on the rebased #532 | runs with ureq 3.4.2, the case this change fixes | +| `test` on all three OSes, #535 (ureq 3.3.0) | green, CI run 36257383427 | +| `test` on all three OSes, ureq 3.4.2 | green, CI run 36257571327 (`workflow_dispatch` probe: `main` + this fix + #532's release commit). The Windows log shows `Compiling ureq v3.4.2` and `default_temp_env_points_github_at_a_dead_port ... ok` | +| `test` on all three OSes, the v1.8.1 release PR #536 (ureq 3.4.2) | green, CI run 36260828952 | ## Acceptance signals diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification-attempts.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification-attempts.json new file mode 100644 index 00000000..90d34aa9 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification-attempts.json @@ -0,0 +1,69 @@ +{ + "schema_version": 1, + "attempts": [ + { + "timestamp": 1790447742, + "commit": "e89b8d02a6d50bfd8c4be59dbeba8ed0b752eedc", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + }, + { + "timestamp": 1790447746, + "commit": "ac986196727276296d1ac6dd2550800b0da64759", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + }, + { + "timestamp": 1790447746, + "commit": "b17675bb3457b75714b39d3e2cf76207f1a796e9", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "acceptance_input_digest": "7ec19b5b4b21ece765d089a32be26cb8f7f527b53e8435fcdfc36b8904e12568", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": "tests/isolation.rs", + "kind": "file", + "mode": 33188, + "payload_digest": "df7a1ed803764c0869a3ff45305058a370499a585f227ca8da20261a32df63cd", + "entry_digest": "e9ec7c57075f465c0e41585798e9a6ccf7ed4cb527e3306cf1bb32ab432959d9", + "owners": [ + "@exact:test" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + } + ] +} diff --git a/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification.json b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification.json new file mode 100644 index 00000000..6d289fbb --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-accept-windows-refused-connection-wording-in-the-isolation-test/verification.json @@ -0,0 +1,32 @@ +{ + "timestamp": 1790447746, + "commit": "b17675bb3457b75714b39d3e2cf76207f1a796e9", + "contract_digest": "4d3c64c5dd4d951b2b09fbd0e6463bc55c0d33f14a4eb7aca98775cfcf6d3694", + "execution_digest": "8b8bac8ff77bc766d787bdf5cee8255bd499a4d1f59a24e82a618232c5d4c588", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "acceptance_input_digest": "7ec19b5b4b21ece765d089a32be26cb8f7f527b53e8435fcdfc36b8904e12568", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": "tests/isolation.rs", + "kind": "file", + "mode": 33188, + "payload_digest": "df7a1ed803764c0869a3ff45305058a370499a585f227ca8da20261a32df63cd", + "entry_digest": "e9ec7c57075f465c0e41585798e9a6ccf7ed4cb527e3306cf1bb32ab432959d9", + "owners": [ + "@exact:test" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] +} diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/accepted-state.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/accepted-state.json new file mode 100644 index 00000000..a81d07a1 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/accepted-state.json @@ -0,0 +1,35 @@ +{ + "schema_version": 1, + "workflow_version": 2, + "workflow_origin_version": 2, + "id": "publish-to-crates-io-from-the-release-workflow-and-verify-the-registry", + "slug": "publish-to-crates-io-from-the-release-workflow-and-verify-the-registry", + "title": "Publish to crates.io from the release workflow and verify the registry", + "description": "Publish to crates.io from the release workflow and verify the registry", + "kind": "bug_fix", + "state": "accepted", + "canonical_applied": true, + "base_commit": "31d5f45f7bca1b71e374e41792fabeb6359a9de4", + "created_at": 1789780671, + "updated_at": 1790449857, + "affected_specs": [], + "affected_paths": [ + ".github/workflows/release.yml", + "AGENTS.md" + ], + "no_spec_change": true, + "no_spec_change_rationale": "release.yml and AGENTS.md are outside source_dirs (src, templates); no canonical spec covers CI workflows or agent docs", + "acceptance_criteria": [ + "release.yml carries a publish job that runs cargo publish on a v* tag after the release job, fails loudly with an actionable message when CARGO_REGISTRY_TOKEN is absent rather than skipping, and then reads https://crates.io/api/v1/crates/fledge back and compares max_version to the tag, retrying while the index catches up; AGENTS.md documents both the job and the read-the-registry-back rule; the workflow remains valid YAML with jobs test, build, release, publish" + ], + "selected_artifacts": [ + "context", + "testing", + "tasks" + ], + "dependencies": [], + "answers": { + "architecture_risk": "no", + "public_contract": "no" + } +} diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json similarity index 86% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json index 14054918..c922c509 100644 --- a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/approvals.json @@ -30,6 +30,13 @@ } }, "approved_delta_digests": {} + }, + { + "gate": "finalization", + "actor": "specsync:finalization", + "timestamp": 1790449857, + "digest": "25ad785c5717e7a79fe35f374958c563783e3c3cc01783c2d21ee0a08d034fd4", + "note": "Same-PR finalization closing digest" } ], "reopenings": [] diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md similarity index 98% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md index cc5dbe6d..539562b9 100644 --- a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/change.md @@ -1,6 +1,6 @@ --- id: publish-to-crates-io-from-the-release-workflow-and-verify-the-registry -state: implementing +state: archived type: bug_fix base_commit: 31d5f45f7bca1b71e374e41792fabeb6359a9de4 --- diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/context.md b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/context.md similarity index 100% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/context.md rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/context.md diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/finalization.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/finalization.json new file mode 100644 index 00000000..1102ab66 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/finalization.json @@ -0,0 +1,12 @@ +{ + "schema_version": 2, + "change_id": "publish-to-crates-io-from-the-release-workflow-and-verify-the-registry", + "implementation_commit": "bf374c9c51030ef51e8314a8d7cb2e02e34bff75", + "implementation_tree": "82b00270d1ecb9e5baaa42f15eca0bf588304e39", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "closing_digest": "25ad785c5717e7a79fe35f374958c563783e3c3cc01783c2d21ee0a08d034fd4", + "review_digest": "9ae792c24e407681d53c1e678bdc949f107e16deb078525375b805919b55ca8e", + "finalization_digest": "4ba2d4012f94f396a60034ff83d90c86a03dbc935ad870a8443cc5eb108756c9", + "timestamp": 1790449857 +} diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/lesson-bundle.md b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/lesson-bundle.md new file mode 100644 index 00000000..d8c7ebc0 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/lesson-bundle.md @@ -0,0 +1,102 @@ +# Lesson bundle — publish-to-crates-io-from-the-release-workflow-and-verify-the-registry + +Material for folding this change's lessons into the affected specs' `context.md`. +Synthesise from what actually happened below; do not restate the change description. + +## What this change was + +- **Title**: Publish to crates.io from the release workflow and verify the registry +- **Kind**: BugFix +- **Paths**: .github/workflows/release.yml, AGENTS.md +- **Acceptance**: release.yml carries a publish job that runs cargo publish on a v* tag after the release job, fails loudly with an actionable message when CARGO_REGISTRY_TOKEN is absent rather than skipping, and then reads https://crates.io/api/v1/crates/fledge back and compares max_version to the tag, retrying while the index catches up; AGENTS.md documents both the job and the read-the-registry-back rule; the workflow remains valid YAML with jobs test, build, release, publish + +## Evidence + +- Verification commit: `bf374c9c51030ef51e8314a8d7cb2e02e34bff75` +- Base commit: `31d5f45f7bca1b71e374e41792fabeb6359a9de4` +- Verified by: `specsync check (no spec in scope)` + +## From the change's context.md + +# Context + +## What led here + +crates.io has fledge at **1.7.0**, but **v1.7.1 and v1.7.2 are both tagged** on GitHub. +Two releases were cut and never shipped, and nobody noticed. + +The cause is not a failure. `release.yml` ran for both tags and **succeeded** — its runs +are green in the Actions history. It has three jobs: `test`, `build`, `release`. None of +them publishes. `grep -rn "cargo publish" .github/workflows/` returns nothing, and +publishing was documented nowhere: not in `AGENTS.md`, not in `CONTRIBUTING.md`, not in +`docs/`. + +So publishing was a manual step that existed only in somebody's head, and the workflow +went green while the release was half-done. That is the worst shape a release process can +have: the signal you would check says everything is fine. + +## Decisions + +**Automate rather than document-only.** A documented manual step is the thing that +already failed twice. The job runs on the same `v*` tag push as the rest of the release. + +**Fail loudly when the token is missing, do not skip.** The repository currently has no +secrets at all, so `CARGO_REGISTRY_TOKEN` must be created before the next release. Until +then this job fails, and the release shows red. That is deliberate and it is the whole +point: a release that did not publish is not a finished release, and a skipped step is +indistinguishable from a passing one — which is precisely how 1.7.1 and 1.7.2 slipped by. + +**Read the registry back.** `cargo publish` exiting 0 does not prove the crate is live: +the index takes a moment to update, and some no-op paths also exit 0. The job polls +`https://crates.io/api/v1/crates/fledge` and compares `max_version` against the tag, +retrying up to six times. CorvidLabs/hi hit this exact failure at 0.2.4/0.2.5 and its +own guidance now carries the same rule. + +## Open ends + +- **The secret does not exist yet.** `gh secret list` is empty. Someone with repo admin + must add `CARGO_REGISTRY_TOKEN` or the next tag will fail at this job. +- **1.7.1 and 1.7.2 remain unpublished.** This change stops the bleeding; it does not + backfill. Publishing them retroactively is a separate decision — the versions are + tagged, so they can be published from those tags if wanted, or skipped in favour of + 1.8.0. + +## From the change's testing.md + +# Testing + +## What was verified + +| Check | Result | +|---|---| +| `release.yml` parses as YAML | passes; jobs are `test`, `build`, `release`, `publish` | +| `publish.needs` | `[release]` — publishes only after the GitHub release exists | +| Trigger unchanged | still `on: push: tags: v*`; no new trigger surface | +| No publish step existed before | `grep -rn "cargo publish" .github/workflows/` returned nothing | +| The gap is real | crates.io `max_version` = 1.7.0 while `v1.7.1` and `v1.7.2` are tagged | +| Prior runs did not fail | the Release workflow is green for both tags in the Actions history | + +## What cannot be verified here + +The job itself cannot run until a `v*` tag is pushed **and** `CARGO_REGISTRY_TOKEN` +exists. Both halves are untestable in a PR: + +- Without the secret, the first release after this merges will fail at the publish job + with the actionable message. That is the designed behaviour, not a regression — but it + does mean the first real exercise of this code is a release. +- The registry read-back loop is only exercised on a genuine publish. + +This is an honest limitation. The mitigation is that the failure mode is loud and its +message names the exact fix, rather than silent. + +## Rejection signals + +- A tagged release whose workflow is green while crates.io still reports the previous + version — the original bug, and what this job exists to make impossible. +- The publish job skipping (rather than failing) when the token is absent. +- `cargo publish` succeeding and the job passing without the registry confirming the new + version. + +## Where these lessons go + +This change declared no affected specs, so there is no module context to fold into. diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review-attempts.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review-attempts.json new file mode 100644 index 00000000..46ab449a --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review-attempts.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "reviews": [ + { + "schema_version": 2, + "change_id": "publish-to-crates-io-from-the-release-workflow-and-verify-the-registry", + "reviewer": "user:0xLeif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "bf374c9c51030ef51e8314a8d7cb2e02e34bff75", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "timestamp": 1790449838 + } + ] +} diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review.json new file mode 100644 index 00000000..258bf88a --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/review.json @@ -0,0 +1,16 @@ +{ + "schema_version": 2, + "change_id": "publish-to-crates-io-from-the-release-workflow-and-verify-the-registry", + "reviewer": "user:0xLeif", + "provenance": { + "schema_version": 1, + "provider": "github_actions_check", + "required_check": "SpecSync scoped review" + }, + "verdict": "pass", + "implementation_commit": "bf374c9c51030ef51e8314a8d7cb2e02e34bff75", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "timestamp": 1790449838 +} diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json similarity index 96% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json index ef9b0c93..8482fa52 100644 --- a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/state.json @@ -7,11 +7,11 @@ "title": "Publish to crates.io from the release workflow and verify the registry", "description": "Publish to crates.io from the release workflow and verify the registry", "kind": "bug_fix", - "state": "verifying", + "state": "archived", "canonical_applied": true, "base_commit": "31d5f45f7bca1b71e374e41792fabeb6359a9de4", "created_at": 1789780671, - "updated_at": 1789781199, + "updated_at": 1790449894, "affected_specs": [], "affected_paths": [ ".github/workflows/release.yml", diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/tasks.md b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/tasks.md similarity index 100% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/tasks.md rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/tasks.md diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/testing.md b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/testing.md similarity index 100% rename from .specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/testing.md rename to .specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/testing.md diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json new file mode 100644 index 00000000..8d311461 --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json @@ -0,0 +1,95 @@ +{ + "schema_version": 1, + "attempts": [ + { + "timestamp": 1789781198, + "commit": "63ccfc1006a537ee683f7e927e38be898e2c0091", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "8a2478d8b7da9dbe7eea5a01f27de930641df0dd7de61d7030fc40d44c1f0c55", + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + }, + { + "timestamp": 1790449218, + "commit": "e9665ba8e1efcc90446d6f5c1df3aedf5aa0eb08", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + }, + { + "timestamp": 1790449222, + "commit": "c2342d2e1afe1675d5581d295e2e3978425ccbfc", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + }, + { + "timestamp": 1790449222, + "commit": "bf374c9c51030ef51e8314a8d7cb2e02e34bff75", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "acceptance_input_digest": "2c3196f7545a0c875155f807d24d45ca9ad940c415022450d14c0440c564aef1", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": ".github/workflows/release.yml", + "kind": "file", + "mode": 33188, + "payload_digest": "9f3564247c3aec419a3884263f729cfd5cd73d4135bebe57eb2cdb784a644b03", + "entry_digest": "bb21e8c4bfa4362faa6aa1b7f689bd497724d12369c276bafa4a11f01744aa42", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "AGENTS.md", + "kind": "file", + "mode": 33188, + "payload_digest": "014df3ebe085decf73eaacce7f5150c0941f5e12a112cbb51308a173ca53cc62", + "entry_digest": "f9517ae80dd7df5610a032dcb5c985220dbfa24be785ef05e7b1ffd1295a52bc", + "owners": [ + "@exact:delivery" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] + } + ] +} diff --git a/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json new file mode 100644 index 00000000..3daf76fd --- /dev/null +++ b/.specsync/archive/changes/2026-09-26-publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json @@ -0,0 +1,42 @@ +{ + "timestamp": 1790449222, + "commit": "bf374c9c51030ef51e8314a8d7cb2e02e34bff75", + "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", + "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", + "workspace_digest": "aef38b6e4b761db015e6da5bbf7076e60db99d898b196639b976dbcba896e5a7", + "acceptance_input_digest": "2c3196f7545a0c875155f807d24d45ca9ad940c415022450d14c0440c564aef1", + "acceptance_manifest": { + "schema_version": 1, + "entries": [ + { + "path": ".github/workflows/release.yml", + "kind": "file", + "mode": 33188, + "payload_digest": "9f3564247c3aec419a3884263f729cfd5cd73d4135bebe57eb2cdb784a644b03", + "entry_digest": "bb21e8c4bfa4362faa6aa1b7f689bd497724d12369c276bafa4a11f01744aa42", + "owners": [ + "@exact:delivery" + ] + }, + { + "path": "AGENTS.md", + "kind": "file", + "mode": 33188, + "payload_digest": "014df3ebe085decf73eaacce7f5150c0941f5e12a112cbb51308a173ca53cc62", + "entry_digest": "f9517ae80dd7df5610a032dcb5c985220dbfa24be785ef05e7b1ffd1295a52bc", + "owners": [ + "@exact:delivery" + ] + } + ] + }, + "passed": true, + "commands": [ + { + "command": "specsync check (no spec in scope)", + "success": true, + "exit_code": 0 + } + ], + "requirement_ids": [] +} diff --git a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json b/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json deleted file mode 100644 index 87b9bafb..00000000 --- a/.specsync/changes/accept-windows-refused-connection-wording-in-the-isolation-test/approvals.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "approvals": [], - "reopenings": [] -} diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json b/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json deleted file mode 100644 index c0acdd4f..00000000 --- a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification-attempts.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "schema_version": 1, - "attempts": [ - { - "timestamp": 1789781198, - "commit": "63ccfc1006a537ee683f7e927e38be898e2c0091", - "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", - "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", - "workspace_digest": "8a2478d8b7da9dbe7eea5a01f27de930641df0dd7de61d7030fc40d44c1f0c55", - "passed": true, - "commands": [ - { - "command": "specsync check (no spec in scope)", - "success": true, - "exit_code": 0 - } - ], - "requirement_ids": [] - } - ] -} diff --git a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json b/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json deleted file mode 100644 index 17c6d506..00000000 --- a/.specsync/changes/publish-to-crates-io-from-the-release-workflow-and-verify-the-registry/verification.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "timestamp": 1789781198, - "commit": "63ccfc1006a537ee683f7e927e38be898e2c0091", - "contract_digest": "027e4f3c88ddcd03f9f107dd9a570e91ea7b5647d0d165a366659f208a3729e5", - "execution_digest": "ff5c2a9543a08ce537f0bd52fc6fd44bb264233502c561befcff875ed84c4aeb", - "workspace_digest": "8a2478d8b7da9dbe7eea5a01f27de930641df0dd7de61d7030fc40d44c1f0c55", - "passed": true, - "commands": [ - { - "command": "specsync check (no spec in scope)", - "success": true, - "exit_code": 0 - } - ], - "requirement_ids": [] -}