You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Body rewritten 2026-09-24. The original body was a one-line "spike and decide". It is preserved verbatim in a comment below. The question was decided on 2026-08-11, and that comment is the authority. This body summarises it and records where execution stands.
Decided: fold postguard-dotnet into postguard
The real reason is not tidiness in build.sh. The cryptify merge (#285) removed version drift by giving everything one lockfile, and that guarantee stops at the pg-ffi release boundary. postguard-dotnet consumes a frozen pg-ffi-v* release artifact through a one-line pin. Two lags stack:
pg-core → pg-ffi. A "0.6" requirement means a pg-core patch release rebuilds nothing.
pg-ffi → .NET. Nothing guards the currency of .github/pg-ffi-version.
The gap has widened since the decision (measured 2026-09-24):
then (08-11)
now
pg-core on main
0.6.3
0.6.10
newest pg-ffi tag
pg-ffi-v0.1.3
pg-ffi-v0.1.3 (unchanged)
postguard-dotnet's pin
pg-ffi-v0.1.2
pg-ffi-v0.1.2 (unchanged)
E4A.PostGuard on nuget.org
0.6.0
0.6.0
The decision, part by part (reasons are in the decision comment):
A history-preserving import into pg-dotnet/. The nine closing keywords in its history all target issues that are already closed. Re-run that audit immediately before and after merge (postguard-js#139).
Kill the pin.dotnet pack takes its five platform binaries as artifacts from a build-ffi matrix in the same run. Delete .github/pg-ffi-version and PgFfiVersionTests.cs.
pg-ffi pins pg-core with =, plus a ci_wiring.rs-style test that goes red when the two disagree. release-plz's release PR going red on a one-sided bump is accepted as the loud failure.
One release brain. release-please goes, and E4A.PostGuard's version becomes pg-core's. The cost is accepted: a C#-only fix needs a pg-core release.
A second required context for the .NET lane. REQUIRED_CHECK in ci_wiring.rs and scripts/ruleset-drift.sh generalise from a scalar to a set. It is not aggregated behind Wire compat.
The trusted-publishing cutover has no window. Add a postguard policy scoped to delivery.yml plus a dedicated environment:, publish once, verify on nuget.org, then delete the old policy. Create the policy close to the cutover, because a new policy is only "temporarily active" for 7 days.
Cut a pg-core release deliberately to drive the first publish.
Not started. Import into pg-dotnet/, the .NET CI lane, the artifact fan-in, the = pin and its coupling test, release-please removed. On main today there is no pg-dotnet/, workspace members are [pg-core, pg-cli, pg-pkg, pg-ffi, cryptify], pg-ffi/Cargo.toml has pg-core = { version = "0.6" }, and pg-ffi/build.sh still copies into ../../postguard-dotnet.
Not started. Ruleset gains the .NET context; REQUIRED_CHECK and ruleset-drift.sh become sets.
Steps 2 and 4 need workflow YAML, which dobby-coder cannot push. The work is best split into child tickets per step, each with a dobby-carryable code half and a maintainer-applied YAML half.
Assumption to confirm before step 4
The decision gated step 4 on confirming how consumers pull E4A.PostGuard. One external consumer is now known: Worth-NL/NotifyNL-OMC pins E4A.PostGuard 0.3.0 exactly. That supports the exact-pin premise. It also means a real install base exists, and the package id and nuget.org channel have to survive the move unchanged.
Decided: fold
postguard-dotnetintopostguardThe real reason is not tidiness in
build.sh. The cryptify merge (#285) removed version drift by giving everything one lockfile, and that guarantee stops at the pg-ffi release boundary.postguard-dotnetconsumes a frozenpg-ffi-v*release artifact through a one-line pin. Two lags stack:"0.6"requirement means a pg-core patch release rebuilds nothing..github/pg-ffi-version.The gap has widened since the decision (measured 2026-09-24):
mainpg-ffi-v0.1.3pg-ffi-v0.1.3(unchanged)postguard-dotnet's pinpg-ffi-v0.1.2pg-ffi-v0.1.2(unchanged)E4A.PostGuardon nuget.orgThe decision, part by part (reasons are in the decision comment):
pg-dotnet/. The nine closing keywords in its history all target issues that are already closed. Re-run that audit immediately before and after merge (postguard-js#139).dotnet packtakes its five platform binaries as artifacts from abuild-ffimatrix in the same run. Delete.github/pg-ffi-versionandPgFfiVersionTests.cs.pg-ffipinspg-corewith=, plus aci_wiring.rs-style test that goes red when the two disagree. release-plz's release PR going red on a one-sided bump is accepted as the loud failure.E4A.PostGuard's version becomes pg-core's. The cost is accepted: a C#-only fix needs a pg-core release.REQUIRED_CHECKinci_wiring.rsandscripts/ruleset-drift.shgeneralise from a scalar to a set. It is not aggregated behindWire compat.delivery.ymlplus a dedicatedenvironment:, publish once, verify on nuget.org, then delete the old policy. Create the policy close to the cutover, because a new policy is only "temporarily active" for 7 days.Where execution stands
spike: assert the required-context list itself, not just the workflow wiring (the registry half of #272/#222) #318 merges first. Done 2026-08-11 (ci: assert main's ruleset still requires the gate build.yml produces #333).pg-dotnet/, the .NET CI lane, the artifact fan-in, the=pin and its coupling test, release-please removed. Onmaintoday there is nopg-dotnet/, workspace members are[pg-core, pg-cli, pg-pkg, pg-ffi, cryptify],pg-ffi/Cargo.tomlhaspg-core = { version = "0.6" }, andpg-ffi/build.shstill copies into../../postguard-dotnet.REQUIRED_CHECKandruleset-drift.shbecome sets.postguard-dotnetis task: retire postguard-dotnet — release automation off, banner, transfer #39, archive #342, which is blocked by this ticket.Steps 2 and 4 need workflow YAML, which
dobby-codercannot push. The work is best split into child tickets per step, each with a dobby-carryable code half and a maintainer-applied YAML half.Assumption to confirm before step 4
The decision gated step 4 on confirming how consumers pull
E4A.PostGuard. One external consumer is now known:Worth-NL/NotifyNL-OMCpinsE4A.PostGuard0.3.0 exactly. That supports the exact-pin premise. It also means a real install base exists, and the package id and nuget.org channel have to survive the move unchanged.Part of #247 (workstream F).