diff --git a/.agents/skills/check-board/SKILL.md b/.agents/skills/check-board/SKILL.md index f97ea1f76..0efefc998 100644 --- a/.agents/skills/check-board/SKILL.md +++ b/.agents/skills/check-board/SKILL.md @@ -1,6 +1,6 @@ --- name: check-board -description: Use when the FS-GG Coordination board looks stale, blockers may have cleared, or planning needs ground truth. Reconcile project fields against live issues and surface judgement calls. +description: Inspect the explicitly selected FS-GG board against native evidence; explain stale planning, blockers and Unknowns without repairing fields or granting dispatch. --- # check-board (FS-GG) @@ -48,42 +48,21 @@ fsgg-coord-engine board-v2 inspect --binding-file product-binding.json --report- Inspection remains read-only and grants no writes, selection or operation authority. Local-only workspaces retain their existing route. This organization preparation changes no product source or acceptance. -### Independently qualified legacy-product reconciliation - -The legacy recipes below apply only to a separately qualified legacy-product target and lifecycle. -Before any product command, verify the actual product target/binding and configured product repository; -a repository filter alone does not select a board. Refuse missing or organization-default target facts. -No historical organization live opt-in exists. These recipes cannot repair unavailable V2 evidence or -select Project 1, including when a caller requests a historical organization scope. - -For that verified product target, replace `` with its actual repository: - -```bash -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -`reconcile` is fresh and dry-run unless `--apply` is present. Review its typed mechanical findings and -the product's existing write authority before the scoped apply; this skill grants no new effect: - -```bash -scripts/fsgg-coord reconcile --repo --apply -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -A repair is applied only after its fresh post-mutation scan observes the intended fields. Failed or -stale readback remains failed, never clean. Exit75 retains the reported backoff. Queued writes are not -landed: queue-wide replay has no repository filter and needs its separately admitted original-effect -recovery route and genuine target readback. No replay command is authorized by this check-board pass. -The [offline receipt examples](references/mechanical-reconciliation.md#executable-receipt-examples) -retain their independently qualified meaning and perform no live writes. - -`lint` findings are report-only. Investigate unknown blockers, undeclared paths, unclaimed work and -outcome/child disagreements without rewriting issues, inventing dependencies or closing work. Report -product-scoped mechanical results, queued/failed writes, judgement findings and the final fresh result. -Use [mechanical reconciliation](references/mechanical-reconciliation.md) and -[judgement findings](references/judgement-findings.md) within that product boundary. +### Repair and historical product evidence + +Inspection is read-only. Before any product command, verify the actual product target/binding and configured product repository; +Refuse missing or organization-default target facts. No historical organization live opt-in exists. +A repair needs its own current effect authority, qualified caller and independent readback; +this entrypoint supplies none. Failed reads retain Unknown rather than selecting an older route. + +Historical product reconciliation and the offline receipt examples are retained in +[mechanical reconciliation](references/mechanical-reconciliation.md) and +[deep detail](references/deep-detail.md). They are evidence, not a live invocation recipe. +In particular, queue-wide replay has no repository filter and requires genuine original-effect +custody and separately admitted recovery. Do not replay a queue from an inspection pass. +Use [judgement findings](references/judgement-findings.md) to explain discrepancies without +rewriting issues, inventing dependencies or choosing Status. Current canonical work-board +owns selection and guarded planning; future controller conversion remains separate. ## Historical organization examples are data only diff --git a/.agents/skills/check-board/agents/openai.yaml b/.agents/skills/check-board/agents/openai.yaml index e115089a8..d939ebec1 100644 --- a/.agents/skills/check-board/agents/openai.yaml +++ b/.agents/skills/check-board/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "Check Board" - short_description: "Reconcile board state with live GitHub issues" - default_prompt: "Use $check-board to reconcile the FS-GG Coordination board against live issue state." + short_description: "Inspect board evidence without writes" + default_prompt: "Use $check-board to inspect the explicitly selected FS-GG board, explain planning discrepancies and retain Unknowns without repairs or dispatch." diff --git a/.agents/skills/check-board/references/deep-detail.md b/.agents/skills/check-board/references/deep-detail.md index f8dc7767b..a0536c470 100644 --- a/.agents/skills/check-board/references/deep-detail.md +++ b/.agents/skills/check-board/references/deep-detail.md @@ -1,4 +1,9 @@ + +Historical/compatibility evidence only. The current [check-board entrypoint](../SKILL.md) +is read-only and grants no repair, claim, queue replay or field-write authority. +Any genuine product repair/recovery requires its own actual qualified caller, target, +original custody and separately admitted operation. Archived commands are not a live fallback. # check-board (FS-GG) ## Historical and separately scoped mechanics diff --git a/.agents/skills/check-board/references/mechanical-reconciliation.md b/.agents/skills/check-board/references/mechanical-reconciliation.md index a538e5452..2081deff4 100644 --- a/.agents/skills/check-board/references/mechanical-reconciliation.md +++ b/.agents/skills/check-board/references/mechanical-reconciliation.md @@ -1,5 +1,10 @@ # Mechanical reconciliation +Historical/compatibility evidence only. The current [check-board entrypoint](../SKILL.md) +is read-only and grants no repair, claim, queue replay or field-write authority. +Any genuine product repair/recovery requires its own actual qualified caller, target, +original custody and separately admitted operation. Archived commands are not a live fallback. + ## Organization scope is read-only For prepared .9/.11 organization consumers use only diff --git a/.agents/skills/continue-from-handoff/SKILL.md b/.agents/skills/continue-from-handoff/SKILL.md index 9693de8b0..b0cd40189 100644 --- a/.agents/skills/continue-from-handoff/SKILL.md +++ b/.agents/skills/continue-from-handoff/SKILL.md @@ -69,14 +69,15 @@ from worker reports and proposals. Missing temporary evidence remains unknown; do not reconstruct results or repeat a consumed operation to fill that gap. Apply the selected [forward-recovery boundary](../work-board/references/lifecycle-contract.md#recover-ownership-and-unavailable-history): the unavailable historical evidence-search task is closed as unavailable; stop repeated searches and -requests. Preserve all known original records, 439 inherited reservations, 46 later original records -and unproved outcomes Unknown, without release or replay. For a genuinely fresh operation, reconcile +requests. Preserve all known original records and unproved outcomes Unknown, without release or replay. +Retrieve the actual reservation identities and scope from their existing owning records; +this generic entrypoint maintains no incident count or cohort ledger. For a genuinely fresh operation, reconcile current relevant ownership and remaining capacity, separate generation/writable state/identity/outputs, and fence shared destinations against old-actor interference. Missing history is not empty coverage; unresolved relevant interference still blocks its operation. Unrelated unavailable history does not globally block demonstrated-independent work, and a new ID cannot disguise an uncertain-effect retry. -Use existing journals/custody, not another recovery ledger. SC2's existing-host container scope does -not change the separate V3 two-machine portability requirement. +Use existing journals/custody, not another recovery ledger. Product-specific host or portability +obligations remain in their actual owning plans rather than this generic recovery entrypoint. Also recover each pending request's canonical channel and original message identity, owner, expected response, response/escalation @@ -98,16 +99,12 @@ It owns model routing, lanes, telemetry, PR admission, native checks, source int separate publication/receiver acceptance boundaries. Do not restore duplicate status or closure upkeep. Do not duplicate its lifecycle here. -Invocation authorizes autonomous decisions and completion of the recovered -Unified Roadmap v3 and the in-scope games outcomes without human intervention, including its necessary source -changes, PRs, merges, releases, and receiver work within the recorded programme -scope. Choose implementation details and resolve routine tradeoffs directly; -do not stop for preference questions or repeated confirmation. This does not -create missing credentials, bypass protected checks, renew expired grants, or -replace effect-specific admission. Inspect and obtain valid machine admission -through the existing route before each concrete effect. Where access or an -external dependency genuinely prevents an effect, preserve the blocker and -continue independent ready work; never claim unavailable human feedback. +Resume only the user's actually authorized recovered scope. Reading or editing this +entrypoint grants no blanket programme, games, release or receiver authority. Existing +authorization may permit autonomous completion, but it creates no missing credentials, +protected approval, runtime capability or renewed original clock. Resolve actual current +owner, plan and operation admission through work-board before the affected effect. +Preserve blocked external feedback and continue demonstrated-independent authorized work. Seek dependency-ready parallel opportunities aggressively within available worker, CPU, integrator and hosted-CI capacity. Repair and integrate the existing diff --git a/.agents/skills/cut-nuget-release/SKILL.md b/.agents/skills/cut-nuget-release/SKILL.md index c13a01cf4..d9a86fab9 100644 --- a/.agents/skills/cut-nuget-release/SKILL.md +++ b/.agents/skills/cut-nuget-release/SKILL.md @@ -1,87 +1,35 @@ --- name: cut-nuget-release -description: Use when asked to release every stale FS-GG NuGet producer. Audit packed inputs, prepare each coherent set once, publish exact manifest-bound bytes to both feeds, promote, smoke, and reconcile consumer pins. +description: Explicitly select the maintained FS-GG publishing contract for an owed NuGet release; preserve candidate identity, separate effect admission and selected consumer acceptance. --- -# cut-nuget-release (FS-GG) +# Selected NuGet release entrypoint -Read [publishing-and-deployment](../publishing-and-deployment/SKILL.md) before acting. It owns versioning, -feed, coherent-set, and registry rules. This skill applies those rules through the repository's current -pack-once release saga. +Read [publishing-and-deployment](../publishing-and-deployment/SKILL.md) before acting. +It owns the current release route, coherent-set versioning, candidate/preflight, +feed verification, promotion and selected consumer adoption. This compatibility +name supplies no additional release, retry or recovery authority. -## Invariants +Resolve the actual producer, changed package inputs, promoted predecessor and genuinely +owed release. Source delivery, candidate qualification, publication and installed +adoption remain separate. Do not release every producer merely because this entrypoint +was invoked; preserve existing publication owners and exact selected operation scope. -- Release only merged, exact-`main` bytes. -- Never repack in a package publisher. `release-saga-prepare.yml` is the sole pack site. -- Never reuse a version, move a release tag, overwrite an asset, or bypass OIDC/trusted publishing. -- The prepared `release-manifest.json` binds every package byte, package id/version, and source SHA. -- Package publishers download those exact assets, initialize their durable journals, and resume - idempotently after a failure. -- Promote only after every package journal is complete and both feeds expose the complete coherent set - with payload identity. -- Publish first; update canonical registry pins only after both feeds are observed. +For the hub coherent set, use the selected successor operating window in +[utel-release-successor](../../../docs/roadmaps/utel-release-successor.md). +Require its immutable candidate/run/artifact/raw archive and successful `publish=false` +preflight before a separately admitted publication. Preserve the original bytes, +journal and independent readbacks; a consumed publication or unresolved send never +becomes a new operation by changing an identifier or rerunning a workflow. -## 1. Establish what is owed +Historical release-saga prepare, component-publisher and promote routes remain sealed +under GS2-08.9. This skill provides no executable legacy recipe or fallback. Missing +current authority, tooling or feed evidence leaves the affected operation incomplete. -Fetch `main` and tags in every rostered producer without disturbing local changes. Compare each current -pack input—including staged skills, templates, targets, generated manifests, and runtime sources—with -the latest successfully published tag. Classify each producer as current, release owed, or blocked. -Derive dependency order from package references, registry contracts, consumer pins, and dispatch edges. +Use scoped normal PR delivery for source changes. The global managed `speckit-merge` +recipe is excluded from FS-GG landing: no branch sweep, direct trunk push/deletion, +mandatory repack or shared-cache purge. Retain canonical publication and consumer +owners; do not patch a vendored global skill to repair repository routing. -For the hub coherent set, FS.GG.Coord.Cli, FS.GG.Kit, and FS.GG.Drivers always receive one fresh version. -Choose the smallest valid SemVer bump under current policy; never infer currency from a project version -or registry row alone. - -## 2. Prepare once - -Land version, lockfile, release-note, package-input, and manifest changes through a normal reviewed PR. -On exact merged `main`, dispatch `.github/workflows/release-saga-prepare.yml` with the fresh version -and source SHA. Require its Core/CLI/package gates to pass and inspect the draft -`coherent-set/v` release: - -- exactly the expected packages were packed once; -- `release-manifest.json` binds their sizes and SHA-256 digests to the exact merged source SHA; -- the draft contains no reused or overwritten assets; -- all three coherent tags will resolve to that same source SHA. - -A preparation run is the reversible rehearsal boundary. Package-publisher workflows have no dry-run or -local-pack mode. - -## 3. Publish and resume - -Create/push the coherent tags in the ordering required by the saga, or use the sanctioned recovery -dispatch with the exact prepared source SHA. Each of `release-coord-engine.yml`, -`release-kit.yml`, and `release-drivers.yml` must: - -1. download the prepared manifest and package bytes; -2. run `scripts/release-saga-ci.sh init` for its package and exact source SHA; -3. publish the prepared package to GitHub Packages; -4. record the GitHub observation in its immutable package journal; -5. authenticate to nuget.org through OIDC trusted publishing; -6. publish the same prepared payload and record the public observation. - -On failure, repair the cause and rerun the same publisher against the same manifest. The journal must -make completed steps idempotent and reject identity, source, version, or byte drift. - -## 4. Promote and verify - -Dispatch `.github/workflows/release-saga-promote.yml` only after all three journals exist. Require it to -verify the manifest, source SHA, coherent tags, complete journals, both feeds, and monotonic channel -ordering before promotion. Then: - -- download each package from both feeds and compare payload entries, excluding nuget.org's - `.signature.p7s`; -- install the public coord engine in a clean tool home and run command-contract plus safe live reads; -- materialize Kit/Drivers in a clean consumer and verify expected files, modes, digests, and versions; -- update consumer pins and `registry/dependencies.yml` through the sanctioned generated projections; -- merge the registry/pin PR, fetch exact `main`, and rerun feed, source, pin, and coherent-set checks. - -## Definition of done - -Done means the complete expected set is available from both feeds, payload-identical, promoted, adopted, -and pinned on merged `main`; all package/tag/source identities agree; fresh-consumer smoke passes; and -no stale bot PR/branch remains. A tag, one green publisher, one feed, or an updated registry alone is -not completion. - -Report exact version, source SHA, PRs, tags, workflow runs, journals, feed observations, promotion, -consumer smoke, and merged registry/pin evidence. If any part remains, report the release as incomplete. +Report the actual selected source/candidate, operation result and remaining acceptance. +A package, tag, registry digest or green source PR alone does not complete adoption. diff --git a/.agents/skills/cut-nuget-release/agents/openai.yaml b/.agents/skills/cut-nuget-release/agents/openai.yaml index 5f1daa07b..adad584e7 100644 --- a/.agents/skills/cut-nuget-release/agents/openai.yaml +++ b/.agents/skills/cut-nuget-release/agents/openai.yaml @@ -1,7 +1,7 @@ interface: display_name: "Cut NuGet Release" - short_description: "Release every stale FS-GG NuGet producer" - default_prompt: "Use $cut-nuget-release to audit and publish every stale FS-GG NuGet producer in dependency order." + short_description: "Select the maintained release contract" + default_prompt: "Use $cut-nuget-release to resolve the owed producer release through canonical publishing-and-deployment, preserving original bytes and separate effect admission." policy: allow_implicit_invocation: false diff --git a/.agents/skills/padd-item/SKILL.md b/.agents/skills/padd-item/SKILL.md index 50ab0cbd4..43c4a886d 100644 --- a/.agents/skills/padd-item/SKILL.md +++ b/.agents/skills/padd-item/SKILL.md @@ -1,6 +1,6 @@ --- name: padd-item -description: Add or reuse a request for the explicitly configured product through canonical intake; preserve qualified legacy-product compatibility. +description: Add or reuse a request for the explicitly configured product through canonical native intake; preserve exact scope and keep retired legacy recipes non-executable. --- # Configured product intake @@ -15,6 +15,7 @@ Reuse an existing semantic match. If another repository owns the request, use For selected V2 product scope, do not run legacy intake/reconcile/apply/add/flush. Return created/reused identity and exact pending effects, or a concrete draft when the native operation is unavailable. -Only an independently qualified legacy PRODUCT invocation may load -[legacy-product intake](references/legacy-product-intake.md); it cannot authorize organization operations. +The [retired legacy-product appendix](references/legacy-product-intake.md) records its disposition, +not an executable alternative. No legacy receiver is selected here; any future exception needs its +actual supported target, installed caller and separately admitted effect authority. File the requested work; do not implement it. A clearing invocation returns to work-board after intake. diff --git a/.agents/skills/padd-item/references/legacy-product-intake.md b/.agents/skills/padd-item/references/legacy-product-intake.md index c6b644708..c96b7e255 100644 --- a/.agents/skills/padd-item/references/legacy-product-intake.md +++ b/.agents/skills/padd-item/references/legacy-product-intake.md @@ -1,129 +1,12 @@ -# Separately qualified legacy PRODUCT intake - -Use only after proving a separately qualified legacy-product target, actual configured repository, -installed caller and original effect authority. No organization live opt-in exists. V2 product scope -cannot use these recipes or queue-wide replay to repair unavailable evidence. Retain partial original -effects and independent target readback; this reference grants no new operation authority. - -## 1. Prove workspace wiring - -Resolve the current repository from its GitHub remote. Before any mutation, require: - -- `scripts/fsgg-coord`, `check-board`, and `work-board` in the workspace; -- `FSGG_COORD_PROJECT` plus either an organization/named-user owner or - `FSGG_COORD_OWNER_TYPE=user` for the authenticated viewer's board; -- authentication that can read the repository and configured GitHub Projects v2 board. - -Use the configured `FSGG_COORD_OWNER_TYPE`, `FSGG_COORD_OWNER`, and `FSGG_COORD_PROJECT` exactly. -Never silently fall back to the FS-GG organization board. On missing wiring, kit, authentication, or a -readable board, stop non-zero without mutation and name the `new-sdd-workspace retrofit ---board owner/title` or `work-roadmap` alternative. - -## 2. Clean and triage this workspace - -Run the workspace-scoped `check-board` pass: - -```bash -scripts/fsgg-coord budget -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -Apply only typed safe repairs with `reconcile --apply`, flush queued writes, and repeat the fresh pass. -Stop on unreadable state or an unconfirmed write. - -Then read `scripts/fsgg-coord ready --repo --status Backlog --json`. Read every item and -relevant comment. Follow the `work-board` backlog-triage contract: promote evidenced actionable work, -retain only an explicitly parked item, set Blocked only for a live parseable dependency, and surface -genuine missing judgement. Finish this whole pass before filing. - -## 3. Resolve and deduplicate the request - -Treat the invocation text as the source request. Inspect current-repository source, tests, docs, issues, -and pull requests to establish behavior and scope. Search live issues with: - -```bash -scripts/fsgg-coord issues --state open --refresh -``` - -Use GitHub issue/PR search when needed. Reuse an existing semantic match instead of creating a duplicate. -If evidence says another repository owns the behavior, route a request through -`cross-repo-coordination`; do not edit another checkout or put its -implementation onto this repo's local scheduling lane. - -Decide autonomously when evidence selects one scope. Ask one concise question before mutation only when -materially different local scopes remain plausible after inspection. - -## 4. Construct, validate, file, and project - -Create a concise outcome title and put the structured fields in a draft such as: - -```json -{ - "schema": "fsgg.coord.intake/v1", - "id": "", - "owner": "", - "repository": "", - "title": "", - "observed": "", - "rootCause": "", - "acceptance": "", - "verification": "", - "paths": [""], - "class": "", - "severity": "", - "status": "Backlog", - "backlogReason": "not-yet-actionable", - "disposition": "create" -} -``` - -Put a real sequencing dependency in the optional `blockedBy` property; omit it otherwise. Never guess -paths or use unsupported glob syntax. The intake contract requires at least one existing path; do not -substitute an empty array or `none`. A hand-authored `Paths:` or `Class:` line in a created body is a -defect, not a style choice: those projections belong to the validated draft. - -Validate the exact draft before creation, then apply that same file: - -```bash -scripts/fsgg-coord intake validate intake.json --json -intake_result="$(scripts/fsgg-coord intake apply intake.json --json)" -issue_ref="$(jq -r .issue <<<"$intake_result")" -scripts/fsgg-coord add "$issue_ref" -``` - -`intake apply` creates or reuses the issue according to `disposition`, composes the body from validated -fields, and targets the configured board. Use `disposition: reuse` for a deduplicated existing issue and -retain the canonical ref returned by the transaction. Direct issue-creation commands are not the ordinary -filing path. -The following idempotent `add` asserts that the returned ref is on the configured board; it is not a -second filing path and never substitutes for validate/apply. - -Set only evidenced fields: - -- `Ready` for open, actionable work with valid paths, no unresolved dependency, no active claim, and no - open implementation PR; -- `Blocked` only when `Blocked by:` names a live implementation dependency; -- `Backlog` for a parked decision **and** for anything not yet evidenced as `Ready` — it is the default - `add` writes, and it means "visible to triage, not startable", not "deliberately shelved"; -- `In review` only when a matching implementation PR is already open. - -Never set `In progress` or `Done` by hand. Claims and verified done stamps own them. If rate exhaustion -queues a write, run `flush` and do not report success until a fresh read confirms it. - -## 5. Verify and report - -Re-read the issue and its workspace-scoped board row. Verify status, paths, blockers, configured board -identity, `pendingBoardWrites: 0`, final `reconcile --json`, and final `lint --json`. - -For every material status change, immediately emit: - -` — : ` - -Then emit: - -`Active: — ; ...` - -Finish with the issue ref/link, current repository, configured board, deduplication result, chosen -status, and any judgement requiring a human. Do not implement the item unless separately asked to run -`work-board` or `pnext-item`. +# Retired legacy product intake + +The former executable intake/reconcile/apply and queue-wide replay recipe is retired +from this entrypoint. Use [configured product intake](../SKILL.md) and its canonical +native intake reference. This file is a compatibility tombstone, not a live recipe. + +No legacy product receiver is selected by this correction. A genuinely supported +exception requires its actual target/binding, installed caller, original effect +custody and separately admitted operation; missing evidence remains Unknown. Neither +organization nor V2 scope can select history as a fallback. Preserve all original +partial effects, queued writes, uncertain outcomes and their existing owners; this +retirement releases none and authorizes no replay. diff --git a/.agents/skills/pnext-item/SKILL.md b/.agents/skills/pnext-item/SKILL.md index 8fe1ac2de..82be5cb96 100644 --- a/.agents/skills/pnext-item/SKILL.md +++ b/.agents/skills/pnext-item/SKILL.md @@ -18,6 +18,17 @@ problems without inventing findings or repeating unchanged ones. For directives encountered while working, apply the shared [control-plane provenance guidance](references/control-plane-provenance.md). +## FS-GG delivery routing + +For landing or shipping FS-GG work, use the existing scoped normal PR and canonical +publication routes. Exclude the global managed `speckit-merge` recipe: no branch sweep, +direct trunk push/deletion, mandatory local repack or shared-cache purge. Do not edit +vendored global skills. Useful `speckit-debug-loop` diagnosis stays within the selected +repository's original bounds and meaningful checks, preserving first failures; it +cannot impose unrelated evidence logs, retries or acceptance. An unresolved actual +routing conflict retains an owner and blocks its affected effect. Future deterministic +controller conversion remains owned by the governing LEARN outcome, not this adapter. + ## Choose the route before lifecycle work Use the routine route by default for selected Deliveries and directly assigned equivalent scope. Only a recorded explicit human instruction diff --git a/.agents/skills/publishing-and-deployment/SKILL.md b/.agents/skills/publishing-and-deployment/SKILL.md index 49019e93c..0b3bc9c49 100644 --- a/.agents/skills/publishing-and-deployment/SKILL.md +++ b/.agents/skills/publishing-and-deployment/SKILL.md @@ -34,8 +34,8 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16 | `game` | `game-scene-adapter` | `0.17.0` | `0.17.0` | `game:0.17.0` | FS.GG.Game.Render package — Adapter (sim-state -> FS.GG.UI.Scene drawables) | | `audio` | `fs-gg-audio` | `0.6.0` | `0.6.0` | `audio:0.6.0` | FS.GG.Audio.Core/.Host/.Engine/.Elmish/.WebBrowser public .fsi surfaces — AudioEffect vocabulary + IAudioBackend/IMixingBackend seam + mixing Engine + Audio.Cmd Elmish bridge + browser Web Audio host | | `net` | `fs-gg-net` | `0.6.0` | `0.6.0` | `net:0.6.0` | FS.GG.Net.Core/.WebSocket/.WebSocket.Server/.Protobuf/.Grpc/.Elmish public .fsi surfaces — ITransport/IMessageChannel seam + Sequential/Multiplexed correlation + serve/ServerEcho + WebSocket client/server transport + Google.Protobuf/protobuf-net codecs + gRPC lifecycle bridge + Elmish Cmd/Sub | -| `github` | `coord-engine` | `0.111.0` | `0.111.0` | `github:0.111.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | -| `github` | `telemetry-host` | `0.8.0` | `0.7.0` | `github:0.7.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | +| `github` | `coord-engine` | `0.112.0` | `0.111.0` | `github:0.111.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | +| `github` | `telemetry-host` | `0.8.0` | `0.8.0` | `github:0.8.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | | `github` | `new-sdd-workspace` | `0.21.0` | `0.21.0` | `github:0.21.0` | the `new-sdd-workspace` scaffolder CLI (package FS.GG.NewSddWorkspace) — one-command full-stack SDD workspace creation, wrapping the FS.GG.Templates `rendering` provider (ADR-0016); shipped as a dotnet tool | | `templates` | `fs-gg-workspace-template` | `0.19.0` | `0.19.0` | `templates:0.19.0` | FS.GG.Workspace.Template package, eight template configurations and seven `dotnet new` selectors: workspace-provider identities — `fs-gg-console` (provider `console` — minimal F# executable, no npm lane, ADR-0072 §2); `fs-gg-web` (provider `web` — F# ASP.NET Core + plain TypeScript/Vite website, ADR-0071 §3); `fs-gg-fable-game` (provider `fable-game` — F# ASP.NET Core + Fable/Elmish game client, SignalR for connection-oriented real-time traffic + plain HTTP endpoints with explicit versioned DTOs for typed request/response per ADR-0073, consuming the published `fs-gg-game-core-fable-lockstep-v1` profile per ADR-0069); `fs-gg-fable-bindings` (provider `fable-bindings` — Fable interop library over an exactly pinned npm package/declaration closure, ADR-0072 §3, first proved by the unreleased EHotwagner/babylonjsBindings reference) — plus `fs-gg-governance`, the separately registered pre-existing governance overlay template folded into this package at the same rename; `fs-gg-project-knowledge` and `fs-gg-python` are also already packaged. The current and legacy fable-game configurations share one selector. | | `game` | `game-skills` | `0.9.0` | `0.9.0` | `game:0.9.0` | FS.GG.Game.Skills 0.9.0 package — owner-sourced game, Fable, replay and rules guidance with schema-v2 per-file digests and workspace bundle predicates; embedded by the SDD 1.8 receiver | @@ -101,6 +101,15 @@ Get the artifact wrong and the tag is real and immutable regardless `drive-board`/`work-board` change that was actually `FS.GG.Drivers` content, tagged `kit/v0.47.0`, and published a `.nupkg` byte-identical to `0.46.0` that can never be un-tagged (`.github#2333`). +## Compatibility and managed routing + +The explicit [cut-nuget-release](../cut-nuget-release/SKILL.md) compatibility name +loads this current publishing contract; it provides no sealed prepare/component/promote +fallback or authority to retry an uncertain original effect. FS-GG source landing uses +scoped normal PR delivery, excluding the global managed `speckit-merge` branch sweep, +direct trunk push/deletion, mandatory repack and shared-cache purge. A repository +adapter does not uninstall or certify a vendored global package. + ## How a package gets published ### `.github` coherent-set entry point diff --git a/.agents/skills/work-board/SKILL.md b/.agents/skills/work-board/SKILL.md index 8be950afa..65918a33d 100644 --- a/.agents/skills/work-board/SKILL.md +++ b/.agents/skills/work-board/SKILL.md @@ -11,6 +11,17 @@ product scope; a filter is neither membership nor authority. Read the qualification and effect rules; load further references just in time for the affected action. Qualified organization and PRODUCT contracts remain distinct. Instruction loading activates no executable, binding or enrollment. +## FS-GG delivery routing + +For landing or shipping FS-GG work, use the existing scoped normal PR and canonical +publication routes. Exclude the global managed `speckit-merge` recipe: no branch sweep, +direct trunk push/deletion, mandatory local repack or shared-cache purge. Do not edit +vendored global skills. Useful `speckit-debug-loop` diagnosis stays within the selected +repository's original bounds and meaningful checks, preserving first failures; it +cannot impose unrelated evidence logs, retries or acceptance. An unresolved actual +routing conflict retains an owner and blocks its affected effect. Future deterministic +controller conversion remains owned by the governing LEARN outcome, not this adapter. + ## Continuous clearing loop 1. Understand the whole promise. Recover current native issues, full owning-plan acceptance, owners, PRs/heads, dirty worktrees, diff --git a/.agents/skills/work-programme/SKILL.md b/.agents/skills/work-programme/SKILL.md index 7b94c0530..1968bb070 100644 --- a/.agents/skills/work-programme/SKILL.md +++ b/.agents/skills/work-programme/SKILL.md @@ -9,7 +9,8 @@ The active coordinator is [$work-board](../work-board/SKILL.md). Load it and app organization or selected-product scope, including recovery, capacity and effect-specific admission. This compatibility entrypoint does not schedule from a roadmap, execute a legacy board route, rebuild packets or maintain duplicate status/closure records. Existing handoffs retain their original identities, -failed/unknown effects, 439 inherited holds and 46 later original records without release or replay. +failed/unknown effects and reservations without release or replay. Retrieve their actual identities +and scope from the existing owning records rather than copying incident counts into this redirect. Old reference/helper paths redirect to the same maintained work-board resources. Their `fsgg.programme.*` schemas and `programme.fsx` basename remain compatibility identifiers, not an active diff --git a/.claude/skills/check-board/SKILL.md b/.claude/skills/check-board/SKILL.md index f97ea1f76..0efefc998 100644 --- a/.claude/skills/check-board/SKILL.md +++ b/.claude/skills/check-board/SKILL.md @@ -1,6 +1,6 @@ --- name: check-board -description: Use when the FS-GG Coordination board looks stale, blockers may have cleared, or planning needs ground truth. Reconcile project fields against live issues and surface judgement calls. +description: Inspect the explicitly selected FS-GG board against native evidence; explain stale planning, blockers and Unknowns without repairing fields or granting dispatch. --- # check-board (FS-GG) @@ -48,42 +48,21 @@ fsgg-coord-engine board-v2 inspect --binding-file product-binding.json --report- Inspection remains read-only and grants no writes, selection or operation authority. Local-only workspaces retain their existing route. This organization preparation changes no product source or acceptance. -### Independently qualified legacy-product reconciliation - -The legacy recipes below apply only to a separately qualified legacy-product target and lifecycle. -Before any product command, verify the actual product target/binding and configured product repository; -a repository filter alone does not select a board. Refuse missing or organization-default target facts. -No historical organization live opt-in exists. These recipes cannot repair unavailable V2 evidence or -select Project 1, including when a caller requests a historical organization scope. - -For that verified product target, replace `` with its actual repository: - -```bash -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -`reconcile` is fresh and dry-run unless `--apply` is present. Review its typed mechanical findings and -the product's existing write authority before the scoped apply; this skill grants no new effect: - -```bash -scripts/fsgg-coord reconcile --repo --apply -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -A repair is applied only after its fresh post-mutation scan observes the intended fields. Failed or -stale readback remains failed, never clean. Exit75 retains the reported backoff. Queued writes are not -landed: queue-wide replay has no repository filter and needs its separately admitted original-effect -recovery route and genuine target readback. No replay command is authorized by this check-board pass. -The [offline receipt examples](references/mechanical-reconciliation.md#executable-receipt-examples) -retain their independently qualified meaning and perform no live writes. - -`lint` findings are report-only. Investigate unknown blockers, undeclared paths, unclaimed work and -outcome/child disagreements without rewriting issues, inventing dependencies or closing work. Report -product-scoped mechanical results, queued/failed writes, judgement findings and the final fresh result. -Use [mechanical reconciliation](references/mechanical-reconciliation.md) and -[judgement findings](references/judgement-findings.md) within that product boundary. +### Repair and historical product evidence + +Inspection is read-only. Before any product command, verify the actual product target/binding and configured product repository; +Refuse missing or organization-default target facts. No historical organization live opt-in exists. +A repair needs its own current effect authority, qualified caller and independent readback; +this entrypoint supplies none. Failed reads retain Unknown rather than selecting an older route. + +Historical product reconciliation and the offline receipt examples are retained in +[mechanical reconciliation](references/mechanical-reconciliation.md) and +[deep detail](references/deep-detail.md). They are evidence, not a live invocation recipe. +In particular, queue-wide replay has no repository filter and requires genuine original-effect +custody and separately admitted recovery. Do not replay a queue from an inspection pass. +Use [judgement findings](references/judgement-findings.md) to explain discrepancies without +rewriting issues, inventing dependencies or choosing Status. Current canonical work-board +owns selection and guarded planning; future controller conversion remains separate. ## Historical organization examples are data only diff --git a/.claude/skills/check-board/agents/openai.yaml b/.claude/skills/check-board/agents/openai.yaml index e115089a8..d939ebec1 100644 --- a/.claude/skills/check-board/agents/openai.yaml +++ b/.claude/skills/check-board/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "Check Board" - short_description: "Reconcile board state with live GitHub issues" - default_prompt: "Use $check-board to reconcile the FS-GG Coordination board against live issue state." + short_description: "Inspect board evidence without writes" + default_prompt: "Use $check-board to inspect the explicitly selected FS-GG board, explain planning discrepancies and retain Unknowns without repairs or dispatch." diff --git a/.claude/skills/check-board/references/deep-detail.md b/.claude/skills/check-board/references/deep-detail.md index f8dc7767b..a0536c470 100644 --- a/.claude/skills/check-board/references/deep-detail.md +++ b/.claude/skills/check-board/references/deep-detail.md @@ -1,4 +1,9 @@ + +Historical/compatibility evidence only. The current [check-board entrypoint](../SKILL.md) +is read-only and grants no repair, claim, queue replay or field-write authority. +Any genuine product repair/recovery requires its own actual qualified caller, target, +original custody and separately admitted operation. Archived commands are not a live fallback. # check-board (FS-GG) ## Historical and separately scoped mechanics diff --git a/.claude/skills/check-board/references/mechanical-reconciliation.md b/.claude/skills/check-board/references/mechanical-reconciliation.md index a538e5452..2081deff4 100644 --- a/.claude/skills/check-board/references/mechanical-reconciliation.md +++ b/.claude/skills/check-board/references/mechanical-reconciliation.md @@ -1,5 +1,10 @@ # Mechanical reconciliation +Historical/compatibility evidence only. The current [check-board entrypoint](../SKILL.md) +is read-only and grants no repair, claim, queue replay or field-write authority. +Any genuine product repair/recovery requires its own actual qualified caller, target, +original custody and separately admitted operation. Archived commands are not a live fallback. + ## Organization scope is read-only For prepared .9/.11 organization consumers use only diff --git a/.claude/skills/continue-from-handoff/SKILL.md b/.claude/skills/continue-from-handoff/SKILL.md index 9693de8b0..b0cd40189 100644 --- a/.claude/skills/continue-from-handoff/SKILL.md +++ b/.claude/skills/continue-from-handoff/SKILL.md @@ -69,14 +69,15 @@ from worker reports and proposals. Missing temporary evidence remains unknown; do not reconstruct results or repeat a consumed operation to fill that gap. Apply the selected [forward-recovery boundary](../work-board/references/lifecycle-contract.md#recover-ownership-and-unavailable-history): the unavailable historical evidence-search task is closed as unavailable; stop repeated searches and -requests. Preserve all known original records, 439 inherited reservations, 46 later original records -and unproved outcomes Unknown, without release or replay. For a genuinely fresh operation, reconcile +requests. Preserve all known original records and unproved outcomes Unknown, without release or replay. +Retrieve the actual reservation identities and scope from their existing owning records; +this generic entrypoint maintains no incident count or cohort ledger. For a genuinely fresh operation, reconcile current relevant ownership and remaining capacity, separate generation/writable state/identity/outputs, and fence shared destinations against old-actor interference. Missing history is not empty coverage; unresolved relevant interference still blocks its operation. Unrelated unavailable history does not globally block demonstrated-independent work, and a new ID cannot disguise an uncertain-effect retry. -Use existing journals/custody, not another recovery ledger. SC2's existing-host container scope does -not change the separate V3 two-machine portability requirement. +Use existing journals/custody, not another recovery ledger. Product-specific host or portability +obligations remain in their actual owning plans rather than this generic recovery entrypoint. Also recover each pending request's canonical channel and original message identity, owner, expected response, response/escalation @@ -98,16 +99,12 @@ It owns model routing, lanes, telemetry, PR admission, native checks, source int separate publication/receiver acceptance boundaries. Do not restore duplicate status or closure upkeep. Do not duplicate its lifecycle here. -Invocation authorizes autonomous decisions and completion of the recovered -Unified Roadmap v3 and the in-scope games outcomes without human intervention, including its necessary source -changes, PRs, merges, releases, and receiver work within the recorded programme -scope. Choose implementation details and resolve routine tradeoffs directly; -do not stop for preference questions or repeated confirmation. This does not -create missing credentials, bypass protected checks, renew expired grants, or -replace effect-specific admission. Inspect and obtain valid machine admission -through the existing route before each concrete effect. Where access or an -external dependency genuinely prevents an effect, preserve the blocker and -continue independent ready work; never claim unavailable human feedback. +Resume only the user's actually authorized recovered scope. Reading or editing this +entrypoint grants no blanket programme, games, release or receiver authority. Existing +authorization may permit autonomous completion, but it creates no missing credentials, +protected approval, runtime capability or renewed original clock. Resolve actual current +owner, plan and operation admission through work-board before the affected effect. +Preserve blocked external feedback and continue demonstrated-independent authorized work. Seek dependency-ready parallel opportunities aggressively within available worker, CPU, integrator and hosted-CI capacity. Repair and integrate the existing diff --git a/.claude/skills/cut-nuget-release/SKILL.md b/.claude/skills/cut-nuget-release/SKILL.md index c13a01cf4..d9a86fab9 100644 --- a/.claude/skills/cut-nuget-release/SKILL.md +++ b/.claude/skills/cut-nuget-release/SKILL.md @@ -1,87 +1,35 @@ --- name: cut-nuget-release -description: Use when asked to release every stale FS-GG NuGet producer. Audit packed inputs, prepare each coherent set once, publish exact manifest-bound bytes to both feeds, promote, smoke, and reconcile consumer pins. +description: Explicitly select the maintained FS-GG publishing contract for an owed NuGet release; preserve candidate identity, separate effect admission and selected consumer acceptance. --- -# cut-nuget-release (FS-GG) +# Selected NuGet release entrypoint -Read [publishing-and-deployment](../publishing-and-deployment/SKILL.md) before acting. It owns versioning, -feed, coherent-set, and registry rules. This skill applies those rules through the repository's current -pack-once release saga. +Read [publishing-and-deployment](../publishing-and-deployment/SKILL.md) before acting. +It owns the current release route, coherent-set versioning, candidate/preflight, +feed verification, promotion and selected consumer adoption. This compatibility +name supplies no additional release, retry or recovery authority. -## Invariants +Resolve the actual producer, changed package inputs, promoted predecessor and genuinely +owed release. Source delivery, candidate qualification, publication and installed +adoption remain separate. Do not release every producer merely because this entrypoint +was invoked; preserve existing publication owners and exact selected operation scope. -- Release only merged, exact-`main` bytes. -- Never repack in a package publisher. `release-saga-prepare.yml` is the sole pack site. -- Never reuse a version, move a release tag, overwrite an asset, or bypass OIDC/trusted publishing. -- The prepared `release-manifest.json` binds every package byte, package id/version, and source SHA. -- Package publishers download those exact assets, initialize their durable journals, and resume - idempotently after a failure. -- Promote only after every package journal is complete and both feeds expose the complete coherent set - with payload identity. -- Publish first; update canonical registry pins only after both feeds are observed. +For the hub coherent set, use the selected successor operating window in +[utel-release-successor](../../../docs/roadmaps/utel-release-successor.md). +Require its immutable candidate/run/artifact/raw archive and successful `publish=false` +preflight before a separately admitted publication. Preserve the original bytes, +journal and independent readbacks; a consumed publication or unresolved send never +becomes a new operation by changing an identifier or rerunning a workflow. -## 1. Establish what is owed +Historical release-saga prepare, component-publisher and promote routes remain sealed +under GS2-08.9. This skill provides no executable legacy recipe or fallback. Missing +current authority, tooling or feed evidence leaves the affected operation incomplete. -Fetch `main` and tags in every rostered producer without disturbing local changes. Compare each current -pack input—including staged skills, templates, targets, generated manifests, and runtime sources—with -the latest successfully published tag. Classify each producer as current, release owed, or blocked. -Derive dependency order from package references, registry contracts, consumer pins, and dispatch edges. +Use scoped normal PR delivery for source changes. The global managed `speckit-merge` +recipe is excluded from FS-GG landing: no branch sweep, direct trunk push/deletion, +mandatory repack or shared-cache purge. Retain canonical publication and consumer +owners; do not patch a vendored global skill to repair repository routing. -For the hub coherent set, FS.GG.Coord.Cli, FS.GG.Kit, and FS.GG.Drivers always receive one fresh version. -Choose the smallest valid SemVer bump under current policy; never infer currency from a project version -or registry row alone. - -## 2. Prepare once - -Land version, lockfile, release-note, package-input, and manifest changes through a normal reviewed PR. -On exact merged `main`, dispatch `.github/workflows/release-saga-prepare.yml` with the fresh version -and source SHA. Require its Core/CLI/package gates to pass and inspect the draft -`coherent-set/v` release: - -- exactly the expected packages were packed once; -- `release-manifest.json` binds their sizes and SHA-256 digests to the exact merged source SHA; -- the draft contains no reused or overwritten assets; -- all three coherent tags will resolve to that same source SHA. - -A preparation run is the reversible rehearsal boundary. Package-publisher workflows have no dry-run or -local-pack mode. - -## 3. Publish and resume - -Create/push the coherent tags in the ordering required by the saga, or use the sanctioned recovery -dispatch with the exact prepared source SHA. Each of `release-coord-engine.yml`, -`release-kit.yml`, and `release-drivers.yml` must: - -1. download the prepared manifest and package bytes; -2. run `scripts/release-saga-ci.sh init` for its package and exact source SHA; -3. publish the prepared package to GitHub Packages; -4. record the GitHub observation in its immutable package journal; -5. authenticate to nuget.org through OIDC trusted publishing; -6. publish the same prepared payload and record the public observation. - -On failure, repair the cause and rerun the same publisher against the same manifest. The journal must -make completed steps idempotent and reject identity, source, version, or byte drift. - -## 4. Promote and verify - -Dispatch `.github/workflows/release-saga-promote.yml` only after all three journals exist. Require it to -verify the manifest, source SHA, coherent tags, complete journals, both feeds, and monotonic channel -ordering before promotion. Then: - -- download each package from both feeds and compare payload entries, excluding nuget.org's - `.signature.p7s`; -- install the public coord engine in a clean tool home and run command-contract plus safe live reads; -- materialize Kit/Drivers in a clean consumer and verify expected files, modes, digests, and versions; -- update consumer pins and `registry/dependencies.yml` through the sanctioned generated projections; -- merge the registry/pin PR, fetch exact `main`, and rerun feed, source, pin, and coherent-set checks. - -## Definition of done - -Done means the complete expected set is available from both feeds, payload-identical, promoted, adopted, -and pinned on merged `main`; all package/tag/source identities agree; fresh-consumer smoke passes; and -no stale bot PR/branch remains. A tag, one green publisher, one feed, or an updated registry alone is -not completion. - -Report exact version, source SHA, PRs, tags, workflow runs, journals, feed observations, promotion, -consumer smoke, and merged registry/pin evidence. If any part remains, report the release as incomplete. +Report the actual selected source/candidate, operation result and remaining acceptance. +A package, tag, registry digest or green source PR alone does not complete adoption. diff --git a/.claude/skills/cut-nuget-release/agents/openai.yaml b/.claude/skills/cut-nuget-release/agents/openai.yaml index 5f1daa07b..adad584e7 100644 --- a/.claude/skills/cut-nuget-release/agents/openai.yaml +++ b/.claude/skills/cut-nuget-release/agents/openai.yaml @@ -1,7 +1,7 @@ interface: display_name: "Cut NuGet Release" - short_description: "Release every stale FS-GG NuGet producer" - default_prompt: "Use $cut-nuget-release to audit and publish every stale FS-GG NuGet producer in dependency order." + short_description: "Select the maintained release contract" + default_prompt: "Use $cut-nuget-release to resolve the owed producer release through canonical publishing-and-deployment, preserving original bytes and separate effect admission." policy: allow_implicit_invocation: false diff --git a/.claude/skills/padd-item/SKILL.md b/.claude/skills/padd-item/SKILL.md index 50ab0cbd4..43c4a886d 100644 --- a/.claude/skills/padd-item/SKILL.md +++ b/.claude/skills/padd-item/SKILL.md @@ -1,6 +1,6 @@ --- name: padd-item -description: Add or reuse a request for the explicitly configured product through canonical intake; preserve qualified legacy-product compatibility. +description: Add or reuse a request for the explicitly configured product through canonical native intake; preserve exact scope and keep retired legacy recipes non-executable. --- # Configured product intake @@ -15,6 +15,7 @@ Reuse an existing semantic match. If another repository owns the request, use For selected V2 product scope, do not run legacy intake/reconcile/apply/add/flush. Return created/reused identity and exact pending effects, or a concrete draft when the native operation is unavailable. -Only an independently qualified legacy PRODUCT invocation may load -[legacy-product intake](references/legacy-product-intake.md); it cannot authorize organization operations. +The [retired legacy-product appendix](references/legacy-product-intake.md) records its disposition, +not an executable alternative. No legacy receiver is selected here; any future exception needs its +actual supported target, installed caller and separately admitted effect authority. File the requested work; do not implement it. A clearing invocation returns to work-board after intake. diff --git a/.claude/skills/padd-item/references/legacy-product-intake.md b/.claude/skills/padd-item/references/legacy-product-intake.md index c6b644708..c96b7e255 100644 --- a/.claude/skills/padd-item/references/legacy-product-intake.md +++ b/.claude/skills/padd-item/references/legacy-product-intake.md @@ -1,129 +1,12 @@ -# Separately qualified legacy PRODUCT intake - -Use only after proving a separately qualified legacy-product target, actual configured repository, -installed caller and original effect authority. No organization live opt-in exists. V2 product scope -cannot use these recipes or queue-wide replay to repair unavailable evidence. Retain partial original -effects and independent target readback; this reference grants no new operation authority. - -## 1. Prove workspace wiring - -Resolve the current repository from its GitHub remote. Before any mutation, require: - -- `scripts/fsgg-coord`, `check-board`, and `work-board` in the workspace; -- `FSGG_COORD_PROJECT` plus either an organization/named-user owner or - `FSGG_COORD_OWNER_TYPE=user` for the authenticated viewer's board; -- authentication that can read the repository and configured GitHub Projects v2 board. - -Use the configured `FSGG_COORD_OWNER_TYPE`, `FSGG_COORD_OWNER`, and `FSGG_COORD_PROJECT` exactly. -Never silently fall back to the FS-GG organization board. On missing wiring, kit, authentication, or a -readable board, stop non-zero without mutation and name the `new-sdd-workspace retrofit ---board owner/title` or `work-roadmap` alternative. - -## 2. Clean and triage this workspace - -Run the workspace-scoped `check-board` pass: - -```bash -scripts/fsgg-coord budget -scripts/fsgg-coord reconcile --repo --json -scripts/fsgg-coord lint --repo --json -``` - -Apply only typed safe repairs with `reconcile --apply`, flush queued writes, and repeat the fresh pass. -Stop on unreadable state or an unconfirmed write. - -Then read `scripts/fsgg-coord ready --repo --status Backlog --json`. Read every item and -relevant comment. Follow the `work-board` backlog-triage contract: promote evidenced actionable work, -retain only an explicitly parked item, set Blocked only for a live parseable dependency, and surface -genuine missing judgement. Finish this whole pass before filing. - -## 3. Resolve and deduplicate the request - -Treat the invocation text as the source request. Inspect current-repository source, tests, docs, issues, -and pull requests to establish behavior and scope. Search live issues with: - -```bash -scripts/fsgg-coord issues --state open --refresh -``` - -Use GitHub issue/PR search when needed. Reuse an existing semantic match instead of creating a duplicate. -If evidence says another repository owns the behavior, route a request through -`cross-repo-coordination`; do not edit another checkout or put its -implementation onto this repo's local scheduling lane. - -Decide autonomously when evidence selects one scope. Ask one concise question before mutation only when -materially different local scopes remain plausible after inspection. - -## 4. Construct, validate, file, and project - -Create a concise outcome title and put the structured fields in a draft such as: - -```json -{ - "schema": "fsgg.coord.intake/v1", - "id": "", - "owner": "", - "repository": "", - "title": "", - "observed": "", - "rootCause": "", - "acceptance": "", - "verification": "", - "paths": [""], - "class": "", - "severity": "", - "status": "Backlog", - "backlogReason": "not-yet-actionable", - "disposition": "create" -} -``` - -Put a real sequencing dependency in the optional `blockedBy` property; omit it otherwise. Never guess -paths or use unsupported glob syntax. The intake contract requires at least one existing path; do not -substitute an empty array or `none`. A hand-authored `Paths:` or `Class:` line in a created body is a -defect, not a style choice: those projections belong to the validated draft. - -Validate the exact draft before creation, then apply that same file: - -```bash -scripts/fsgg-coord intake validate intake.json --json -intake_result="$(scripts/fsgg-coord intake apply intake.json --json)" -issue_ref="$(jq -r .issue <<<"$intake_result")" -scripts/fsgg-coord add "$issue_ref" -``` - -`intake apply` creates or reuses the issue according to `disposition`, composes the body from validated -fields, and targets the configured board. Use `disposition: reuse` for a deduplicated existing issue and -retain the canonical ref returned by the transaction. Direct issue-creation commands are not the ordinary -filing path. -The following idempotent `add` asserts that the returned ref is on the configured board; it is not a -second filing path and never substitutes for validate/apply. - -Set only evidenced fields: - -- `Ready` for open, actionable work with valid paths, no unresolved dependency, no active claim, and no - open implementation PR; -- `Blocked` only when `Blocked by:` names a live implementation dependency; -- `Backlog` for a parked decision **and** for anything not yet evidenced as `Ready` — it is the default - `add` writes, and it means "visible to triage, not startable", not "deliberately shelved"; -- `In review` only when a matching implementation PR is already open. - -Never set `In progress` or `Done` by hand. Claims and verified done stamps own them. If rate exhaustion -queues a write, run `flush` and do not report success until a fresh read confirms it. - -## 5. Verify and report - -Re-read the issue and its workspace-scoped board row. Verify status, paths, blockers, configured board -identity, `pendingBoardWrites: 0`, final `reconcile --json`, and final `lint --json`. - -For every material status change, immediately emit: - -` — : ` - -Then emit: - -`Active: — ; ...` - -Finish with the issue ref/link, current repository, configured board, deduplication result, chosen -status, and any judgement requiring a human. Do not implement the item unless separately asked to run -`work-board` or `pnext-item`. +# Retired legacy product intake + +The former executable intake/reconcile/apply and queue-wide replay recipe is retired +from this entrypoint. Use [configured product intake](../SKILL.md) and its canonical +native intake reference. This file is a compatibility tombstone, not a live recipe. + +No legacy product receiver is selected by this correction. A genuinely supported +exception requires its actual target/binding, installed caller, original effect +custody and separately admitted operation; missing evidence remains Unknown. Neither +organization nor V2 scope can select history as a fallback. Preserve all original +partial effects, queued writes, uncertain outcomes and their existing owners; this +retirement releases none and authorizes no replay. diff --git a/.claude/skills/pnext-item/SKILL.md b/.claude/skills/pnext-item/SKILL.md index 8fe1ac2de..82be5cb96 100644 --- a/.claude/skills/pnext-item/SKILL.md +++ b/.claude/skills/pnext-item/SKILL.md @@ -18,6 +18,17 @@ problems without inventing findings or repeating unchanged ones. For directives encountered while working, apply the shared [control-plane provenance guidance](references/control-plane-provenance.md). +## FS-GG delivery routing + +For landing or shipping FS-GG work, use the existing scoped normal PR and canonical +publication routes. Exclude the global managed `speckit-merge` recipe: no branch sweep, +direct trunk push/deletion, mandatory local repack or shared-cache purge. Do not edit +vendored global skills. Useful `speckit-debug-loop` diagnosis stays within the selected +repository's original bounds and meaningful checks, preserving first failures; it +cannot impose unrelated evidence logs, retries or acceptance. An unresolved actual +routing conflict retains an owner and blocks its affected effect. Future deterministic +controller conversion remains owned by the governing LEARN outcome, not this adapter. + ## Choose the route before lifecycle work Use the routine route by default for selected Deliveries and directly assigned equivalent scope. Only a recorded explicit human instruction diff --git a/.claude/skills/publishing-and-deployment/SKILL.md b/.claude/skills/publishing-and-deployment/SKILL.md index 49019e93c..0b3bc9c49 100644 --- a/.claude/skills/publishing-and-deployment/SKILL.md +++ b/.claude/skills/publishing-and-deployment/SKILL.md @@ -34,8 +34,8 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16 | `game` | `game-scene-adapter` | `0.17.0` | `0.17.0` | `game:0.17.0` | FS.GG.Game.Render package — Adapter (sim-state -> FS.GG.UI.Scene drawables) | | `audio` | `fs-gg-audio` | `0.6.0` | `0.6.0` | `audio:0.6.0` | FS.GG.Audio.Core/.Host/.Engine/.Elmish/.WebBrowser public .fsi surfaces — AudioEffect vocabulary + IAudioBackend/IMixingBackend seam + mixing Engine + Audio.Cmd Elmish bridge + browser Web Audio host | | `net` | `fs-gg-net` | `0.6.0` | `0.6.0` | `net:0.6.0` | FS.GG.Net.Core/.WebSocket/.WebSocket.Server/.Protobuf/.Grpc/.Elmish public .fsi surfaces — ITransport/IMessageChannel seam + Sequential/Multiplexed correlation + serve/ServerEcho + WebSocket client/server transport + Google.Protobuf/protobuf-net codecs + gRPC lifecycle bridge + Elmish Cmd/Sub | -| `github` | `coord-engine` | `0.111.0` | `0.111.0` | `github:0.111.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | -| `github` | `telemetry-host` | `0.8.0` | `0.7.0` | `github:0.7.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | +| `github` | `coord-engine` | `0.112.0` | `0.111.0` | `github:0.111.0` | the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool | +| `github` | `telemetry-host` | `0.8.0` | `0.8.0` | `github:0.8.0` | optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set | | `github` | `new-sdd-workspace` | `0.21.0` | `0.21.0` | `github:0.21.0` | the `new-sdd-workspace` scaffolder CLI (package FS.GG.NewSddWorkspace) — one-command full-stack SDD workspace creation, wrapping the FS.GG.Templates `rendering` provider (ADR-0016); shipped as a dotnet tool | | `templates` | `fs-gg-workspace-template` | `0.19.0` | `0.19.0` | `templates:0.19.0` | FS.GG.Workspace.Template package, eight template configurations and seven `dotnet new` selectors: workspace-provider identities — `fs-gg-console` (provider `console` — minimal F# executable, no npm lane, ADR-0072 §2); `fs-gg-web` (provider `web` — F# ASP.NET Core + plain TypeScript/Vite website, ADR-0071 §3); `fs-gg-fable-game` (provider `fable-game` — F# ASP.NET Core + Fable/Elmish game client, SignalR for connection-oriented real-time traffic + plain HTTP endpoints with explicit versioned DTOs for typed request/response per ADR-0073, consuming the published `fs-gg-game-core-fable-lockstep-v1` profile per ADR-0069); `fs-gg-fable-bindings` (provider `fable-bindings` — Fable interop library over an exactly pinned npm package/declaration closure, ADR-0072 §3, first proved by the unreleased EHotwagner/babylonjsBindings reference) — plus `fs-gg-governance`, the separately registered pre-existing governance overlay template folded into this package at the same rename; `fs-gg-project-knowledge` and `fs-gg-python` are also already packaged. The current and legacy fable-game configurations share one selector. | | `game` | `game-skills` | `0.9.0` | `0.9.0` | `game:0.9.0` | FS.GG.Game.Skills 0.9.0 package — owner-sourced game, Fable, replay and rules guidance with schema-v2 per-file digests and workspace bundle predicates; embedded by the SDD 1.8 receiver | @@ -101,6 +101,15 @@ Get the artifact wrong and the tag is real and immutable regardless `drive-board`/`work-board` change that was actually `FS.GG.Drivers` content, tagged `kit/v0.47.0`, and published a `.nupkg` byte-identical to `0.46.0` that can never be un-tagged (`.github#2333`). +## Compatibility and managed routing + +The explicit [cut-nuget-release](../cut-nuget-release/SKILL.md) compatibility name +loads this current publishing contract; it provides no sealed prepare/component/promote +fallback or authority to retry an uncertain original effect. FS-GG source landing uses +scoped normal PR delivery, excluding the global managed `speckit-merge` branch sweep, +direct trunk push/deletion, mandatory repack and shared-cache purge. A repository +adapter does not uninstall or certify a vendored global package. + ## How a package gets published ### `.github` coherent-set entry point diff --git a/.claude/skills/work-board/SKILL.md b/.claude/skills/work-board/SKILL.md index 8be950afa..65918a33d 100644 --- a/.claude/skills/work-board/SKILL.md +++ b/.claude/skills/work-board/SKILL.md @@ -11,6 +11,17 @@ product scope; a filter is neither membership nor authority. Read the qualification and effect rules; load further references just in time for the affected action. Qualified organization and PRODUCT contracts remain distinct. Instruction loading activates no executable, binding or enrollment. +## FS-GG delivery routing + +For landing or shipping FS-GG work, use the existing scoped normal PR and canonical +publication routes. Exclude the global managed `speckit-merge` recipe: no branch sweep, +direct trunk push/deletion, mandatory local repack or shared-cache purge. Do not edit +vendored global skills. Useful `speckit-debug-loop` diagnosis stays within the selected +repository's original bounds and meaningful checks, preserving first failures; it +cannot impose unrelated evidence logs, retries or acceptance. An unresolved actual +routing conflict retains an owner and blocks its affected effect. Future deterministic +controller conversion remains owned by the governing LEARN outcome, not this adapter. + ## Continuous clearing loop 1. Understand the whole promise. Recover current native issues, full owning-plan acceptance, owners, PRs/heads, dirty worktrees, diff --git a/.claude/skills/work-programme/SKILL.md b/.claude/skills/work-programme/SKILL.md index 7b94c0530..1968bb070 100644 --- a/.claude/skills/work-programme/SKILL.md +++ b/.claude/skills/work-programme/SKILL.md @@ -9,7 +9,8 @@ The active coordinator is [$work-board](../work-board/SKILL.md). Load it and app organization or selected-product scope, including recovery, capacity and effect-specific admission. This compatibility entrypoint does not schedule from a roadmap, execute a legacy board route, rebuild packets or maintain duplicate status/closure records. Existing handoffs retain their original identities, -failed/unknown effects, 439 inherited holds and 46 later original records without release or replay. +failed/unknown effects and reservations without release or replay. Retrieve their actual identities +and scope from the existing owning records rather than copying incident counts into this redirect. Old reference/helper paths redirect to the same maintained work-board resources. Their `fsgg.programme.*` schemas and `programme.fsx` basename remain compatibility identifiers, not an active diff --git a/.github/workflows/release-successor-candidate.yml b/.github/workflows/release-successor-candidate.yml index 36962963d..10b7ff12e 100644 --- a/.github/workflows/release-successor-candidate.yml +++ b/.github/workflows/release-successor-candidate.yml @@ -1,6 +1,6 @@ name: release-successor-candidate -# Source/byte qualification for coherent set 0.111.0 only. This route has no tag, release, +# Source/byte qualification for coherent set 0.112.0 only. This route has no tag, release, # journal, package-feed, OIDC or promotion write. Its retained Actions artifact # is an unpromoted candidate, not a published release or an admission receipt. on: @@ -43,7 +43,7 @@ jobs: test "$(git rev-parse HEAD)" = "$SOURCE_SHA" test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA" version="$(dotnet msbuild src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj -getProperty:Version | tr -d '[:space:]')" - test "$version" = 0.111.0 + test "$version" = 0.112.0 echo "version=$version" >> "$GITHUB_OUTPUT" - name: Verify the stable predecessor and unused package version env: @@ -53,24 +53,24 @@ jobs: run: | set -euo pipefail mkdir -p artifacts/predecessor artifacts/packages - gh release download coherent-set/v0.110.0 --repo "$GITHUB_REPOSITORY" \ + gh release download coherent-set/v0.111.0 --repo "$GITHUB_REPOSITORY" \ --pattern stable-channel.json --dir artifacts/predecessor python3 scripts/release-saga.py predecessor \ --channel artifacts/predecessor/stable-channel.json \ - --release-tag coherent-set/v0.110.0 \ - --tag-source 42cd9e7c8505f7cd72d5a22ad424a27af6d51458 \ + --release-tag coherent-set/v0.111.0 \ + --tag-source bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2 \ > artifacts/predecessor/identity.json - test "$(jq -r .version artifacts/predecessor/identity.json)" = 0.110.0 + test "$(jq -r .version artifacts/predecessor/identity.json)" = 0.111.0 python3 scripts/check-release-candidate-uniqueness.py \ - --version "$VERSION" --predecessor 0.110.0 + --version "$VERSION" --predecessor 0.111.0 release_status="$(curl --silent --show-error --location -o /dev/null -w '%{http_code}' \ -H "Authorization: Bearer $GH_TOKEN" \ -H 'Accept: application/vnd.github+json' \ - "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/coherent-set/v0.111.0")" + "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/tags/coherent-set/v0.112.0")" test "$release_status" = 404 test -z "$(git ls-remote --tags origin \ - 'refs/tags/coherent-set/v0.111.0' 'refs/tags/kit/v0.111.0' \ - 'refs/tags/drivers/v0.111.0' 'refs/tags/coord-engine/v0.111.0')" + 'refs/tags/coherent-set/v0.112.0' 'refs/tags/kit/v0.112.0' \ + 'refs/tags/drivers/v0.112.0' 'refs/tags/coord-engine/v0.112.0')" - name: Test the telemetry producer and prepare the browser fixture run: | set -euo pipefail @@ -183,7 +183,7 @@ jobs: set -euo pipefail test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA" python3 scripts/check-release-candidate-uniqueness.py \ - --version "$VERSION" --predecessor 0.110.0 + --version "$VERSION" --predecessor 0.111.0 - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: release-successor-candidate-${{ github.sha }}-${{ github.run_id }} diff --git a/.github/workflows/release-successor-feed-readiness.yml b/.github/workflows/release-successor-feed-readiness.yml index 8974f2b8e..2096dfacf 100644 --- a/.github/workflows/release-successor-feed-readiness.yml +++ b/.github/workflows/release-successor-feed-readiness.yml @@ -9,9 +9,9 @@ on: description: Closed read-only observation; no candidate or publication effects type: choice required: true - default: coherent-0111-absence + default: coherent-0112-absence options: - - coherent-0111-absence + - coherent-0112-absence - host-080-org-artifact permissions: @@ -36,7 +36,7 @@ jobs: - name: Verify the exact protected source and offline refusal controls env: SOURCE_SHA: ${{ github.sha }} - OBSERVATION: ${{ inputs.observation || 'coherent-0111-absence' }} + OBSERVATION: ${{ inputs.observation || 'coherent-0112-absence' }} run: | set -euo pipefail test "$GITHUB_REPOSITORY" = FS-GG/.github @@ -47,14 +47,14 @@ jobs: python3 scripts/telemetry-host-published-org-read.py --check-selection python3 tests/release-successor-candidate/run.py python3 tests/telemetry-host-published-org-read/run.py - - name: Observe both feeds for 0.111.0 against published 0.110.0 - if: inputs.observation == 'coherent-0111-absence' || inputs.observation == '' + - name: Observe both feeds for 0.112.0 against published 0.111.0 + if: inputs.observation == 'coherent-0112-absence' || inputs.observation == '' env: GITHUB_TOKEN: ${{ github.token }} run: | set -euo pipefail python3 scripts/check-release-candidate-uniqueness.py \ - --version 0.111.0 --predecessor 0.110.0 + --version 0.112.0 --predecessor 0.111.0 - name: Observe the published Host 0.8 org archive once id: host-org if: inputs.observation == 'host-080-org-artifact' diff --git a/Directory.Build.props b/Directory.Build.props index fce446ab9..f2b8c5b7a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -628,8 +628,10 @@ + - 0.111.0 + 0.112.0 diff --git a/docs/architecture.md b/docs/architecture.md index 9bac9c4da..f1df8fa1d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -653,8 +653,8 @@ product's `FS.GG.UI.*` pin), which is a different axis from the template package | `game-scene-adapter` | FS.GG.Game | `0.17.0` | `0.17.0` | | `fs-gg-audio` | FS.GG.Audio | `0.6.0` | `0.6.0` | | `fs-gg-net` | FS.GG.Net | `0.6.0` | `0.6.0` | -| `coord-engine` | FS-GG/.github | `0.111.0` | `0.111.0` | -| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.7.0` | +| `coord-engine` | FS-GG/.github | `0.112.0` | `0.111.0` | +| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.8.0` | | `new-sdd-workspace` | FS-GG/.github | `0.21.0` | `0.21.0` | | `fs-gg-workspace-template` | FS.GG.Templates | `0.19.0` | `0.19.0` | | `game-skills` | FS.GG.Game | `0.9.0` | `0.9.0` | diff --git a/docs/coordination/skill-currency-selected-adoption.md b/docs/coordination/skill-currency-selected-adoption.md index 591f6eb45..ca418a3b8 100644 --- a/docs/coordination/skill-currency-selected-adoption.md +++ b/docs/coordination/skill-currency-selected-adoption.md @@ -1,6 +1,6 @@ # Canonical skill currency and selected SDD adoption -Status: approved scope; implementation and consumer qualification remain pending. +Status: selected source contract; publication and consumer qualification remain separate. Owning Outcome: [#4785](https://github.com/FS-GG/.github/issues/4785). Delivery: [#4789](https://github.com/FS-GG/.github/issues/4789). @@ -124,7 +124,9 @@ version, promoted predecessor, candidate/source and journal operating window thr the [maintained successor route](../roadmaps/utel-release-successor.md). Preserve historical release identities, original archives, journals, failures and Unknowns. The consumed 0.111.0 publication cannot be replayed to carry new skill bytes. -No next version or publication authority is allocated by this plan. +The [root source ruling](https://github.com/FS-GG/.github/issues/4789#issuecomment-6317055404) +selects prospective112 over genuine promoted111 through that existing operating window. +It allocates no candidate, publication, main hold or installation authority. Verify the immutable candidate, successful `publish=false` preflight and separately admitted ordinary publication, each feed's raw archive identity against its promoted @@ -193,3 +195,11 @@ supersession; retain a root-owned capture gap until that source closure is deliv This governing plan alone establishes none of those implementation, publication, installation, runtime, broader Outcome or future controller results. + +The source pipeline preflight reuses the existing static/pure candidate, recovery, +coherent-selector and skill-route controls before costly qualification. Negative +controls must refuse consumed111/current-journal or stale predecessor reuse, occupied +or unreadable feed coordinates, sealed release dispatch and retired queue replay. +The accepted Host0.8 observation branch remains unchanged. No custom model, new +pipeline or savings claim is justified for this literal source-window correction; +full required CI and genuine later candidate qualification remain mandatory. diff --git a/docs/registry/compatibility.md b/docs/registry/compatibility.md index 46e4aa19e..452931159 100644 --- a/docs/registry/compatibility.md +++ b/docs/registry/compatibility.md @@ -179,8 +179,8 @@ authored `Version` cells of the Versioned contracts table (#748).* | `fs-gg-audio` | FS.GG.Audio | `0.6.0` | `0.6.0` | | `fs-gg-net` | FS.GG.Net | `0.6.0` | `0.6.0` | | `keyboard-input` | FS.GG.Rendering | `0.5.0` | — | -| `coord-engine` | FS-GG/.github | `0.111.0` | `0.111.0` | -| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.7.0` | +| `coord-engine` | FS-GG/.github | `0.112.0` | `0.111.0` | +| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.8.0` | | `new-sdd-workspace` | FS-GG/.github | `0.21.0` | `0.21.0` | | `fs-gg-workspace-template` | FS.GG.Templates | `0.19.0` | `0.19.0` | | `game-skills` | FS.GG.Game | `0.9.0` | `0.9.0` | diff --git a/docs/roadmaps/utel-release-successor.md b/docs/roadmaps/utel-release-successor.md index 673970c7b..e987db41a 100644 --- a/docs/roadmaps/utel-release-successor.md +++ b/docs/roadmaps/utel-release-successor.md @@ -2084,3 +2084,30 @@ operations overlapping, measured combined peak, economic improvement or full4743 Retain actual publication and selected physical caller/instruction adoption, ordinary useful-overlap qualification and proportionate baseline/coverage evidence as unfinished work. No synthetic product, new ledger, publisher retry, credential acquisition or Unknown-reservation release is introduced. + +## Selected skill-routing coherent112 source window — 2026-10-21 + +Programme/root selected prospective SOURCE0.112.0 under [Delivery4789](https://github.com/FS-GG/.github/issues/4789#issuecomment-6317055404) +and the [governing adoption plan](../coordination/skill-currency-selected-adoption.md). +The genuine promoted predecessor is111, immutable source`bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2`, +content`sha256:ea0b66a325ef425510a362e189469c5c6e6936880f455898e78520076737298b`. +Current source selects logical ref`refs/heads/fsgg/v2/journal/release/coord112-skill-routing-20261021-01` +and directory`state/releases/coord112-skill-routing-20261021-01`. This is reversible +source composition, not namespace allocation, a candidate, publication, main hold or installation. +Final candidate source/run/artifact/raw archive and operator admission remain unset. + +Preserve consumed111, all original failed/continued operations and historical recovery +constants. The existing authenticated six-coordinate/latest-predecessor candidate gate +must freshly establish occupancy and predecessor before tests/build/pack. Local org-feed403 +remains Unknown, not absence or permission to change credentials/retry. Preserve the existing +45-minute candidate, exact seven-member original archive and60-minute publisher contracts. +A successful actual publish=false preflight precedes separately admitted publication on +those same immutable bytes. Compare each feed's raw archive against its own promoted +receipt and normalized producer payloads across feeds; public NuGet signing can change +raw archive hashes. Actual complete publication and selected SDD materialization/Codex +identity/refusal acceptance remain separate required outcomes of4789. + +The closed coherent observation choice is`coherent-0112-absence`; only its literals +advance in the shared Host observer. Accepted Host0.8 source/assets/pins, independent +read behavior and application-custody acceptance remain unchanged. Source publication +updates111 package/tag metadata only after the actual accepted future operation. diff --git a/registry/CHANGELOG.md b/registry/CHANGELOG.md index 602108efc..9daf2cef0 100644 --- a/registry/CHANGELOG.md +++ b/registry/CHANGELOG.md @@ -1,5 +1,14 @@ # Registry changelog +## 2026-10-21 — prospective coherent112 canonical skill routing (#4789) + +Select SOURCE0.112.0 for CLI/Kit/Drivers over genuine promoted111, with the distinct +prospective coord112-skill-routing-20261021-01 journal identity. Published package +version/tag and installed pins remain111. Correct current skill routes and qualify +selected SDD adoption separately; no candidate, namespace allocation or publication +is authorized. Preserve all111 original attempts and historical recovery identities. +The shared coherent feed selector advances to112; accepted Host0.8 behavior is unchanged. + ## 2026-10-21 — prospective independent Host0.8 source (#4707) Advance only Host source to0.8.0 to package the accepted unassigned-usage dashboard @@ -77,6 +86,8 @@ no gate behaviour changes — this is purely how humans record the log. ## Entries +- **2026-10-21** — HOST0.8 PUBLISHED INVENTORY (Programme/root; .github#4707, .github#4789): reconcile `telemetry-host` package-version/tag to the accepted original0.8 publication, publisher39580298871 and independent readonly39591087147. Both feeds and eight journal/promote assertions are accepted; no republish or Home/full4707 acceptance is implied. Preserve immutable0.7 and earlier history; regenerate maintained projections. + - **2026-10-21** — Coherent 111 publication and selected adoption accepted (Programme/root; #4743/#4730): record original candidate 39522441055/a1/artifact 12312227013 and third ordinary publisher 39529077063/a1, all 16 effects / gen33, promoted release 419029192 / source bd60a97a. Both-feed receipts, seven original assets and three signed public normalized payloads are independently matched. Exact inactive 82-file CLI111 installation, absolute 111 complete 56 read and selected dual-root instruction bytes are accepted separately. Functional operation-level overlap of two useful local validations is accepted; economics remains inconclusive. Advance only the published registry/tag/source-distributed pin and derived metadata. Preserve first failure/checkpoint, global selector-writer Unknown and all prior reservations; no new candidate/release, replay, fleet adoption or repack 111. Curated source knowledge ships only with its next actual artifact release. - **2026-10-21** — Resource-aware guidance coherent111 source readiness (Programme/root; #4743): Advance the shared CLI/Kit/Drivers source scalar and coord-engine source version to0.111.0 for four changed packaged work-board instruction leaves within the unchanged22-leaf population. The closed ordinary route selects genuine completed110 source42cd9e7c/content12c130cd and prospective journal coord111-resource-aware-20261021-01. Published110 versions/tags, installed pins, completed journals and Creator/SDD release axes remain unchanged. Source preparation creates no namespace or effect authority; actual candidate, normal publication and instruction/caller adoption require their separate admission/readback. Full4743 useful-overlap/economic acceptance remains. diff --git a/registry/coordination-kit-skill-manifest.json b/registry/coordination-kit-skill-manifest.json index 9a7244a8e..a01c3a74f 100644 --- a/registry/coordination-kit-skill-manifest.json +++ b/registry/coordination-kit-skill-manifest.json @@ -4,21 +4,21 @@ { "id": "check-board", "supplied-by": ".claude/skills/check-board", - "tree-sha256": "919c07242cb7c12736f9c24d658b81a0e5435f4dd77f6bc791197b7624c2f2c5", + "tree-sha256": "c86cba94f1fde83ca8cffc6822eee3cb30119b3c10013702cb8077a7d9350615", "files": [ { "path": "SKILL.md", - "sha256": "f34cb94d1f600e7cbae8cb9f8730bbdc1e02c9e54f2fc7a3c6a04ce090f3aee0", + "sha256": "e196e822e7cf1cf07c77b4906e8fb18b7e6d78e81a2da1202ab0630ceee0d818", "executable": false }, { "path": "agents/openai.yaml", - "sha256": "ce496dbe4554189ab811f644c23d82019dba330c7a0449bdcc3973f46966bcf0", + "sha256": "3848d63a965ef43c392828964485bed6d35b12db93b33aeee3fc324fa1a55e4f", "executable": false }, { "path": "references/deep-detail.md", - "sha256": "ead0d4c56a5f8e82e9437562ff1e3019fc6a706f40f56d95831bca1a3c7fa0e1", + "sha256": "8e964cd0099b96c983e25e0690540bcc726b19e975a56cd5f97b616d84b8510c", "executable": false }, { @@ -28,7 +28,7 @@ }, { "path": "references/mechanical-reconciliation.md", - "sha256": "98a403509486c36e80b823fdc5f5991c4787cb81d3907a2489fddc56f3e515e4", + "sha256": "9563c48b56ee5aa761591d0887a5ee87fa0b66e27a9fd9f3c0c873f8fb57990c", "executable": false }, { @@ -132,11 +132,11 @@ { "id": "pnext-item", "supplied-by": ".claude/skills/pnext-item", - "tree-sha256": "ae02d3f41d69e3b16f749bf6131e0f39eddd36dde4c6eff7238bb026e061cac9", + "tree-sha256": "f98c47fa00ae2d8481a967afa9d1a2987906a5b0223c181fafdf7eb8cc10ce7e", "files": [ { "path": "SKILL.md", - "sha256": "710564bd37cf630ab1d05f336b36ba1f916fee1762cf53d14e93c89732cd3ef3", + "sha256": "e514e0af7661d06b4cbf1c36e90f32e944f18ba51a81e37393f7f318819f7cb4", "executable": false }, { diff --git a/registry/dependencies.yml b/registry/dependencies.yml index ddeeda78c..7a4ebd8bf 100644 --- a/registry/dependencies.yml +++ b/registry/dependencies.yml @@ -960,7 +960,7 @@ contracts: # release416724931 and all16/final33 were independently accepted2026-10-18T22:19:39Z under #4682. # Published source75ab98dd28b1a818cc3986d595bf21e0fe691ec6 is immutable; later source prep is not in that archive. # Installed/discovery, binding5/schema3 migration and consumer/restart/rollback acceptance remain separate. - version: "0.111.0" # SOURCE/PUBLISHED: coherent111 immutable sourcebd60a97a422c8fc8ca0c17b2a9dea4e504b708d2 is published and root-accepted. Exact inactive public111 installation, absolute111 full56 read and selected operator instruction bytes are accepted separately; no global selector/fleet or numerical benefit claim. PRIOR: SOURCE ONLY: #4743 operation-specific admission and source/ref/preflight guidance; normal coherent111 readiness over completed110. Published110/installed pins unchanged. PRIOR SOURCE/PUBLISHED: mandatory Status lifecycle and finite read-only observer, published from immutable source42cd9e7c8505f7cd72d5a22ad424a27af6d51458. Postpublication registry/pin maintenance does not repack that release. Installed instruction/caller adoption and ordinary observer acceptance remain separately owned by #4731/#4730. PRIOR: SOURCE PREPARATION ONLY: mandatory Status lifecycle reconciliation; coherent Kit/Drivers/CLI source successor. Publication and installed adoption remain separately unselected; current published109 custody is unchanged. PRIOR source scalar: immutable published109 source0d85830e7329a2718ee57ff0f1a16e6c751a469c. Later source knowledge/observer records do not repack that artifact. PRIOR: SOURCE PREPARATION ONLY: continuous board clearing, canonical native intake and complete Delivery acceptance plus bounded full-cohort acquisition (#4701/#4702). MINOR receiver-visible behavior; publication/installed/native acceptance pending. Published108 and original journal26 remain immutable. PRIOR SOURCE/PUBLISHED: genuine candidate39233536189 and same-journal forward39238215850 completed33generations/all16effects; promoted release417149016 at f984a361. Actual installed/native qualification remains separate. PRIOR SOURCE PREPARATION: successor planning read-budget repair; publication and installed qualification pending. Published107 remains unchanged. PRIOR HISTORICAL SOURCE PREPARATION: canonical work-board coordinator, explicit outcome/delivery binding5/schema3/inspection3 and integrator2, bounded migration and progress. Source delivery #4677 under #4641; independent coherent107 publication, installed caller adoption and native schema/enrollment/view acceptance remain separate. Accepted binding4/schema2/inspection2 stays unchanged; retained105 qualification is historical scope. Later selector106 observation has unknown change timing and proves neither whole runtime nor instruction discovery. Published106 pins stay unchanged. PRIOR SOURCE/PUBLISHED: exact source 2e42faaa994367b9f50be87439e8fd973ad21501, candidate 39124245029, same-journal forward 39130246438 accepted all 16 effects at final generation 33 and release 416441527. Active installed 0.105 and board binding unchanged; Host receiver adoption remains separate. PRIOR SOURCE PREPARATION: SOURCE PREPARATION ONLY: prospective coherent 0.106.0 over published 0.105.0 for passive native observation; candidate/publication/installation unselected, both-feed collision guards remain required. Published package-version/tag and active board pin stay 0.105.0. PRIOR CURRENT SOURCE/PUBLISHED: coherent-set/v0.105.0, exact candidate e54a59885580c894c8fbc67b0b27af3571ea9883; original candidate39095711219/a1 and publisher resume39098313280/a1 accepted; initial39096861301 remains an incomplete generation14 checkpoint. Maintained developer update and exact82-member installed105 payload correspondence accepted; board migration, binding and consumer acceptance remain separately scoped. PRIOR source0.104.0 is published from immutable candidate 912eba8bbd707dabcbc5011d508c479109010b71; executor 5a2d13d0 is the continuation controller only. HISTORICAL SOURCE PREPARATION: SOURCE PREPARATION ONLY: current programme migration and prospective release-specific .103 suspension; literal utel-rel-22 selection grants no allocation/publication/installed authority. Original .103 tag:intent remains Unknown with all reservations preserved. Published package-version/tag stay0.102.0. PRIOR 0.103 SOURCE PREPARATION ONLY: receiver-first bounded CI continuation and authenticated suite graphs; original utel-rel-21 effects remain unresolved, original0.102/utel-rel-20 recovery is frozen. PRIOR SOURCE/PUBLISHED: coherent-set/v0.101.0 source79051e56b025dadfc6fcaabd58b79e33f2854928, original publisher38094091013/a1; canonical generation33/all16 effects and independent both-feed CLI/Kit/Drivers payloads accepted. Installed adoption, current channel, collector activation and adapter SDK pairing remain separate. PRIOR SOURCE PREPARATION ONLY: exact CI attribution/native association and additive immutable causal receiver; selected utel-rel-19 source rail, packed receiver qualification/publication/adoption pending. Published package-version/tag remain0.100.0; current14 and local receiver-first boundary, no Host dependency. PRIOR SOURCE/PUBLISHED: coherent-set/v0.100.0 at 3ed8ad419a64253ca6f665e9779e5e4d110f50a5; retained original manifest and both-feed payload readbacks verified, stable channel promoted. Installed payload identity82/82 matches; global collector activation and genuine usage unverified, original UTEL19 custody unknown. PRIOR SOURCE ONLY: breaking current receipt ABI, current14 init/restore, explicit13 maintenance and scoped14 dashboard; prospective utel-rel-18, collision/qualification/publication pending. PRIOR SOURCE PREPARATION: 0.99.1 compatible bounded private dispatch-state IO; proposed utel-rel-17. Published frontier0.99.0; no new publication/adoption. PRIOR SOURCE ONLY: EFF schema14, prospective assessment gate and closed Drivers helper inputs. Not published/installed; package frontier remains0.98.0 and immutable utel-rel-15. Independent Host0.5 required for Store14 collection; native pilot/package qualification pending. PRIOR SOURCE/PUBLISHED: verified coherent 0.98.0 at producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, journal utel-rel-15 and publisher 37434982959. PRIOR SOURCE SELECTION: additive schema 13 CI attribution correction and native compact/3 report contract; exact-source integration/qualification remains required. Published frontier remains accepted0.97.1 from99ea75286f5c3cea2a261fef4e5b45cd70378185; consumedutel-rel-13 and historical0.97.2/utel-rel-14 source are preserved. SOURCE/PUBLISHED: compatible equal feature/item telemetry fact identity and native agent binding repairs (PRs 4242/4243/4245); accepted coherent-set/v0.97.1 producer 99ea75286f5c3cea2a261fef4e5b45cd70378185 has both-feed verification. Installed root adoption and the fresh two-fact local cycle are scoped acceptance; historical and unsupported usage remain unknown. PRIOR 0.97.0 SOURCE/PUBLISHED: COORD-BOARD-V2-01.5 product adapter and guidance; publisher 37235030417 promoted exact source 2ab0c0ff9f37bdec9a11ba3604ebdc230711934f with all 16 journal effects verified and both-feed payload readback. Installed product adoption remains separate. PRIOR 0.96.0 SOURCE/PUBLISHED: UTEL-H3 coherent successor carries telemetry CI legacy-default selection repair from PR #4152 (a0044731f432b9f3f7dffa4f9d0a0c85eebb8a1b); publisher 37161212706 promoted exact source f891b5b0723070c67e08d1a87b7d12b0b4d8bebe; installed selections and receiver adoption remain separate. PRIOR 0.95.0 SOURCE/PUBLISHED — MINOR coherent successor for bounded read-only board-v2 inspection and gated organization guidance; publisher 37071597534 promoted exact source 3b5de3367f8647cea0cd9366b8cb11eddf53feae with all 16 protected-journal effects verified; installed qualification and four-target Board adoption remain pending. PRIOR 0.94.0 SOURCE/PUBLISHED — MINOR, Drivers removes the retired Python skill-helper implementations from both mirrored skill roots and the compatibility wrapper after supported callers moved to packaged F# commands; installed-package verification rejects reintroduction; includes protected native learning capture and export accumulated since 0.93.0; immutable coherent-set/v0.94.0 was promoted from source 337b6a1d53571b07ca8e1417e18e52546ad319a7 after exact both-feed readback; receiver adoption remains separate. PRIOR 0.93.0 SOURCE/PUBLISHED — MINOR, supported skill callers use packaged F# telemetry and preflight commands; includes protected native telemetry collection provenance accumulated since 0.92.0; immutable coherent release github:0.93.0 was promoted from source d53d5c4fa0a54894da87e96ae2999288fb280ea5 after protected both-feed readback; no receiver adoption is claimed. PRIOR 0.92.0 SOURCE/PUBLISHED — MINOR, additive bounded read-only `skill telemetry-config discover` for installed workflows; immutable coherent release github:0.92.0 was promoted from source eb0f73186a07daf26e0f7bb5d4c1ee2054a8adaf after exact both-feed readback; no receiver adoption is claimed. PRIOR 0.91.5 SOURCE PREPARED — FSharp.Core 10.1.401 and compatible telemetry/driver updates; package-version remains published 0.91.4 until both-feed promotion. PRIOR 0.91.4 SOURCE/PUBLISHED — coherent telemetry-capable set from f0b1bb8748cbb7b27aeaf7346b8690c82ed03343; PRIOR 0.89.0 SOURCE/PUBLISHED — MINOR, FS.GG.Drivers adds the content-addressed installed routine policy, helper and native-check closure; immutable coherent release github:0.89.0 was promoted from source 535970a06055dfcdbb96aad8726b4d7d981a5b72 after exact both-feed readback. PRIOR 0.88.0 SOURCE/PUBLISHED — MINOR, independently activated private telemetry, source-free scoped dashboard, durable receipt transport, release qualification, and intake-audit hardening. Immutable tags `coord-engine/v0.88.0` and `coherent-set/v0.88.0` resolve the accepted source d77fe195bc4e133ace8763c2158834410ca72bc0. PRIOR 0.87.0 SOURCE PREPARED — MINOR, prospective private SQLite telemetry, repository-owned Codex lifecycle observation, exact-head CI reconciliation, native outcomes, and derived whole-item budget inputs (UTEL-06.1–06.4, .github#3360–#3363). Published from exact source bffc370933ec4f35af2af4acf5f72b5888844365 and promoted after both-feed verification. PRIOR 0.86.1 SOURCE/PUBLISHED — PATCH, routed board drivers reserve the three-round fresh implementer/critic repair chain for strict items so admitted routine work remains reduced through repair (.github#3338); immutable coherent release github:0.86.1 is promoted from source ce6edfd8e3f569867e6809ca3933c6ae65769a1d with content sha256:ccea15d2acd633188f34bdaa9761137538dd834fafa43cda185dbf90c473307c. PRIOR 0.86.0 SOURCE/PUBLISHED — MINOR, reduced one-owner routine route; immutable coherent release github:0.86.0 is promoted from source beb3456ecb2c4b4cadb6bc8dc268598246449aaf with content sha256:01d0c921ab23b6807e1d6da1a9c623cd0cfb5a595bf790b51662746a0681b974. PRIOR 0.85.2 SOURCE/PUBLISHED — PATCH, guarded two-phase implementation landing accepts a missing closing keyword only under an exact typed positive acceptance-receipt obligation and fresh same-item authority, while terminal completion remains reserved for the canonically closing receipt PR (.github#3286); immutable coherent release github:0.85.2 is promoted from source e94f7da34e2c3792a2c532a4969123fd26fd601b with content sha256:3fb04e68d9b90dff5d37f3ad9d0533346cf753444effdb6de5721191557d58fa. PRIOR 0.85.1 SOURCE/PUBLISHED — PATCH, acceptance survives a forward-only, complete, path-disjoint base advance while changed candidates, conflicts, relevant overlap, and unverifiable equivalence remain fail-closed (.github#3274); immutable coherent release github:0.85.1 is promoted from source 503a07d24a6087c549bc47b5322d6f05cce2a6c5 with content sha256:f0f3706c755c767c9f761c993bb01f7a9c52c08cd74d504c1de7322aadaf471c. PRIOR 0.85.0 SOURCE/PUBLISHED — MINOR, human-authorized scope-bound synthetic lifecycle checkpoint with mandatory functional verification and strict post-anchor resumption (.github#3263); immutable coherent release github:0.85.0 is promoted from source 9307b85458b326019415f8bcf6a1d13d0139eb6a with content sha256:95892fd5d1765ec3020168f71b103a1849ae645e00de77f8fcb549ddbd510081. PRIOR 0.84.0 SOURCE/PUBLISHED — MINOR, durable content-addressed private telemetry receipts, automatic digest resolution, and separately reviewed non-counting legacy recovery (.github#3259); immutable coherent release github:0.84.0 is promoted from source 17f400d70db2cdd28efd8d7ce14327f1495411d2 with content sha256:ec226689bf12f9ede6aebab4f1f045cc1bcb24e0c8208a9fcae031387cf776d5. PRIOR 0.83.5 SOURCE/PUBLISHED — PATCH, roadmap acceptance recognizes native FS.GG.SDD.Artifacts/1.5.0 verify and ship stage schemas while retaining exact revision, work, and evidence identity (.github#3255); immutable coherent release github:0.83.5 is promoted from source 97666e7f0193b71fde5642d5950093490fbabbdb with content sha256:3519327ac384e1549a2fed7fc431f47047c63f335341ce3d8eaf8b1b63aa3a9a. PRIOR 0.83.4 SOURCE/PUBLISHED — PATCH, roadmap unit acceptance now permits a single immutable implementation/acceptance PR only under equal identities, derives the repository from applied unit authority, and proves exact one-commit canonical critique ancestry (.github#3251); immutable coherent release github:0.83.4 is promoted from source a3641ca0827187fa4ff693f627f5024dab4093b0 with content sha256:aea555a3e8a6acf9d319b42cf714b605067be23ce2c8b39647780db4a96930bf. PRIOR 0.83.3 SOURCE/PUBLISHED — PATCH, roadmap acceptance uses separately authorable structured-review and immutable-envelope identities and binds SDD observation to the current structured route work ID (.github#3247); immutable coherent release github:0.83.3 is promoted from source 5e4c23790c714b892b0c5efa25b515ae4eaf252e with content sha256:aa95e6038bd0630eb163b0001c2f5628bc0daf71d0da8170f9e6fb6e44697ec2. PRIOR 0.83.2 SOURCE/PUBLISHED — PATCH, live acceptance relies on independently regenerated ignored SDD artifacts while retaining exact-revision observation and canonical comparison (.github#3242); immutable coherent release github:0.83.2 is promoted from source 0697e72f0f5b0d6bcc9728da3589f71d24dde420 with content sha256:40072e5998da0476a0bb7ad177d5c68129268b120d2cf3a2d554dbc7490dc7ed. PRIOR 0.83.1 SOURCE/PUBLISHED — PATCH, ordered partial roadmap catalog acceptance (.github#3233); immutable coherent release github:0.83.1 is promoted from source 2237ab8282433234e0d1af3f4716ef099422e282 with content sha256:43f9d6a386ce2988e1825d0439642e2965c937ee264bec3dca107dcd78ee2c1d. PRIOR 0.83.0 SOURCE/PUBLISHED — MINOR, additive typed roadmap work-unit preparation and atomic acceptance transaction (.github#3210); immutable coherent release github:0.83.0 is promoted from source fe13bf08d82091a3d024583e0315c50d30c59376 with content sha256:0e0df10f52fdd68747739aa6083f7d5b34cdaffd35e6d16976bcfdfa1106ebaa. PRIOR 0.82.0 SOURCE/PUBLISHED — MINOR, deterministic qualification/evidence runner; immutable coherent release github:0.82.0 is promoted from source 3c53e4600110974bb1b22d3522a7d794fd24e3fd with content sha256:20cd31e6a90658237571d37874f6885789217db329ca613d4a5e819432223a0d. PRIOR 0.81.1 SOURCE/PUBLISHED — PATCH, publish-before-adopt completion; packed callers use compiled telemetry and compatibility helpers are removed. PRIOR 0.78.1 SOURCE/PUBLISHED — PATCH, stable. Documentation-only orchestration visualization design plus the auto-publish frontier repair; no engine wire change. PRIOR 0.78.0 SOURCE/PUBLISHED — MINOR, stable. Intake derives Class from the shared board vocabulary and recovers only enumerated legacy drafts after a partial create; the exact predecessor body and authoritative post-PATCH read gate receipt advancement. Packed filing skills remove the unprojectable capability example. package-version is 0.78.0 after immutable dual-feed promotion. PRIOR 0.77.0 SOURCE/PUBLISHED — MINOR. ADR-0079 makes one Accountable Delivery Owner the sole routine authorization boundary; packed pnext-item retains exact-head critique/repair/acceptance evidence under distinct phase identities but requires no external person, account, agent, or approval quorum. PRIOR 0.76.0 SOURCE/PUBLISHED — MINOR. The coherent Kit adds initialize-sdd-workspace as a new receiver-visible member; Drivers and Coord.Cli advance on the shared scalar with no engine wire change. PRIOR 0.75.5 SOURCE/PUBLISHED — PATCH, stable (.github#2983, source PR #2990, merge 34b1fd8b). Three compatible lifecycle repairs ship: successful completed post-merge runs classify correctly, completion provenance preserves the full GraphQL merge OID, and closed delivery reads authoritative issue Paths while retaining unread-versus-undeclared state. Protocol.fs has zero wire commits across the span. PRIOR 0.75.4 SOURCE/PUBLISHED — PATCH, stable (.github#2941, source PR #2967, merge 8d720471). Nine accumulated non-wire engine commits ship with corrected cumulative release notes; Protocol.fs has zero wire commits across the release span. PRIOR 0.75.3 SOURCE/PUBLISHED — PATCH, stable, source 264725f374e3f05da46d7c3089462076a1f9bf7a; the immutable release predates this correction and its embedded notes misdescribe the accumulated changes. PRIOR: 0.74.0 SOURCE/PUBLISHED — MINOR, stable (.github#2876, source PR #2879). Five pre-existing non-wire engine-path commits plus the release-preparation commit are shipped from d4458d8fdfff0c332c80d920202ab0230bd9de0f; Protocol.fs is unchanged across the release span. PRIOR: 0.71.0 SOURCE/PUBLISHED — MINOR, stable (.github#2813, source PR #2814). Forward recovery ships the live stable-predecessor authority from source 3890c8f6b20fcd2c1fdd5b2a9a5356877c217397 while poisoned 0.70.0 remains unpromoted. Previous coherent registry frontier: 0.68.0. PRIOR 0.68.0 SOURCE/PUBLISHED — MINOR, stable (.github#2794, source PR #2803). Four additive exhausted-review/forced-claim commits are shipped with zero Protocol.fs wire commits. Previous coherent registry frontier: 0.67.0. PRIOR 0.67.0 SOURCE/PUBLISHED — MINOR, stable (.github#2756, PR #2792). Durable bounded review-wait receipts and the ordinary full fresh-successor review route are additive receiver-visible semantics. Previous coherent registry frontier: 0.66.0. PRIOR 0.66.0 SOURCE/PUBLISHED — MINOR, stable (.github#2757, PR #2789). The packaged findings-and-filing contract adds the named `disclosed residual` terminal state: measured bound, caller-facing disclosure, executable red pin, and durable authorized decision are conjunctive; a #266 check that cannot fail is explicitly excluded. Previous coherent registry frontier: 0.65.0. PRIOR 0.61.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-observable legs, either of which carries the line on the criterion the 0.56.0, 0.57.0, 0.59.0 and 0.60.0 entries used (.github#2712, PR #2745, engine commit 73024dc3): the board gains a `Kind:` body-line sentinel with a CLOSED four-value vocabulary — work|anchor|register|directive — in the same grammar as `Paths:`/`Class:`/`Blocked on:`, and a row declaring a NON-`work` kind is EXEMPT FROM THE LIFECYCLE REDUCER ENTIRELY (no projected Status, no persisted watermark, no park, no promotion, no Done), which the scheduler reports through a NEW verdict `not-a-unit-of-work` naming the kind rather than the row's column; and `ready --json` plus the board reads gain two per-row fields, `kind` (null until an operator creates the field) and `commentCount` (observable REGISTER DEPTH, riding the existing board page query as a connection totalCount and selecting no nodes, so the board read costs what it did before). AN ABSENT `Kind:` LINE MEANS `work`, so every row that existed at 0.60.0 behaves exactly as it did — the opposite default from an absent `Class:` line, deliberately. THE WIRE SURFACE DID MOVE HERE, AND ADDITIVELY, which is the honest difference from the 0.59.0 and 0.60.0 entries and is measured rather than asserted: src/FS.GG.Coord.Core/Protocol.fs is 214 insertions/254 deletions across coord-engine/v0.60.0..v0.61.0, but classifying that diff line by line finds ZERO removed type/DU/let/member definitions and exactly ONE added case, `Schedulability.NotAUnitOfWork` — the churn is the projected rule PROSE, not surface removal, so this is a MINOR BY ADDITION and not a MAJOR. THE SPAN IS 32 commits, of which 15 touch the engine paths under `git rev-list --full-history` and only 12 under default history simplification; BOTH numbers are stated because the smaller one is what a reader gets by default, and .github#2743 — the row that ordered this cut — records exactly that merge-vs-squash sensitivity as a real gate defect. Cut under per-cut operator authorisation (.github#2743 Sequencing; the 0.60.0 authorisation explicitly did not extend forward). PRIOR 0.60.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-visible legs, either of which carries the line on the criterion the 0.56.0, 0.57.0 and 0.59.0 entries used (.github#2645, PR #2650, engine commit aea56a4a): `claim --json` reports differently — `statusWrite` gains a FIFTH value `withheld`, distinct from `failed` (asserts a mutation was sent) and `deferred` (promises `flush`), and `converged` now means agreement with the DERIVED destination rather than with the literal column `In progress` — and the packed kit retires a start-gate `jq` predicate asserting `.status == "In progress"` that receivers copy verbatim. THE WIRE SURFACE IS UNCHANGED and that is measured, not assumed: check-engine-freshness reported 0 of the 2 unreleased engine commits touching src/FS.GG.Coord.Core/Protocol.fs, so `withheld` is a new INHABITANT of an existing reported field, not a new verb, flag, help entry, render name, result name or exit code. Cut by .github#2409's MANUAL path (.github#2713) because nothing automatic can cut it: kit-auto-publish.py:99-100 refuses this candidate `candidate-not-next-patch` — 0.60.0 opens a NEW minor line against a 0.59.0 frontier, failing the first clause and short-circuiting before the sibling-tag block at :101 — which is the rail working by design (.github#2442), verified here by driving decide() over the live facts with a 0.59.1 control that clears that same rail. PRIOR 0.59.0 SOURCE/PUBLISHED — MINOR, stable. Five receiver-visible engine defect fixes (.github#2575/#2662/#2683/#2678/#2694) plus a new reviewer protocol boundary in the packed pnext-item skill (finding-packet contract + independent-review consolidation), which is the 0.57.0 entry's shape. The 290 lines of new .fsi surface are corroboration only: FS.GG.Coord.Core.Operation is IsPackable=false and unreferenced by the CLI, so it reaches no receiver, and Protocol.fs is byte-identical across the span (.github#2648, PR #2706, round-1 finding by critic heron-d444). This cut ABANDONS 0.58.1, whose three tags at a415652f published nothing on either feed (.github#2654); those tags are immutable and are deliberately left alone (.github#1772). PRIOR 0.58.0 — 0.58.1 was never published and must not be read as a prior. + version: "0.112.0" # SOURCE ONLY #4789, published111 retained; prospective skill-routing112 is not publication/adoption. PRIOR SOURCE/PUBLISHED: coherent111 immutable sourcebd60a97a422c8fc8ca0c17b2a9dea4e504b708d2 is published and root-accepted. Exact inactive public111 installation, absolute111 full56 read and selected operator instruction bytes are accepted separately; no global selector/fleet or numerical benefit claim. PRIOR: SOURCE ONLY: #4743 operation-specific admission and source/ref/preflight guidance; normal coherent111 readiness over completed110. Published110/installed pins unchanged. PRIOR SOURCE/PUBLISHED: mandatory Status lifecycle and finite read-only observer, published from immutable source42cd9e7c8505f7cd72d5a22ad424a27af6d51458. Postpublication registry/pin maintenance does not repack that release. Installed instruction/caller adoption and ordinary observer acceptance remain separately owned by #4731/#4730. PRIOR: SOURCE PREPARATION ONLY: mandatory Status lifecycle reconciliation; coherent Kit/Drivers/CLI source successor. Publication and installed adoption remain separately unselected; current published109 custody is unchanged. PRIOR source scalar: immutable published109 source0d85830e7329a2718ee57ff0f1a16e6c751a469c. Later source knowledge/observer records do not repack that artifact. PRIOR: SOURCE PREPARATION ONLY: continuous board clearing, canonical native intake and complete Delivery acceptance plus bounded full-cohort acquisition (#4701/#4702). MINOR receiver-visible behavior; publication/installed/native acceptance pending. Published108 and original journal26 remain immutable. PRIOR SOURCE/PUBLISHED: genuine candidate39233536189 and same-journal forward39238215850 completed33generations/all16effects; promoted release417149016 at f984a361. Actual installed/native qualification remains separate. PRIOR SOURCE PREPARATION: successor planning read-budget repair; publication and installed qualification pending. Published107 remains unchanged. PRIOR HISTORICAL SOURCE PREPARATION: canonical work-board coordinator, explicit outcome/delivery binding5/schema3/inspection3 and integrator2, bounded migration and progress. Source delivery #4677 under #4641; independent coherent107 publication, installed caller adoption and native schema/enrollment/view acceptance remain separate. Accepted binding4/schema2/inspection2 stays unchanged; retained105 qualification is historical scope. Later selector106 observation has unknown change timing and proves neither whole runtime nor instruction discovery. Published106 pins stay unchanged. PRIOR SOURCE/PUBLISHED: exact source 2e42faaa994367b9f50be87439e8fd973ad21501, candidate 39124245029, same-journal forward 39130246438 accepted all 16 effects at final generation 33 and release 416441527. Active installed 0.105 and board binding unchanged; Host receiver adoption remains separate. PRIOR SOURCE PREPARATION: SOURCE PREPARATION ONLY: prospective coherent 0.106.0 over published 0.105.0 for passive native observation; candidate/publication/installation unselected, both-feed collision guards remain required. Published package-version/tag and active board pin stay 0.105.0. PRIOR CURRENT SOURCE/PUBLISHED: coherent-set/v0.105.0, exact candidate e54a59885580c894c8fbc67b0b27af3571ea9883; original candidate39095711219/a1 and publisher resume39098313280/a1 accepted; initial39096861301 remains an incomplete generation14 checkpoint. Maintained developer update and exact82-member installed105 payload correspondence accepted; board migration, binding and consumer acceptance remain separately scoped. PRIOR source0.104.0 is published from immutable candidate 912eba8bbd707dabcbc5011d508c479109010b71; executor 5a2d13d0 is the continuation controller only. HISTORICAL SOURCE PREPARATION: SOURCE PREPARATION ONLY: current programme migration and prospective release-specific .103 suspension; literal utel-rel-22 selection grants no allocation/publication/installed authority. Original .103 tag:intent remains Unknown with all reservations preserved. Published package-version/tag stay0.102.0. PRIOR 0.103 SOURCE PREPARATION ONLY: receiver-first bounded CI continuation and authenticated suite graphs; original utel-rel-21 effects remain unresolved, original0.102/utel-rel-20 recovery is frozen. PRIOR SOURCE/PUBLISHED: coherent-set/v0.101.0 source79051e56b025dadfc6fcaabd58b79e33f2854928, original publisher38094091013/a1; canonical generation33/all16 effects and independent both-feed CLI/Kit/Drivers payloads accepted. Installed adoption, current channel, collector activation and adapter SDK pairing remain separate. PRIOR SOURCE PREPARATION ONLY: exact CI attribution/native association and additive immutable causal receiver; selected utel-rel-19 source rail, packed receiver qualification/publication/adoption pending. Published package-version/tag remain0.100.0; current14 and local receiver-first boundary, no Host dependency. PRIOR SOURCE/PUBLISHED: coherent-set/v0.100.0 at 3ed8ad419a64253ca6f665e9779e5e4d110f50a5; retained original manifest and both-feed payload readbacks verified, stable channel promoted. Installed payload identity82/82 matches; global collector activation and genuine usage unverified, original UTEL19 custody unknown. PRIOR SOURCE ONLY: breaking current receipt ABI, current14 init/restore, explicit13 maintenance and scoped14 dashboard; prospective utel-rel-18, collision/qualification/publication pending. PRIOR SOURCE PREPARATION: 0.99.1 compatible bounded private dispatch-state IO; proposed utel-rel-17. Published frontier0.99.0; no new publication/adoption. PRIOR SOURCE ONLY: EFF schema14, prospective assessment gate and closed Drivers helper inputs. Not published/installed; package frontier remains0.98.0 and immutable utel-rel-15. Independent Host0.5 required for Store14 collection; native pilot/package qualification pending. PRIOR SOURCE/PUBLISHED: verified coherent 0.98.0 at producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, journal utel-rel-15 and publisher 37434982959. PRIOR SOURCE SELECTION: additive schema 13 CI attribution correction and native compact/3 report contract; exact-source integration/qualification remains required. Published frontier remains accepted0.97.1 from99ea75286f5c3cea2a261fef4e5b45cd70378185; consumedutel-rel-13 and historical0.97.2/utel-rel-14 source are preserved. SOURCE/PUBLISHED: compatible equal feature/item telemetry fact identity and native agent binding repairs (PRs 4242/4243/4245); accepted coherent-set/v0.97.1 producer 99ea75286f5c3cea2a261fef4e5b45cd70378185 has both-feed verification. Installed root adoption and the fresh two-fact local cycle are scoped acceptance; historical and unsupported usage remain unknown. PRIOR 0.97.0 SOURCE/PUBLISHED: COORD-BOARD-V2-01.5 product adapter and guidance; publisher 37235030417 promoted exact source 2ab0c0ff9f37bdec9a11ba3604ebdc230711934f with all 16 journal effects verified and both-feed payload readback. Installed product adoption remains separate. PRIOR 0.96.0 SOURCE/PUBLISHED: UTEL-H3 coherent successor carries telemetry CI legacy-default selection repair from PR #4152 (a0044731f432b9f3f7dffa4f9d0a0c85eebb8a1b); publisher 37161212706 promoted exact source f891b5b0723070c67e08d1a87b7d12b0b4d8bebe; installed selections and receiver adoption remain separate. PRIOR 0.95.0 SOURCE/PUBLISHED — MINOR coherent successor for bounded read-only board-v2 inspection and gated organization guidance; publisher 37071597534 promoted exact source 3b5de3367f8647cea0cd9366b8cb11eddf53feae with all 16 protected-journal effects verified; installed qualification and four-target Board adoption remain pending. PRIOR 0.94.0 SOURCE/PUBLISHED — MINOR, Drivers removes the retired Python skill-helper implementations from both mirrored skill roots and the compatibility wrapper after supported callers moved to packaged F# commands; installed-package verification rejects reintroduction; includes protected native learning capture and export accumulated since 0.93.0; immutable coherent-set/v0.94.0 was promoted from source 337b6a1d53571b07ca8e1417e18e52546ad319a7 after exact both-feed readback; receiver adoption remains separate. PRIOR 0.93.0 SOURCE/PUBLISHED — MINOR, supported skill callers use packaged F# telemetry and preflight commands; includes protected native telemetry collection provenance accumulated since 0.92.0; immutable coherent release github:0.93.0 was promoted from source d53d5c4fa0a54894da87e96ae2999288fb280ea5 after protected both-feed readback; no receiver adoption is claimed. PRIOR 0.92.0 SOURCE/PUBLISHED — MINOR, additive bounded read-only `skill telemetry-config discover` for installed workflows; immutable coherent release github:0.92.0 was promoted from source eb0f73186a07daf26e0f7bb5d4c1ee2054a8adaf after exact both-feed readback; no receiver adoption is claimed. PRIOR 0.91.5 SOURCE PREPARED — FSharp.Core 10.1.401 and compatible telemetry/driver updates; package-version remains published 0.91.4 until both-feed promotion. PRIOR 0.91.4 SOURCE/PUBLISHED — coherent telemetry-capable set from f0b1bb8748cbb7b27aeaf7346b8690c82ed03343; PRIOR 0.89.0 SOURCE/PUBLISHED — MINOR, FS.GG.Drivers adds the content-addressed installed routine policy, helper and native-check closure; immutable coherent release github:0.89.0 was promoted from source 535970a06055dfcdbb96aad8726b4d7d981a5b72 after exact both-feed readback. PRIOR 0.88.0 SOURCE/PUBLISHED — MINOR, independently activated private telemetry, source-free scoped dashboard, durable receipt transport, release qualification, and intake-audit hardening. Immutable tags `coord-engine/v0.88.0` and `coherent-set/v0.88.0` resolve the accepted source d77fe195bc4e133ace8763c2158834410ca72bc0. PRIOR 0.87.0 SOURCE PREPARED — MINOR, prospective private SQLite telemetry, repository-owned Codex lifecycle observation, exact-head CI reconciliation, native outcomes, and derived whole-item budget inputs (UTEL-06.1–06.4, .github#3360–#3363). Published from exact source bffc370933ec4f35af2af4acf5f72b5888844365 and promoted after both-feed verification. PRIOR 0.86.1 SOURCE/PUBLISHED — PATCH, routed board drivers reserve the three-round fresh implementer/critic repair chain for strict items so admitted routine work remains reduced through repair (.github#3338); immutable coherent release github:0.86.1 is promoted from source ce6edfd8e3f569867e6809ca3933c6ae65769a1d with content sha256:ccea15d2acd633188f34bdaa9761137538dd834fafa43cda185dbf90c473307c. PRIOR 0.86.0 SOURCE/PUBLISHED — MINOR, reduced one-owner routine route; immutable coherent release github:0.86.0 is promoted from source beb3456ecb2c4b4cadb6bc8dc268598246449aaf with content sha256:01d0c921ab23b6807e1d6da1a9c623cd0cfb5a595bf790b51662746a0681b974. PRIOR 0.85.2 SOURCE/PUBLISHED — PATCH, guarded two-phase implementation landing accepts a missing closing keyword only under an exact typed positive acceptance-receipt obligation and fresh same-item authority, while terminal completion remains reserved for the canonically closing receipt PR (.github#3286); immutable coherent release github:0.85.2 is promoted from source e94f7da34e2c3792a2c532a4969123fd26fd601b with content sha256:3fb04e68d9b90dff5d37f3ad9d0533346cf753444effdb6de5721191557d58fa. PRIOR 0.85.1 SOURCE/PUBLISHED — PATCH, acceptance survives a forward-only, complete, path-disjoint base advance while changed candidates, conflicts, relevant overlap, and unverifiable equivalence remain fail-closed (.github#3274); immutable coherent release github:0.85.1 is promoted from source 503a07d24a6087c549bc47b5322d6f05cce2a6c5 with content sha256:f0f3706c755c767c9f761c993bb01f7a9c52c08cd74d504c1de7322aadaf471c. PRIOR 0.85.0 SOURCE/PUBLISHED — MINOR, human-authorized scope-bound synthetic lifecycle checkpoint with mandatory functional verification and strict post-anchor resumption (.github#3263); immutable coherent release github:0.85.0 is promoted from source 9307b85458b326019415f8bcf6a1d13d0139eb6a with content sha256:95892fd5d1765ec3020168f71b103a1849ae645e00de77f8fcb549ddbd510081. PRIOR 0.84.0 SOURCE/PUBLISHED — MINOR, durable content-addressed private telemetry receipts, automatic digest resolution, and separately reviewed non-counting legacy recovery (.github#3259); immutable coherent release github:0.84.0 is promoted from source 17f400d70db2cdd28efd8d7ce14327f1495411d2 with content sha256:ec226689bf12f9ede6aebab4f1f045cc1bcb24e0c8208a9fcae031387cf776d5. PRIOR 0.83.5 SOURCE/PUBLISHED — PATCH, roadmap acceptance recognizes native FS.GG.SDD.Artifacts/1.5.0 verify and ship stage schemas while retaining exact revision, work, and evidence identity (.github#3255); immutable coherent release github:0.83.5 is promoted from source 97666e7f0193b71fde5642d5950093490fbabbdb with content sha256:3519327ac384e1549a2fed7fc431f47047c63f335341ce3d8eaf8b1b63aa3a9a. PRIOR 0.83.4 SOURCE/PUBLISHED — PATCH, roadmap unit acceptance now permits a single immutable implementation/acceptance PR only under equal identities, derives the repository from applied unit authority, and proves exact one-commit canonical critique ancestry (.github#3251); immutable coherent release github:0.83.4 is promoted from source a3641ca0827187fa4ff693f627f5024dab4093b0 with content sha256:aea555a3e8a6acf9d319b42cf714b605067be23ce2c8b39647780db4a96930bf. PRIOR 0.83.3 SOURCE/PUBLISHED — PATCH, roadmap acceptance uses separately authorable structured-review and immutable-envelope identities and binds SDD observation to the current structured route work ID (.github#3247); immutable coherent release github:0.83.3 is promoted from source 5e4c23790c714b892b0c5efa25b515ae4eaf252e with content sha256:aa95e6038bd0630eb163b0001c2f5628bc0daf71d0da8170f9e6fb6e44697ec2. PRIOR 0.83.2 SOURCE/PUBLISHED — PATCH, live acceptance relies on independently regenerated ignored SDD artifacts while retaining exact-revision observation and canonical comparison (.github#3242); immutable coherent release github:0.83.2 is promoted from source 0697e72f0f5b0d6bcc9728da3589f71d24dde420 with content sha256:40072e5998da0476a0bb7ad177d5c68129268b120d2cf3a2d554dbc7490dc7ed. PRIOR 0.83.1 SOURCE/PUBLISHED — PATCH, ordered partial roadmap catalog acceptance (.github#3233); immutable coherent release github:0.83.1 is promoted from source 2237ab8282433234e0d1af3f4716ef099422e282 with content sha256:43f9d6a386ce2988e1825d0439642e2965c937ee264bec3dca107dcd78ee2c1d. PRIOR 0.83.0 SOURCE/PUBLISHED — MINOR, additive typed roadmap work-unit preparation and atomic acceptance transaction (.github#3210); immutable coherent release github:0.83.0 is promoted from source fe13bf08d82091a3d024583e0315c50d30c59376 with content sha256:0e0df10f52fdd68747739aa6083f7d5b34cdaffd35e6d16976bcfdfa1106ebaa. PRIOR 0.82.0 SOURCE/PUBLISHED — MINOR, deterministic qualification/evidence runner; immutable coherent release github:0.82.0 is promoted from source 3c53e4600110974bb1b22d3522a7d794fd24e3fd with content sha256:20cd31e6a90658237571d37874f6885789217db329ca613d4a5e819432223a0d. PRIOR 0.81.1 SOURCE/PUBLISHED — PATCH, publish-before-adopt completion; packed callers use compiled telemetry and compatibility helpers are removed. PRIOR 0.78.1 SOURCE/PUBLISHED — PATCH, stable. Documentation-only orchestration visualization design plus the auto-publish frontier repair; no engine wire change. PRIOR 0.78.0 SOURCE/PUBLISHED — MINOR, stable. Intake derives Class from the shared board vocabulary and recovers only enumerated legacy drafts after a partial create; the exact predecessor body and authoritative post-PATCH read gate receipt advancement. Packed filing skills remove the unprojectable capability example. package-version is 0.78.0 after immutable dual-feed promotion. PRIOR 0.77.0 SOURCE/PUBLISHED — MINOR. ADR-0079 makes one Accountable Delivery Owner the sole routine authorization boundary; packed pnext-item retains exact-head critique/repair/acceptance evidence under distinct phase identities but requires no external person, account, agent, or approval quorum. PRIOR 0.76.0 SOURCE/PUBLISHED — MINOR. The coherent Kit adds initialize-sdd-workspace as a new receiver-visible member; Drivers and Coord.Cli advance on the shared scalar with no engine wire change. PRIOR 0.75.5 SOURCE/PUBLISHED — PATCH, stable (.github#2983, source PR #2990, merge 34b1fd8b). Three compatible lifecycle repairs ship: successful completed post-merge runs classify correctly, completion provenance preserves the full GraphQL merge OID, and closed delivery reads authoritative issue Paths while retaining unread-versus-undeclared state. Protocol.fs has zero wire commits across the span. PRIOR 0.75.4 SOURCE/PUBLISHED — PATCH, stable (.github#2941, source PR #2967, merge 8d720471). Nine accumulated non-wire engine commits ship with corrected cumulative release notes; Protocol.fs has zero wire commits across the release span. PRIOR 0.75.3 SOURCE/PUBLISHED — PATCH, stable, source 264725f374e3f05da46d7c3089462076a1f9bf7a; the immutable release predates this correction and its embedded notes misdescribe the accumulated changes. PRIOR: 0.74.0 SOURCE/PUBLISHED — MINOR, stable (.github#2876, source PR #2879). Five pre-existing non-wire engine-path commits plus the release-preparation commit are shipped from d4458d8fdfff0c332c80d920202ab0230bd9de0f; Protocol.fs is unchanged across the release span. PRIOR: 0.71.0 SOURCE/PUBLISHED — MINOR, stable (.github#2813, source PR #2814). Forward recovery ships the live stable-predecessor authority from source 3890c8f6b20fcd2c1fdd5b2a9a5356877c217397 while poisoned 0.70.0 remains unpromoted. Previous coherent registry frontier: 0.68.0. PRIOR 0.68.0 SOURCE/PUBLISHED — MINOR, stable (.github#2794, source PR #2803). Four additive exhausted-review/forced-claim commits are shipped with zero Protocol.fs wire commits. Previous coherent registry frontier: 0.67.0. PRIOR 0.67.0 SOURCE/PUBLISHED — MINOR, stable (.github#2756, PR #2792). Durable bounded review-wait receipts and the ordinary full fresh-successor review route are additive receiver-visible semantics. Previous coherent registry frontier: 0.66.0. PRIOR 0.66.0 SOURCE/PUBLISHED — MINOR, stable (.github#2757, PR #2789). The packaged findings-and-filing contract adds the named `disclosed residual` terminal state: measured bound, caller-facing disclosure, executable red pin, and durable authorized decision are conjunctive; a #266 check that cannot fail is explicitly excluded. Previous coherent registry frontier: 0.65.0. PRIOR 0.61.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-observable legs, either of which carries the line on the criterion the 0.56.0, 0.57.0, 0.59.0 and 0.60.0 entries used (.github#2712, PR #2745, engine commit 73024dc3): the board gains a `Kind:` body-line sentinel with a CLOSED four-value vocabulary — work|anchor|register|directive — in the same grammar as `Paths:`/`Class:`/`Blocked on:`, and a row declaring a NON-`work` kind is EXEMPT FROM THE LIFECYCLE REDUCER ENTIRELY (no projected Status, no persisted watermark, no park, no promotion, no Done), which the scheduler reports through a NEW verdict `not-a-unit-of-work` naming the kind rather than the row's column; and `ready --json` plus the board reads gain two per-row fields, `kind` (null until an operator creates the field) and `commentCount` (observable REGISTER DEPTH, riding the existing board page query as a connection totalCount and selecting no nodes, so the board read costs what it did before). AN ABSENT `Kind:` LINE MEANS `work`, so every row that existed at 0.60.0 behaves exactly as it did — the opposite default from an absent `Class:` line, deliberately. THE WIRE SURFACE DID MOVE HERE, AND ADDITIVELY, which is the honest difference from the 0.59.0 and 0.60.0 entries and is measured rather than asserted: src/FS.GG.Coord.Core/Protocol.fs is 214 insertions/254 deletions across coord-engine/v0.60.0..v0.61.0, but classifying that diff line by line finds ZERO removed type/DU/let/member definitions and exactly ONE added case, `Schedulability.NotAUnitOfWork` — the churn is the projected rule PROSE, not surface removal, so this is a MINOR BY ADDITION and not a MAJOR. THE SPAN IS 32 commits, of which 15 touch the engine paths under `git rev-list --full-history` and only 12 under default history simplification; BOTH numbers are stated because the smaller one is what a reader gets by default, and .github#2743 — the row that ordered this cut — records exactly that merge-vs-squash sensitivity as a real gate defect. Cut under per-cut operator authorisation (.github#2743 Sequencing; the 0.60.0 authorisation explicitly did not extend forward). PRIOR 0.60.0 SOURCE/PUBLISHED — MINOR, stable. Two receiver-visible legs, either of which carries the line on the criterion the 0.56.0, 0.57.0 and 0.59.0 entries used (.github#2645, PR #2650, engine commit aea56a4a): `claim --json` reports differently — `statusWrite` gains a FIFTH value `withheld`, distinct from `failed` (asserts a mutation was sent) and `deferred` (promises `flush`), and `converged` now means agreement with the DERIVED destination rather than with the literal column `In progress` — and the packed kit retires a start-gate `jq` predicate asserting `.status == "In progress"` that receivers copy verbatim. THE WIRE SURFACE IS UNCHANGED and that is measured, not assumed: check-engine-freshness reported 0 of the 2 unreleased engine commits touching src/FS.GG.Coord.Core/Protocol.fs, so `withheld` is a new INHABITANT of an existing reported field, not a new verb, flag, help entry, render name, result name or exit code. Cut by .github#2409's MANUAL path (.github#2713) because nothing automatic can cut it: kit-auto-publish.py:99-100 refuses this candidate `candidate-not-next-patch` — 0.60.0 opens a NEW minor line against a 0.59.0 frontier, failing the first clause and short-circuiting before the sibling-tag block at :101 — which is the rail working by design (.github#2442), verified here by driving decide() over the live facts with a 0.59.1 control that clears that same rail. PRIOR 0.59.0 SOURCE/PUBLISHED — MINOR, stable. Five receiver-visible engine defect fixes (.github#2575/#2662/#2683/#2678/#2694) plus a new reviewer protocol boundary in the packed pnext-item skill (finding-packet contract + independent-review consolidation), which is the 0.57.0 entry's shape. The 290 lines of new .fsi surface are corroboration only: FS.GG.Coord.Core.Operation is IsPackable=false and unreferenced by the CLI, so it reaches no receiver, and Protocol.fs is byte-identical across the span (.github#2648, PR #2706, round-1 finding by critic heron-d444). This cut ABANDONS 0.58.1, whose three tags at a415652f published nothing on either feed (.github#2654); those tags are immutable and are deliberately left alone (.github#1772). PRIOR 0.58.0 — 0.58.1 was never published and must not be read as a prior. # HISTORICAL PACKAGE: 0.91.2, immutable coherent-set/v0.91.2 from source fc64f351a6c7733c3df6520ad1e1671bfcc1714b; content sha256:a3073f2b92d64048e1b8ee08e76263a1b5d6d56b6c75dd930505aa9eb3fcecd6. Publisher run 35506239965 and protected journal fsgg/v2/journal/release/utel-rel-03 verified all three members on both feeds and promotion. Manifest SHA-256 1f98d1f970810ecd357252663ad0582c97b0dd42008bb3b55b9b585bfa4f4cfa; stable-channel SHA-256 317ff8d08f484ecec5063ce7495da63bc33b18e40707ecb0ae9c46bd158d6984. PRIOR 0.91.1 from source 05e3feadcce3d546a05b2a4e0b1780e8a642a228; content sha256:3a87727ed7178b79e00f904457f19abcff1e7b00b0a93cc593568735eb28aefc. Both feeds verified all three members; producer CLI 0.91.1 adopted on both dev containers. PRIOR 0.91.0 from source 85c356b2c44cfea4b83659b14b6946d64bbd9a22; content sha256:c8b03938aa6357f696ff9ca257315e02f79e0a23ef8b6d87d37430139f2e600c. Prior package-version: 0.90.0. package-version: "0.111.0" # PUBLISHED coherent-set/v0.111.0: candidate39522441055/a1/artifact12312227013; third ordinary invocation39529077063/a1 completed all16effects/gen33, release419029192 accepted2026-10-21. Both-feed receipts, seven assets and all three public producer payloads independently matched. Original failure39524000489 and checkpoint39524948262 retained; no resend/repack. PRIOR: PUBLISHED coherent-set/v0.110.0: original39423302862/a1/artifact12263934322, final39438076230/a1, all16effects/gen33, release418406702 accepted2026-10-20T14:35:18Z. All7native assets and3public producer payloads match; maintained hosted GitHub-feed verification is retained beside the direct user CLI read403. Canonical source pin is not installed/native acceptance (#4731/#4730). PRIOR: PUBLISHED coherent-set/v0.109.0: original39302112260/artifact12210674422, final39317658813, all16effects/final33 and independent native7assets/3public payload readback accepted2026-10-19T20:36:20Z. Installed/native consumer acceptance remains separately owned #4712. PRIOR: PUBLISHED coherent-set/v0.108.0 at f984a3619129c5e9ab68e1291fd080ef77ef9337; independent full-chain/public7asset/3NuGetpayload acceptance2026-10-19T10:56:28Z. PRIOR PUBLISHED coherent-set/v0.107.0 at source75ab98dd; #4682 accepted original39170373582/a1 complete. PRIOR PUBLISHED: coherent-set/v0.106.0, release 416441527, original candidate 2e42faaa994367b9f50be87439e8fd973ad21501/content sha256:351a435c1f162f3ff8ca8e6722d58b34b193b44744a6a207f9bb57f015f8204d. Original 39127872315 remains incomplete generation 16; separately admitted 39130246438 settled Drivers without resend and verified all 16 effects at final generation 33. Both feeds match original normalized payloads; signed NuGet archives differ. Later global selector106 observation has no pre-entry preimage/change timing; whole runtime/discovery, board binding, fleet and receiver acceptance remain separate. PRIOR immutable 0.105.0: PUBLISHED: coherent-set/v0.105.0, candidate e54a59885580c894c8fbc67b0b27af3571ea9883, initial39096861301 stopped at generation14; separately selected39098313280/a1 completed all16/final33 without resending the settled Kit intent, release416229635 promoted/latest; final coherent channel and installed82-file correspondence remain bounded to their original evidence. PRIOR immutable0.104.0: coherent-set/v0.104.0, release416097241, candidate912eba8bbd707dabcbc5011d508c479109010b71/content sha256:86a776fe591b5b98bf189fdf2c47148b1b417551c44f091146a1d6ce1acfd987; continuation39080633461/a1 at controller5a2d13d0 accepted final journal22 generation34/all16 effects. Original39073648848/a1 remains an incomplete checkpoint; original .103 Unknown and all inherited reservations remain. Installed update and private-caller/consumer acceptance are separate. PRIOR 0.102: PUBLISHED: fixed candidate6e9be17bacd288ece103b67ecd5842d37a9c8e50, content sha256:fc16321e011ea616648ccc1dafda00bfc06fa34210fd49ddb008bb56c9ceecf5; original publisher38133108945/a1, continuation38156868958/a1 accepted generation33/all16effects including both feeds and promotion. Installed selector custody and C3 provider acceptance remain separate. PRIOR Published coherent-set/v0.101.0, release408709919; candidate content sha256:e8ed439047f663dfcb34aba1152ffd4c6966a0c3a27be0ebb48eebcf47e26996, source79051e56b025dadfc6fcaabd58b79e33f2854928; all three normalized candidate payloads match both feeds. No installed-adoption or current-channel claim. PRIOR Published coherent-set/v0.100.0, source3ed8ad419a64253ca6f665e9779e5e4d110f50a5; original manifest0b31c416 and both-feed normalized payloads verified, fresh tag/release/feed metadata confirmed2026-10-09. Original operation custody remains unknown. PRIOR Accepted coherent-set/v0.99.0 publisher37566865635, source64e95ebec1a8294e16edaafdb27e6aa96f32c6f7, release405346080; both-feed readbacks accepted by root. PRIOR Verified coherent-set/v0.98.0 publication 37434982959, journal utel-rel-15, producer 3d4f7e9c6337fb020e269e632653de0faeef6d72, content sha256:15a3bc4c133216cde77d1fef5b639d1842588a5754802eaa11b098e7b62c2a06. PRIOR Both-feed publication accepted for coherent-set/v0.97.1 at source 99ea75286f5c3cea2a261fef4e5b45cd70378185; exact-head hosted feed readback also confirms both feeds. PRIOR0.97.0 publication: run 37235030417; coherent-set/v0.97.0, release 403211100, content sha256:b78fd7bdff1251e32c07ffb181c31b8c2009e3174cfe305b0761f5ca8b4e245d. Prior 0.96.0 receipts remain immutable. package-tag: "coherent-set/v0.111.0" # Release419029192, immutable sourcebd60a97a422c8fc8ca0c17b2a9dea4e504b708d2; final manifest asset661069009 SHA2564a1ea7a5423995504013ae0cac88b0c177d8377f1d21dd34f6d8616ac1851f39. Postpublication metadata is newer source, not a rebuilt111artifact or new release. PRIOR: Release418406702, immutable source42cd9e7c8505f7cd72d5a22ad424a27af6d51458; release-manifest asset659550415 SHA256bcae24d71571ab7f0dc26abbbf00beb0abf12718b22e7060838990384b86911f. Original failed publication and gen14/gen16 checkpoints retained; no replay. PRIOR: Release417623644, immutable source0d85830e7329a2718ee57ff0f1a16e6c751a469c. Original partial journals/failures retained; no replay. PRIOR: Release417149016, candidate39233536189/artifact12178009778, original journal26 retained through failure39235248295/checkpoint39235800776 and complete forward39238215850. PRIOR Release416724931 at source75ab98dd28b1a818cc3986d595bf21e0fe691ec6. PRIOR coherent-set/v0.106.0: Exact candidate source 2e42faaa994367b9f50be87439e8fd973ad21501; release 416441527 promoted 2026-10-18T13:18:34Z. Prior coherent-set/v0.105.0 remains immutable. Prior coherent-set/v0.104.0, coherent-set/v0.102.0 and all earlier release identities remain immutable. @@ -998,9 +998,9 @@ contracts: surface: "the `fsgg-coord-engine` CLI verb surface (claim/take/batch/who/widen/set-paths/say/landable/done/release/flush/…) + its exit-code contract, emitted from src/FS.GG.Coord.Core/Protocol.fs; shipped as the FS.GG.Coord.Cli dotnet tool" consumers: [sdd, rendering, governance, templates, game, audio, net] # All SEVEN coordination-kit receivers (registry/repos.yml `receives: coordination-kit`). `scripts/fsgg-coord` resolves and execs this package, so every receiver is a real TOOL consumer edge. `.github` itself is not listed because it resolves the engine from source. - id: telemetry-host - version: "0.8.0" # PROSPECTIVE SOURCE ONLY under4707: accepted unassigned-usage projection/browser source4685, independent new package/tag/journal14 planning. Org-feed occupancy remains Unknown after native REST/v3 HTTP403; fresh authoritative absence is required before candidate/publication. Published0.7/journal13 remains unchanged; retained0.6/journal12 tag intent remains Unknown. Store14/receipt ABI unchanged; source qualification, publication and Home adoption remain separate. - package-version: "0.7.0" # PUBLISHED: original39148437514/a1, journal13 generation17/all8 verified, release416586994 telemetry-host/v0.7.0, exact source2e60210be1e04d52fe0735a56333b3e3aef42284. Candidate/release archive d59ecac7ef4d1cdc75cebdcb08624b73960309821def1cd83d2909dbda5de253; signed NuGet archive c24af6af3e35f67dc0eca1f0f7c82657a8c82adf3c62ea11a986b1deb6bb4460; common normalized producer payload f8ec077387cfbcefbae89f74781ba7bbcfce1ebc2e97f7c7dd43d7bdcddeda1b. Old0.6 journal12/gen2 remains Unknown; no resend. Home installation/enrollment/restart/restore remain unqualified. PRIOR immutable0.5.0: CURRENT: successful publisher 37567512069; both feeds retain normalized producer payload sha256:4e2762e159229b433a3779f1694c2f8786618c4b51d22df3332086ae8071c68d. GitHub archive sha256:bdc8d0e92ff3c3a218cf78c349186049222e7487e364be434709cee6eba2cddc; signed nuget.org archive sha256:03a0bed87cafee1776970d854d30b458c5e87d35424700e62cdcac94d84278d6. PRIOR immutable0.4.0: first-success publisher 37220419362; both feeds serve normalized producer payload sha256:d7e747cebd6f425d775177bc844d0b3d187a911ae4032e269b008c875a872240. GitHub release archive sha256:150f3e697e088a10170db4f2404fd4e73be856ccefc8d776c53076f55adce45a; nuget.org signed archive sha256:293e2ccdbc7a4aed2c56d72cf82a7f806d7671b549439463cd93164dad574f77. PRIOR immutable 0.3.0: producer payload sha256:5572aa61f284abc5a37a12aa88f99b5169c4379be2aa9959e46c9934532f2836; GitHub archive sha256:c7cbaa474fdcd0ba577f8577ec92bb381f032db7842f86ddb1b3fb050d8a97ad; signed nuget.org archive sha256:7ad2c30894cb3eafbf498e5d247034bc3167ee30dd07c8b09c6b4915657c598a. PRIOR immutable 0.2.1: GitHub Packages archive sha256:4847c15ab207a33556462873840ad4109cf1c1e16fd7a15d5fffae5a8162f589 and signed nuget.org archive sha256:681faeca9941aaeaaad29368f1ab4f1f3c4b0c581655b8a2d8054b6448adc6f2; normalized payload sha256:207843031c78c2711e85a2db14b46a83ec0da9fbd3ee0f144a736320f7e8c2c9. - package-tag: "telemetry-host/v0.7.0" # Accepted original39148437514/a1, exact three-asset nonlatest release416586994. Coherent latest remains0.106; accepted binding4 unchanged. Observed selector106 is not whole runtime/discovery qualification; prior selector and change timing Unknown. PRIOR immutable telemetry-host/v0.5.0: Promoted release 405350640; exact raw manifest sha256:38ef6cd52df01902545bc923662dc7b606b76ba72e066f109248b664cb2ef1c7 and publication-journal sha256:5363fe78311dbde1742088105a7f56dc5f48f51013cba2bf883b3a743b73c9ce. Canonical manifest sha256:94fed9c145cb437f7385ffb6d7cf3c83a57eeb7ffdc06904a9668057d83d6a7d matches protected journal utel-host-rel-11 head 57a3d1eac66d3e246d4e8de03988e0a35b7b3cb3, generation17/eight verified effects. PRIOR immutable0.4.0: tag telemetry-host/v0.4.0; Promoted three-asset release 403127331; exact raw manifest sha256:144e5aa3d382b8bfc6ddcac76ed583c23ebe8fbb6744f844a94fa5347819d3f0 and publication-journal asset sha256:c2409342cd3448325fb1dc3dff53b6c2e3783c7634b75101834049b86aa11731. Protected journal head 203ba60f7df146743d4a7373a52f55fc6c22858e retains 17 generations and eight verified effects. PRIOR immutable 0.3.0: release 401538149, manifest sha256:7d61b4888d08299b5578df2e3e283dee88b5acabafa53490b4ba8d00e6676704, journal sha256:ec63822c627cfad490f9eea731257ac531c9ac3bd681f4790b9489dcfc8470ce. PRIOR immutable 0.2.1: publisher 36739270730, manifest sha256:f16546855d4ce60060f762b6f7bed715cc115f9ef97cd7b55dad5294b2ea0816 and journal sha256:bce45f3f4c0701031863c6b1eb398a99982b152f585467cb2e7b06c00987c58e. + version: "0.8.0" # Accepted original Host0.8 publication: publisher39580298871 plus readonly39591087147; both feeds and all eight journal/promote assertions accepted. Full4707/Home adoption remains open. PRIOR source qualification: PROSPECTIVE SOURCE ONLY under4707: accepted unassigned-usage projection/browser source4685, independent new package/tag/journal14 planning. Org-feed occupancy remains Unknown after native REST/v3 HTTP403; fresh authoritative absence is required before candidate/publication. Published0.7/journal13 remains unchanged; retained0.6/journal12 tag intent remains Unknown. Store14/receipt ABI unchanged; source qualification, publication and Home adoption remain separate. + package-version: "0.8.0" # Accepted original https://github.com/FS-GG/.github/actions/runs/39580298871 with independent readonly https://github.com/FS-GG/.github/actions/runs/39591087147; no republish. PRIOR immutable0.7.0: PUBLISHED: original39148437514/a1, journal13 generation17/all8 verified, release416586994 telemetry-host/v0.7.0, exact source2e60210be1e04d52fe0735a56333b3e3aef42284. Candidate/release archive d59ecac7ef4d1cdc75cebdcb08624b73960309821def1cd83d2909dbda5de253; signed NuGet archive c24af6af3e35f67dc0eca1f0f7c82657a8c82adf3c62ea11a986b1deb6bb4460; common normalized producer payload f8ec077387cfbcefbae89f74781ba7bbcfce1ebc2e97f7c7dd43d7bdcddeda1b. Old0.6 journal12/gen2 remains Unknown; no resend. Home installation/enrollment/restart/restore remain unqualified. PRIOR immutable0.5.0: CURRENT: successful publisher 37567512069; both feeds retain normalized producer payload sha256:4e2762e159229b433a3779f1694c2f8786618c4b51d22df3332086ae8071c68d. GitHub archive sha256:bdc8d0e92ff3c3a218cf78c349186049222e7487e364be434709cee6eba2cddc; signed nuget.org archive sha256:03a0bed87cafee1776970d854d30b458c5e87d35424700e62cdcac94d84278d6. PRIOR immutable0.4.0: first-success publisher 37220419362; both feeds serve normalized producer payload sha256:d7e747cebd6f425d775177bc844d0b3d187a911ae4032e269b008c875a872240. GitHub release archive sha256:150f3e697e088a10170db4f2404fd4e73be856ccefc8d776c53076f55adce45a; nuget.org signed archive sha256:293e2ccdbc7a4aed2c56d72cf82a7f806d7671b549439463cd93164dad574f77. PRIOR immutable 0.3.0: producer payload sha256:5572aa61f284abc5a37a12aa88f99b5169c4379be2aa9959e46c9934532f2836; GitHub archive sha256:c7cbaa474fdcd0ba577f8577ec92bb381f032db7842f86ddb1b3fb050d8a97ad; signed nuget.org archive sha256:7ad2c30894cb3eafbf498e5d247034bc3167ee30dd07c8b09c6b4915657c598a. PRIOR immutable 0.2.1: GitHub Packages archive sha256:4847c15ab207a33556462873840ad4109cf1c1e16fd7a15d5fffae5a8162f589 and signed nuget.org archive sha256:681faeca9941aaeaaad29368f1ab4f1f3c4b0c581655b8a2d8054b6448adc6f2; normalized payload sha256:207843031c78c2711e85a2db14b46a83ec0da9fbd3ee0f144a736320f7e8c2c9. + package-tag: "telemetry-host/v0.8.0" # Original Host0.8 publication accepted; source/publication/Home acceptance remain distinct. PRIOR immutable telemetry-host/v0.7.0: Accepted original39148437514/a1, exact three-asset nonlatest release416586994. Coherent latest remains0.106; accepted binding4 unchanged. Observed selector106 is not whole runtime/discovery qualification; prior selector and change timing Unknown. PRIOR immutable telemetry-host/v0.5.0: Promoted release 405350640; exact raw manifest sha256:38ef6cd52df01902545bc923662dc7b606b76ba72e066f109248b664cb2ef1c7 and publication-journal sha256:5363fe78311dbde1742088105a7f56dc5f48f51013cba2bf883b3a743b73c9ce. Canonical manifest sha256:94fed9c145cb437f7385ffb6d7cf3c83a57eeb7ffdc06904a9668057d83d6a7d matches protected journal utel-host-rel-11 head 57a3d1eac66d3e246d4e8de03988e0a35b7b3cb3, generation17/eight verified effects. PRIOR immutable0.4.0: tag telemetry-host/v0.4.0; Promoted three-asset release 403127331; exact raw manifest sha256:144e5aa3d382b8bfc6ddcac76ed583c23ebe8fbb6744f844a94fa5347819d3f0 and publication-journal asset sha256:c2409342cd3448325fb1dc3dff53b6c2e3783c7634b75101834049b86aa11731. Protected journal head 203ba60f7df146743d4a7373a52f55fc6c22858e retains 17 generations and eight verified effects. PRIOR immutable 0.3.0: release 401538149, manifest sha256:7d61b4888d08299b5578df2e3e283dee88b5acabafa53490b4ba8d00e6676704, journal sha256:ec63822c627cfad490f9eea731257ac531c9ac3bd681f4790b9489dcfc8470ce. PRIOR immutable 0.2.1: publisher 36739270730, manifest sha256:f16546855d4ce60060f762b6f7bed715cc115f9ef97cd7b55dad5294b2ea0816 and journal sha256:bce45f3f4c0701031863c6b1eb398a99982b152f585467cb2e7b06c00987c58e. owner: github surface: "optional Linux x64 FS.GG.Telemetry.Host dotnet tool — authenticated workspace-scoped ingestion, private dashboard, protected native capture and bounded learning export; independently versioned from the github coordination coherent set" consumers: [] # DELIBERATELY EMPTY: operators install this optional service; no repository in the contract graph restores it. diff --git a/registry/driver-skill-manifest.json b/registry/driver-skill-manifest.json index 5e42e64d3..b5eb00e0d 100644 --- a/registry/driver-skill-manifest.json +++ b/registry/driver-skill-manifest.json @@ -1884,12 +1884,12 @@ { "id": "continue-from-handoff", "scope": "driver", - "sha256": "e9df86dc6701b832124db195323f0374c1ab10581ee21d143e78d545bbfabf14", - "tree-sha256": "8ba4aa8fd813e4c79426f3478316cbb97fc713ffdca96ec6020157423a69d11d", + "sha256": "ee06790ca7a7238d401d61a2dc50ec214ce40a21193e694b60df2ec9bfd66939", + "tree-sha256": "c1e28f18739d60adb0e98806f9c3c8a76803c5af9549f7176375eace59dd86a3", "files": [ { "path": "SKILL.md", - "sha256": "e9df86dc6701b832124db195323f0374c1ab10581ee21d143e78d545bbfabf14", + "sha256": "ee06790ca7a7238d401d61a2dc50ec214ce40a21193e694b60df2ec9bfd66939", "executable": false }, { @@ -1964,12 +1964,12 @@ { "id": "work-programme", "scope": "driver", - "sha256": "6c2dea9125b8438cc9227f66f85dcc0da3240308606d5165ebdb9f7e0cd0f497", - "tree-sha256": "a378ab52aeceabc2ad2ea34170d84c1160c1debc114d50b96f217f719da9cdf6", + "sha256": "c937a9d53215a27fcae1e6cca9dd52df20e3f3ff4754473bccb676149fc82b9e", + "tree-sha256": "e91692af733678a0c9f6c4e4b22a577bef9d20571aa8204e8c2b1d2cd3d41dc5", "files": [ { "path": "SKILL.md", - "sha256": "6c2dea9125b8438cc9227f66f85dcc0da3240308606d5165ebdb9f7e0cd0f497", + "sha256": "c937a9d53215a27fcae1e6cca9dd52df20e3f3ff4754473bccb676149fc82b9e", "executable": false }, { @@ -2034,12 +2034,12 @@ { "id": "work-board", "scope": "driver", - "sha256": "dea7453e9a11489daf84515a87e68e10fe6ef85683707f00d318c7c1e53fe195", - "tree-sha256": "6533248ab83f1ccc8ec7e80f049b1a9c5b231f6b4308d570604c51fcad6701ce", + "sha256": "169945b2d619a46040e1dd68109e7f151832a72fcd53280ad540339807c65007", + "tree-sha256": "f54278d724b1108a5b07f5bc6f45a52b0383efb1fd75ff580ab8c6502593c0c3", "files": [ { "path": "SKILL.md", - "sha256": "dea7453e9a11489daf84515a87e68e10fe6ef85683707f00d318c7c1e53fe195", + "sha256": "169945b2d619a46040e1dd68109e7f151832a72fcd53280ad540339807c65007", "executable": false }, { @@ -2194,12 +2194,12 @@ { "id": "padd-item", "scope": "driver", - "sha256": "c0d21011b13180659e47a6fad9d8424369b474ba7c1e51208092d43dd72c1b57", - "tree-sha256": "53f22d1f83e3c286827544c9ddef6bf27056afbe12e15e03a9f54aaf9fd22283", + "sha256": "69d97af5d64e0290c95f72a309757ebb5ef316b483c103c3bd4be513d5e6e0d2", + "tree-sha256": "67db5f194ecf3d5d1d5e57379353fb85c50c050861c402ec82cb0910b6e526e4", "files": [ { "path": "SKILL.md", - "sha256": "c0d21011b13180659e47a6fad9d8424369b474ba7c1e51208092d43dd72c1b57", + "sha256": "69d97af5d64e0290c95f72a309757ebb5ef316b483c103c3bd4be513d5e6e0d2", "executable": false }, { @@ -2209,7 +2209,7 @@ }, { "path": "references/legacy-product-intake.md", - "sha256": "84a8f2e2f9ef65f7bb5d94babe10ded72a316c58ae3b5a19f69c8f2420571d61", + "sha256": "32c96a549c4ebe881dbfc647790aeda91160012162323a7e56e6a42eb7b0193b", "executable": false } ], @@ -2339,17 +2339,17 @@ { "id": "cut-nuget-release", "scope": "operator", - "sha256": "098f2cc7f04d7fffd31a27c53b916fc9135bf7f15e40e51d5c8dc3b78875104c", - "tree-sha256": "a3a0e6eea72852dd0e8771633b7cc4f293b37fcaee90a5b111eea91aba244cdd", + "sha256": "65c5f8f9e6c7ac1f72631c794961eaf19499993b58419e2124851ea72bfe3ec4", + "tree-sha256": "c9b127ff2d0961918e81c090fd82b9de30b78b9f702e1d011616b4d1cdabeeab", "files": [ { "path": "SKILL.md", - "sha256": "098f2cc7f04d7fffd31a27c53b916fc9135bf7f15e40e51d5c8dc3b78875104c", + "sha256": "65c5f8f9e6c7ac1f72631c794961eaf19499993b58419e2124851ea72bfe3ec4", "executable": false }, { "path": "agents/openai.yaml", - "sha256": "b2028a180680809e37f9fceb2d1e11f09df69f1def808e1dbe7997f5743fc12d", + "sha256": "8f3adb05ae2a0c919f942bdbf601fec1a0b1b08caa2162f02cb2d828a03e06b3", "executable": false } ], @@ -2414,12 +2414,12 @@ { "id": "publishing-and-deployment", "scope": "operator", - "sha256": "81fcffc165aadc4ca1c78191593648ae46c552f4328e469833b513c4814b120d", - "tree-sha256": "60295807861b72beede12304feb16a371100a20462b4bb43a0612c6939fb7946", + "sha256": "578384bd24e34308b02a74ffb2490e7dfeb3d324fc58154fb4a34c772616524c", + "tree-sha256": "fd6ea4fbaa60fc98b653fe18eaf4f4d490189fab6d25f60ee8b8236017879eb8", "files": [ { "path": "SKILL.md", - "sha256": "81fcffc165aadc4ca1c78191593648ae46c552f4328e469833b513c4814b120d", + "sha256": "578384bd24e34308b02a74ffb2490e7dfeb3d324fc58154fb4a34c772616524c", "executable": false }, { diff --git a/registry/repos.lock b/registry/repos.lock index ceb7245fd..b2653e528 100644 --- a/registry/repos.lock +++ b/registry/repos.lock @@ -6,11 +6,11 @@ # `repos-registry-selftest` fails on any diff, so nobody AUTHORS it — a collision here is a REBASE, # not a decision. DO NOT reserve it in a `Paths:` touch-set (#527); regenerate it and name it as # expected drift in the PR. -f34cb94d1f600e7cbae8cb9f8730bbdc1e02c9e54f2fc7a3c6a04ce090f3aee0 .claude/skills/check-board +e196e822e7cf1cf07c77b4906e8fb18b7e6d78e81a2da1202ab0630ceee0d818 .claude/skills/check-board ef09573ed99cd3a83edc674438e8f7d76ac31f925c2e24c41c3962796beaaa0a .claude/skills/cross-repo-coordination 7c19d93267d4033e6ce2c2ea95c3d277c4f2d50d57426790e9a06149eacfd634 .claude/skills/initialize-sdd-workspace ecdfd164c4e8ec45272f7d71e0131a87fd3e3d7ef57356a07ec420e4fad60eaa .claude/skills/intra-repo-parallel-work -710564bd37cf630ab1d05f336b36ba1f916fee1762cf53d14e93c89732cd3ef3 .claude/skills/pnext-item +e514e0af7661d06b4cbf1c36e90f32e944f18ba51a81e37393f7f318819f7cb4 .claude/skills/pnext-item a0689f0ba8cd0180fd1ca60a63bba55e93513732b36e099c541847336ddb3ccf scripts/fsgg-coord e1f63cda5b499f4fdd4396626c0bac013c49019daf182336df8c7513d24918ba scripts/fsgg-coord-report 1f2a70607268d549aa59c56e612e654e52021e9b7015e26c8fdaa97a4a3a869e scripts/lib/args.sh diff --git a/registry/skills.CHANGELOG.md b/registry/skills.CHANGELOG.md index 2b41dbda4..f19923328 100644 --- a/registry/skills.CHANGELOG.md +++ b/registry/skills.CHANGELOG.md @@ -31,6 +31,14 @@ advances the pin to that CLI. ## Entries +- **2026-10-21** — CANONICAL CURRENT ROUTES (.github; #4789): + +Retire live sealed release/legacy intake recipes; make inspection read-only and +scope FS-GG delivery/recovery authority explicitly. Reconcile affected existing +hub-owned source digests and complete-directory manifests through maintained +preparation, including the independently accepted Host0.8 published inventory. Source-only112 does not establish package or selected SDD/Codex adoption; +other framework consumers and operator withholding retain their explicit scope. + - **2026-10-21** — Postpublication 111 metadata and curated source lesson (Programme/root; #4743/#4730): reconcile only generated publishing-and-deployment operator inventory and Atlas source/seed digests through the maintained manifest route. The new coherent-source-consumer-closure lesson records already delivered source controls. Current source metadata may differ from immutable published 111 / source bd60; no new seed installation, operational instruction change, package build or release is selected. - **2026-10-21** — SOURCE111 READINESS (Programme/root; .github#4743): reconcile only the maintained `publishing-and-deployment` operator inventory projection and its existing manifest/registry digest after coherent source advances111 while published110 remains. No skill population/schema or materialization change; packaged work-board changes were already protected by4751. Source is neither publication nor installed instruction/caller adoption. diff --git a/registry/skills.delivery-channels.yml b/registry/skills.delivery-channels.yml index 1805fc00c..8b5fa89da 100644 --- a/registry/skills.delivery-channels.yml +++ b/registry/skills.delivery-channels.yml @@ -103,8 +103,7 @@ classes: reason: >- ADR-0057 operator skills are `.github`-authored and materialized NOWHERE — they run only in an operator checkout where every repository is a sibling. `stage-drivers.py`'s - `DELIVERED_SCOPES = {"driver"}` carries no operator bytes into the package, and every one of - the seven rows declares `materializes-when: "false"`, so the catalog and the transport agree. + `DELIVERED_SCOPES = {"driver"}` carries no operator bytes into the package, and every operator row declares `materializes-when: "false"`, so the catalog and the transport agree. This is a deliberate non-delivery, not an undetected one, which is why it is `withheld` rather than `gap`. @@ -116,7 +115,7 @@ classes: channel: FS.GG.SDD SeededSkills.skillNames evidence: FS.GG.SDD/src/FS.GG.SDD.Commands/CommandWorkflow/SeededSkills.fs note: >- - A hard-coded in-code list of the 16 `fs-gg-sdd-*` process skills, whose own comment calls it + The in-code `fs-gg-sdd-*` process skill list, whose own comment calls it "the single in-code source of the set". It reads no registry, so it is not derived — but it IS a real, universal channel: the materializer that owns the skills is the same assembly that lists them, and `EHotwagner/S.I.R.` received all 16 through a non-rendering provider. Recorded diff --git a/registry/skills.yml b/registry/skills.yml index 72e2bb7cc..fed2e034a 100644 --- a/registry/skills.yml +++ b/registry/skills.yml @@ -348,19 +348,19 @@ skills: - { id: work-roadmap, scope: driver, owner: .github, source: .github/.claude/skills/work-roadmap/SKILL.md, sha256: 48ee31933a1eb4114cf177bda85d8b7bb5bf0310b396b3915ebb85c214ac3f2e, materializes-when: "always" } # Canonical coordinator recovery/routine closure (.github#4641); old programme is a redirect only. - { id: agent-handoff, scope: driver, owner: .github, source: .github/.claude/skills/agent-handoff/SKILL.md, sha256: 72fb44aaa4b5a4ee5b38e0cd07c7b4e9a7b0d2baf17b835dbe20eaaf046fd133, materializes-when: always } - - { id: continue-from-handoff, scope: driver, owner: .github, source: .github/.claude/skills/continue-from-handoff/SKILL.md, sha256: e9df86dc6701b832124db195323f0374c1ab10581ee21d143e78d545bbfabf14, materializes-when: always } + - { id: continue-from-handoff, scope: driver, owner: .github, source: .github/.claude/skills/continue-from-handoff/SKILL.md, sha256: ee06790ca7a7238d401d61a2dc50ec214ce40a21193e694b60df2ec9bfd66939, materializes-when: always } - { id: routine-decisions, scope: driver, owner: .github, source: .github/.claude/skills/routine-decisions/SKILL.md, sha256: 7e7aa6e73d158b9bab2f69c873da502180951289c728669d3bae0620698592f4, materializes-when: always } - { id: stop-with-handoff, scope: driver, owner: .github, source: .github/.claude/skills/stop-with-handoff/SKILL.md, sha256: 0405c82818f7640c23e675813eb5b8c876c03e1c05a94da288131b6246edae05, materializes-when: always } - - { id: work-programme, scope: driver, owner: .github, source: .github/.claude/skills/work-programme/SKILL.md, sha256: 6c2dea9125b8438cc9227f66f85dcc0da3240308606d5165ebdb9f7e0cd0f497, materializes-when: always } + - { id: work-programme, scope: driver, owner: .github, source: .github/.claude/skills/work-programme/SKILL.md, sha256: c937a9d53215a27fcae1e6cca9dd52df20e3f3ff4754473bccb676149fc82b9e, materializes-when: always } # work-board — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. - - { id: work-board, scope: driver, owner: .github, source: .github/.claude/skills/work-board/SKILL.md, sha256: dea7453e9a11489daf84515a87e68e10fe6ef85683707f00d318c7c1e53fe195, materializes-when: always } + - { id: work-board, scope: driver, owner: .github, source: .github/.claude/skills/work-board/SKILL.md, sha256: 169945b2d619a46040e1dd68109e7f151832a72fcd53280ad540339807c65007, materializes-when: always } # padd-item — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. - - { id: padd-item, scope: driver, owner: .github, source: .github/.claude/skills/padd-item/SKILL.md, sha256: c0d21011b13180659e47a6fad9d8424369b474ba7c1e51208092d43dd72c1b57, materializes-when: always } + - { id: padd-item, scope: driver, owner: .github, source: .github/.claude/skills/padd-item/SKILL.md, sha256: 69d97af5d64e0290c95f72a309757ebb5ef316b483c103c3bd4be513d5e6e0d2, materializes-when: always } # work-board-best — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. @@ -386,7 +386,7 @@ skills: # never-materialize behaviour rides the predicate. Schema growth ADR-0057 pays for (schemaVersion 2→3 # below), publish-before-flip, SDD first (ADR-0037). - { id: drive-board, scope: operator, owner: .github, source: .github/.claude/skills/drive-board/SKILL.md, sha256: 14ed3ce8e74df5a1014a013cb726a90a6e13241becce0bd9273831799a68e220, materializes-when: "false" } - - { id: cut-nuget-release, scope: operator, owner: .github, source: .github/.claude/skills/cut-nuget-release/SKILL.md, sha256: 098f2cc7f04d7fffd31a27c53b916fc9135bf7f15e40e51d5c8dc3b78875104c, materializes-when: "false" } + - { id: cut-nuget-release, scope: operator, owner: .github, source: .github/.claude/skills/cut-nuget-release/SKILL.md, sha256: 65c5f8f9e6c7ac1f72631c794961eaf19499993b58419e2124851ea72bfe3ec4, materializes-when: "false" } # p-add — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. @@ -398,7 +398,7 @@ skills: # publishing-and-deployment — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. - - { id: publishing-and-deployment,scope: operator,owner: .github, source: .github/.claude/skills/publishing-and-deployment/SKILL.md, sha256: 046b3b9f4d69f45925a4f26ef154c1a9dfc1ff47560bbc0f87ce957b0477f0a5, materializes-when: "false" } + - { id: publishing-and-deployment,scope: operator,owner: .github, source: .github/.claude/skills/publishing-and-deployment/SKILL.md, sha256: 578384bd24e34308b02a74ffb2490e7dfeb3d324fc58154fb4a34c772616524c, materializes-when: "false" } # drive-board-best — homed beside its owner+predicate siblings and reconciled verbatim from # .github's producer manifest by `--write` (.github#299/.github#1200). The position # and this annotation are generated; the row's bytes are the manifest's. diff --git a/scripts/NewSddWorkspace/NewSddWorkspace.fsproj b/scripts/NewSddWorkspace/NewSddWorkspace.fsproj index 178e9c1e7..c48069220 100644 --- a/scripts/NewSddWorkspace/NewSddWorkspace.fsproj +++ b/scripts/NewSddWorkspace/NewSddWorkspace.fsproj @@ -20,7 +20,7 @@ 0.21.0 - 0.21.0: expose the existing generic Python provider in the Wizard and forward the bindings descriptor bindingTarget key. Normal source uses coherent111; the independent release route reuses authenticated published coherent110 dependencies. Published Creator0.20 and its genuine108 dependency/effect identities remain immutable. Publication and installed successor adoption require their own acceptance. + 0.21.0: expose the existing generic Python provider in the Wizard and forward the bindings descriptor bindingTarget key. Normal source uses coherent112; the independent release route reuses authenticated published coherent110 dependencies. Published Creator0.20 and its genuine108 dependency/effect identities remain immutable. Publication and installed successor adoption require their own acceptance. new-sdd-workspace FS.GG workspace scaffolder — composes a selectable Standard or Typed SDD lifecycle, a runnable provider workspace, and an optional Governance overlay in one command, with a rich Spectre.Console progress UI. Orchestrates existing published machinery; no FS.GG.Templates checkout required. diff --git a/scripts/creator_source_qualification.py b/scripts/creator_source_qualification.py index b6c4bbbf9..444a7a279 100644 --- a/scripts/creator_source_qualification.py +++ b/scripts/creator_source_qualification.py @@ -1,6 +1,6 @@ """Closed Creator021 normal-source qualification; deliberately grants no release effects. -The normal Creator021 source composition is coherent111. Retained Creator020 source qualification +The normal Creator021 source composition is coherent112. Retained Creator020 source qualification and its separate genuine108 published-dependency mode keep their identities. Creator021 is normal-source only; neither source binding is an installed/publication receipt. """ @@ -16,7 +16,7 @@ class SourceQualificationBinding: SOURCE_020 = SourceQualificationBinding("FS.GG.NewSddWorkspace", "0.20.0", "new-sdd-workspace/v0.20.0") SOURCE_021 = SourceQualificationBinding("FS.GG.NewSddWorkspace", "0.21.0", "new-sdd-workspace/v0.21.0") SOURCE_020_COHERENT_VERSION = "0.110.0" -SOURCE_COHERENT_VERSION = "0.111.0" +SOURCE_COHERENT_VERSION = "0.112.0" def qualification_version(binding): diff --git a/scripts/release_successor_journal.py b/scripts/release_successor_journal.py index 32cd72493..3a30520bc 100644 --- a/scripts/release_successor_journal.py +++ b/scripts/release_successor_journal.py @@ -31,11 +31,11 @@ # One prospective root-selected source composition; no namespace allocation or effect authority. # Completed110/observer journal and frozen original cuts remain immutable. -CURRENT_RELEASE = {"version": "0.111.0", "predecessor": "0.110.0", - "logicalRef": "refs/heads/fsgg/v2/journal/release/coord111-resource-aware-20261021-01", - "directory": "state/releases/coord111-resource-aware-20261021-01", - "predecessorSource": "42cd9e7c8505f7cd72d5a22ad424a27af6d51458", - "predecessorContentId": "sha256:12c130cddf0a580334507cb821767ed1838884d897422f4515c3fbd6892224dc"} +CURRENT_RELEASE = {"version": "0.112.0", "predecessor": "0.111.0", + "logicalRef": "refs/heads/fsgg/v2/journal/release/coord112-skill-routing-20261021-01", + "directory": "state/releases/coord112-skill-routing-20261021-01", + "predecessorSource": "bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2", + "predecessorContentId": "sha256:ea0b66a325ef425510a362e189469c5c6e6936880f455898e78520076737298b"} diff --git a/scripts/telemetry-host-published-org-read.py b/scripts/telemetry-host-published-org-read.py index a502d41bf..843fda99c 100644 --- a/scripts/telemetry-host-published-org-read.py +++ b/scripts/telemetry-host-published-org-read.py @@ -39,7 +39,7 @@ PINS = {"telemetry-host-release.py": "b44d74c7f4fb1ab2bb6ce1e0ee00745351577879aede7743d24533b62a60a32c", "release-saga.py": "24bdfa2a4c1491ecc1ddf24f797a072372fdce14881d413d9301b739dc77501c", "fsgg_feed.py": "f7650429432417af72168c288cdee347b338328848870cb4f2f18d6b62d0733f"} -CHOICES = ("coherent-0111-absence", "host-080-org-artifact") +CHOICES = ("coherent-0112-absence", "host-080-org-artifact") FILES = {PACKAGE, "manifest.json", "publication-journal.json", "local-feed-observation.json", "native-before.json", "native-after.json", "observation.json"} diff --git a/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj b/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj index a85e4b671..5d53e0661 100644 --- a/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj +++ b/src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj @@ -130,10 +130,9 @@ bytes under 0.52.0 would make the same version identify different artifacts. Ado coherent set cut from corrected source. All three partial sets are recorded in `registry/dependencies.yml`. - 0.111.0 — Carry resource-aware work-board guidance through the coherent CLI/Kit/Drivers release. -Admit each operation from its actual CPU quota/demand, combined memory/headroom, storage/backing and write domains, transitive children and known/Unknown reservations. -Preserve determining source/ref stability through final retention; close attributed input/preflight facts and reconcile current native/owning-plan joins before invocation. -The CLI command/API surface is unchanged. Publication, physical caller/instruction adoption, useful local overlap and economic evidence retain their separate acceptance. + 0.112.0 — Carry current canonical skill routes and the selected SDD adoption contract through the coherent CLI/Kit/Drivers set. +Retire sealed release and legacy intake recipes; distinguish read-only inspection, scoped delivery, compatibility and current recovery authority. +The CLI command/API surface is unchanged. Source, genuine publication, selected SDD materialization and actual Codex discovery/mismatch acceptance remain separate; published111 and historical operation custody are unchanged. $(FsggStandingAdvisories) diff --git a/tests/new-sdd-workspace-successor/run.py b/tests/new-sdd-workspace-successor/run.py index cf975fe6c..c5c1d3cc5 100644 --- a/tests/new-sdd-workspace-successor/run.py +++ b/tests/new-sdd-workspace-successor/run.py @@ -611,9 +611,9 @@ def pack(selected): board_package_closure(package, 'a' * 40, source_root=root, release_binding=SOURCE_020) - # The selected021 source identity is normal111 only; retained020 above stays exact. + # The selected021 source identity is normal112 only; retained020 above stays exact. nuspec = nuspec.replace(b'0.20.0', b'0.21.0') - next_deps = json.loads(json.dumps(source_deps).replace('0.110.0', '0.111.0')) + next_deps = json.loads(json.dumps(source_deps).replace('0.110.0', '0.112.0')) for target in next_deps['targets'].values(): target['new-sdd-workspace/0.21.0'] = target.pop('new-sdd-workspace/0.20.0') next_members = {**members, 'new-sdd-workspace.deps.json': json.dumps(next_deps).encode()} @@ -621,7 +621,7 @@ def pack(selected): (output / name).write_bytes(body) pack(next_members) result = board_package_closure(package, 'a' * 40, source_root=root, release_binding=SOURCE_021) - self.assertEqual((result['version'], result['coherentVersion']), ('0.21.0', '0.111.0')) + self.assertEqual((result['version'], result['coherentVersion']), ('0.21.0', '0.112.0')) self.assertEqual(result['builtFilesCompared'], len(next_members)) self.assertEqual(result['mode'], 'source-only') self.assertIs(result['releaseEligible'], False) @@ -632,8 +632,8 @@ def pack(selected): forged = type(SOURCE_021)(SOURCE_021.package, SOURCE_021.version, SOURCE_021.tag) with self.assertRaisesRegex(ValueError, 'unknown Creator package binding'): board_package_closure(package, 'a' * 40, source_root=root, release_binding=forged) - for stale_version in ('0.110.0', '0.109.0', '0.108.0'): - stale_metadata = json.dumps(next_deps).replace('0.111.0', stale_version).encode() + for stale_version in ('0.111.0', '0.110.0', '0.109.0', '0.108.0'): + stale_metadata = json.dumps(next_deps).replace('0.112.0', stale_version).encode() (output / 'new-sdd-workspace.deps.json').write_bytes(stale_metadata) pack({**next_members, 'new-sdd-workspace.deps.json': stale_metadata}) with self.assertRaisesRegex(ValueError, 'current coherent CLI dependency metadata'): @@ -747,7 +747,7 @@ def test_source_cut_and_candidate_package_names_agree(self): props = ElementTree.parse(ROOT / 'Directory.Build.props') self.assertEqual(next(node.text for node in props.iter('FsggCoherentSetVersion')), SOURCE_COHERENT_VERSION) self.assertEqual(SOURCE_020_COHERENT_VERSION, '0.110.0') - self.assertEqual(SOURCE_COHERENT_VERSION, '0.111.0') + self.assertEqual(SOURCE_COHERENT_VERSION, '0.112.0') self.assertLess(candidate.index("creator-current-coord-dependencies.py preflight"), candidate.index("actions/setup-dotnet")) self.assertIn('creator-current-coord-dependencies.py preflight', candidate) diff --git a/tests/release-successor-candidate/run.py b/tests/release-successor-candidate/run.py index 89529937f..f498e8959 100644 --- a/tests/release-successor-candidate/run.py +++ b/tests/release-successor-candidate/run.py @@ -129,22 +129,22 @@ def test_prospective_0104_probe_requires_exact_0102_frontier_on_both_feeds(self) gate.check("0.104.0", "0.102.0", "read-token") def test_selected110_requires_exact109_on_all_six_feed_coordinates(self) -> None: - self.github_read.return_value = ["0.110.0"] - self.nuget_read.return_value = ["0.110.0"] - rows = gate.check("0.111.0", "0.110.0", "inert-token") + self.github_read.return_value = ["0.111.0"] + self.nuget_read.return_value = ["0.111.0"] + rows = gate.check("0.112.0", "0.111.0", "inert-token") self.assertEqual(len(rows), 6) for feed in (self.github_read, self.nuget_read): with self.subTest(feed=feed): - feed.return_value = ["0.110.0", "0.111.0"] + feed.return_value = ["0.111.0", "0.112.0"] with self.assertRaisesRegex(gate.GateError, "already exists"): - gate.check("0.111.0", "0.110.0", "inert-token") - feed.return_value = ["0.110.0"] + gate.check("0.112.0", "0.111.0", "inert-token") + feed.return_value = ["0.111.0"] self.nuget_read.return_value = ["0.108.0"] with self.assertRaisesRegex(gate.GateError, "not predecessor"): - gate.check("0.111.0", "0.110.0", "inert-token") + gate.check("0.112.0", "0.111.0", "inert-token") self.github_read.side_effect = gate.GateError("HTTP 403: occupancy Unknown") with self.assertRaisesRegex(gate.GateError, "occupancy Unknown"): - gate.check("0.111.0", "0.110.0", "inert-token") + gate.check("0.112.0", "0.111.0", "inert-token") def test_an_occupied_version_on_either_feed_refuses(self) -> None: for feed in (self.github_read, self.nuget_read): @@ -240,7 +240,7 @@ def test_prospective_feed_probe_has_only_main_read_permissions_and_no_release_ef self.assertIn('test "$(git ls-remote origin refs/heads/main | cut -f1)" = "$SOURCE_SHA"', workflow) self.assertIn("python3 tests/release-successor-candidate/run.py", workflow) self.assertIn("python3 scripts/check-release-candidate-uniqueness.py", workflow) - self.assertIn("--version 0.111.0 --predecessor 0.110.0", workflow) + self.assertIn("--version 0.112.0 --predecessor 0.111.0", workflow) for forbidden in ( "packages: write", "contents: write", "id-token:", "environment:", "secrets.", "release-successor-publish.py", "release-saga.py", "dotnet pack", @@ -264,8 +264,8 @@ def test_actual_declared_predecessor_command_joins_promoted110_and_current_bindi saga = runpy.run_path(str(ROOT / "scripts/release-saga.py")) workflow = (ROOT / ".github/workflows/release-successor-candidate.yml").read_text() # Genuine promoted110 channel identity; fixture loading makes no native observation. - receipt = {"version":"0.110.0", "sourceSha":"42cd9e7c8505f7cd72d5a22ad424a27af6d51458", - "contentId":"sha256:12c130cddf0a580334507cb821767ed1838884d897422f4515c3fbd6892224dc", + receipt = {"version":"0.111.0", "sourceSha":"bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2", + "contentId":"sha256:ea0b66a325ef425510a362e189469c5c6e6936880f455898e78520076737298b", "promotedAt":"2026-10-20T14:26:43.180517Z"} expected = {"version":CURRENT_RELEASE["predecessor"], "sourceSha":CURRENT_RELEASE["predecessorSource"], "contentId":CURRENT_RELEASE["predecessorContentId"]} @@ -288,28 +288,28 @@ def consume(declared, channel): with self.assertRaisesRegex(ValueError, "does not match tag source"): consume(workflow.replace("--tag-source "+receipt["sourceSha"], "--tag-source "+old_source), receipt) with self.assertRaisesRegex(ValueError, "does not match release tag"): - consume(workflow.replace("--release-tag coherent-set/v0.110.0", "--release-tag coherent-set/v0.109.0"), receipt) + consume(workflow.replace("--release-tag coherent-set/v0.111.0", "--release-tag coherent-set/v0.109.0"), receipt) with self.assertRaises(AssertionError): consume(workflow, {**receipt,"contentId":"sha256:a3ff6fd1f998e32a750efe25bbb4255c5bd9d9b28ff5b21af441194d44e128ce"}) def test_candidate_binds_the_next_version_and_exact_predecessor(self) -> None: workflow = (ROOT / ".github/workflows/release-successor-candidate.yml").read_text() - self.assertIn('test "$version" = 0.111.0', workflow) - self.assertIn("gh release download coherent-set/v0.110.0", workflow) + self.assertIn('test "$version" = 0.112.0', workflow) + self.assertIn("gh release download coherent-set/v0.111.0", workflow) from release_successor_journal import CURRENT_RELEASE self.assertIn("--tag-source " + CURRENT_RELEASE["predecessorSource"], workflow) - self.assertEqual(workflow.count("--predecessor 0.110.0"), 2) - self.assertIn("--release-tag coherent-set/v0.110.0", workflow) + self.assertEqual(workflow.count("--predecessor 0.111.0"), 2) + self.assertIn("--release-tag coherent-set/v0.111.0", workflow) for namespace in ("coherent-set", "kit", "drivers", "coord-engine"): - self.assertIn(f"refs/tags/{namespace}/v0.111.0", workflow) + self.assertIn(f"refs/tags/{namespace}/v0.112.0", workflow) for project in ("FS.GG.Coord.Cli", "FS.GG.Kit", "FS.GG.Drivers"): self.assertEqual(workflow.count(f"dotnet pack src/{project}/"), 1) initial=workflow.split(' - name: Verify the stable predecessor and unused package version',1)[1].split(' - name: Test the telemetry producer',1)[0] retention=workflow.split(' - name: Refuse a changed main or newly occupied version before retention',1)[1].split(' - uses: actions/upload-artifact',1)[0] - self.assertIn('releases/tags/coherent-set/v0.111.0',initial) + self.assertIn('releases/tags/coherent-set/v0.112.0',initial) self.assertIn('git ls-remote',initial) self.assertIn('refs/heads/main',retention) - self.assertIn('--predecessor 0.110.0',retention) + self.assertIn('--predecessor 0.111.0',retention) self.assertNotIn('releases/tags/',retention) self.assertNotIn('refs/tags/',retention) self.assertIn('timeout-minutes: 45',workflow) diff --git a/tests/release-successor-recovery/run.py b/tests/release-successor-recovery/run.py index 4de4c6989..83a6d7635 100644 --- a/tests/release-successor-recovery/run.py +++ b/tests/release-successor-recovery/run.py @@ -1609,18 +1609,18 @@ def test_primary_upload_uncertainty_survives_report_failure(self): class SelectedReleaseBindingTests(unittest.TestCase): - def test_current_default_has_111_110_and_selected_resource_identity(self): + def test_current_default_has_112_111_and_selected_skill_identity(self): args = types.SimpleNamespace(recovery_checkpoint=False, repeat_original_nuget_kit_intent=False, recover_original_runtime_intent=False) self.assertEqual(publisher.selected_release_binding(args), - ("0.111.0", "0.110.0", "refs/heads/fsgg/v2/journal/release/coord111-resource-aware-20261021-01")) + ("0.112.0", "0.111.0", "refs/heads/fsgg/v2/journal/release/coord112-skill-routing-20261021-01")) - def test_current_profile_binds_promoted110_and_cannot_claim_old_journals(self): + def test_current_profile_binds_promoted111_and_cannot_claim_old_journals(self): self.assertEqual(set(publisher.CURRENT_RELEASE), {'version','predecessor','logicalRef','directory','predecessorSource','predecessorContentId'}) - self.assertEqual(publisher.CURRENT_RELEASE['predecessorSource'],'42cd9e7c8505f7cd72d5a22ad424a27af6d51458') - self.assertEqual(publisher.CURRENT_RELEASE['predecessorContentId'],'sha256:12c130cddf0a580334507cb821767ed1838884d897422f4515c3fbd6892224dc') - self.assertEqual(publisher.CURRENT_RELEASE['directory'],'state/releases/coord111-resource-aware-20261021-01') - for suffix in ('utel-rel-23','utel-rel-24','utel-rel-25','utel-rel-26','utel-rel-27','coord110-observer-20261020-01'): + self.assertEqual(publisher.CURRENT_RELEASE['predecessorSource'],'bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2') + self.assertEqual(publisher.CURRENT_RELEASE['predecessorContentId'],'sha256:ea0b66a325ef425510a362e189469c5c6e6936880f455898e78520076737298b') + self.assertEqual(publisher.CURRENT_RELEASE['directory'],'state/releases/coord112-skill-routing-20261021-01') + for suffix in ('utel-rel-23','utel-rel-24','utel-rel-25','utel-rel-26','utel-rel-27','coord110-observer-20261020-01','coord111-resource-aware-20261021-01'): authority=MemoryAuthority() with self.subTest(prior=suffix),self.assertRaisesRegex(JournalRefused,'different owner or profile'): ProtectedReleaseJournal(authority,'refs/heads/fsgg/v2/journal/release/'+suffix, @@ -1631,7 +1631,7 @@ def test_current111_cannot_initialize_completed109_journal27(self): authority=MemoryAuthority() journal=ProtectedReleaseJournal(authority,'refs/heads/fsgg/v2/journal/release/utel-rel-27',main_directory=True) authority.calls.clear() - intent={'version':'0.111.0','sourceSha':'b'*40,'contentId':'sha256:'+'b'*64, + intent={'version':'0.112.0','sourceSha':'b'*40,'contentId':'sha256:'+'b'*64, 'candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} with self.assertRaisesRegex(JournalRefused,'different journal identity'): journal.initialize(intent) @@ -1641,7 +1641,17 @@ def test_current111_cannot_initialize_completed110_observer_journal(self): authority=MemoryAuthority() journal=ProtectedReleaseJournal(authority,'refs/heads/fsgg/v2/journal/release/coord110-observer-20261020-01',main_directory=True) authority.calls.clear() - intent={'version':'0.111.0','sourceSha':'b'*40,'contentId':'sha256:'+'b'*64, + intent={'version':'0.112.0','sourceSha':'b'*40,'contentId':'sha256:'+'b'*64, + 'candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} + with self.assertRaisesRegex(JournalRefused,'different journal identity'): + journal.initialize(intent) + self.assertFalse(any(method in {'post','patch'} for method,_ in authority.calls)) + + def test_current112_cannot_initialize_consumed111_journal(self): + authority=MemoryAuthority() + journal=ProtectedReleaseJournal(authority,'refs/heads/fsgg/v2/journal/release/coord111-resource-aware-20261021-01',main_directory=True) + authority.calls.clear() + intent={'version':'0.112.0','sourceSha':'b'*40,'contentId':'sha256:'+'b'*64, 'candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} with self.assertRaisesRegex(JournalRefused,'different journal identity'): journal.initialize(intent) @@ -2423,7 +2433,7 @@ def test_precredential_workflow_order_and_candidate_binding(self): self.assertLess(fence,workflow.index(name)) self.assertNotIn('disposition_json:',workflow) candidate = (ROOT/'.github/workflows/release-successor-candidate.yml').read_text() - self.assertIn('test "$version" = 0.111.0',candidate) + self.assertIn('test "$version" = 0.112.0',candidate) self.assertNotIn('-p:Version=',candidate) self.assertIn('name: release-successor-candidate-${{ github.sha }}-${{ github.run_id }}',candidate) self.assertIn('Separate evidence: never add a member to the exact seven-member publisher archive.',candidate) @@ -2434,8 +2444,8 @@ class LiteralForwardControls(SuspensionFixture): def context(self): if not hasattr(self,'_forward_base'):self._forward_base=copy.deepcopy(self.authority) self.authority=copy.deepcopy(self._forward_base) - self.install();self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'];self.authority.directory_suffix='coord111-resource-aware-20261021-01';self.authority.calls.clear() - candidate=manifest();candidate['descriptor'].update(version='0.111.0',previousStableVersion='0.110.0') + self.install();self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'];self.authority.directory_suffix='coord112-skill-routing-20261021-01';self.authority.calls.clear() + candidate=manifest();candidate['descriptor'].update(version='0.112.0',previousStableVersion='0.111.0') candidate['contentId']='sha256:'+hashlib.sha256(json.dumps(candidate['descriptor'],sort_keys=True,separators=(',',':')).encode()).hexdigest() counted=publisher.CountedAuthorityAPI(self.authority,ceiling=1500,quota_floor=1800);counted.admit_quota() shared=self.mod.ReleaseSuspension(counted);rows=report();native=MemoryPublisher() @@ -2452,7 +2462,7 @@ def visibility(effect): if observation.state=='matched' and observation.observed_digest==effect.target_digest:return 'potential' raise publisher.Refused('inert pending witness '+observation.state) provider.ordinary_visibility=visibility - intent={'contentId':candidate['contentId'],'sourceSha':'b'*40,'version':'0.111.0','candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} + intent={'contentId':candidate['contentId'],'sourceSha':'b'*40,'version':'0.112.0','candidateArchiveSha256':'c'*64,'operator':'EHotwagner'} publisher.prepare_release_journal(journal,counted,admission,provider,native,candidate,intent,'b'*40,'b'*40,False,lambda:None) journal.capture();ticks=[0];sleeps=[] def sleep(seconds):sleeps.append(seconds);ticks[0]+=seconds @@ -2520,7 +2530,7 @@ def get(path): if '/actions/runs/' in path:row['status']='cancelled' return row native.get=get - elif mode=='suspension':self.add_file('state/releases/coord111-resource-aware-20261021-01/release-state.json',canonical(journal._observed.state)+b' ') + elif mode=='suspension':self.add_file('state/releases/coord112-skill-routing-20261021-01/release-state.json',canonical(journal._observed.state)+b' ') else:next(iter(self.authority.controls.values()))['enforcement']='disabled' with self.assertRaises(RuntimeError):run(sleep=sleep) self.assertEqual(provider.dispatched,['tag']);self.assertEqual(sleeps,[5]) @@ -3531,20 +3541,20 @@ def prepare_caller(self, *, history=0, delays=0, target='channel-asset', ceiling self.add_file('state/releases/utel-rel-27/release-head.txt',self.promoted109_head) # Synthetic completed110 sibling uses the genuine promoted predecessor identity. # Fixture Git bytes/head remain inert; native completion is independently read. - self.promoted110_fixture=canonical({'schema':self.mod.SCHEMA,'version':'0.110.0', - 'sourceSha':'42cd9e7c8505f7cd72d5a22ad424a27af6d51458', - 'contentId':'sha256:12c130cddf0a580334507cb821767ed1838884d897422f4515c3fbd6892224dc', + self.promoted110_fixture=canonical({'schema':self.mod.SCHEMA,'version':'0.111.0', + 'sourceSha':'bd60a97a422c8fc8ca0c17b2a9dea4e504b708d2', + 'contentId':'sha256:ea0b66a325ef425510a362e189469c5c6e6936880f455898e78520076737298b', 'candidateArchiveSha256':'0'*64,'operator':'EHotwagner','generation':33, 'effects':{effect.identity:'verified' for effect in ordered_effects(manifest())}}) self.promoted110_head=b'0000000000000000000000000000000000000000\n' self.add_file('state/releases/coord110-observer-20261020-01/release-state.json',self.promoted110_fixture) self.add_file('state/releases/coord110-observer-20261020-01/release-head.txt',self.promoted110_head) - self.authority.directory_suffix='coord111-resource-aware-20261021-01';self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'] + self.authority.directory_suffix='coord112-skill-routing-20261021-01';self.authority.logical_ref=publisher.CURRENT_RELEASE['logicalRef'] for n in range(history):self.add_file('state/ordinary/cold-history.json',canonical({'generation':n})) - self.native=Literal104ProviderFixture(self.root,None,version="0.111.0") + self.native=Literal104ProviderFixture(self.root,None,version="0.112.0") stream=io.BytesIO() with zipfile.ZipFile(stream,'w') as archive: - for name in [*(f'{package}.0.111.0.nupkg' for package in PACKAGES), + for name in [*(f'{package}.0.112.0.nupkg' for package in PACKAGES), 'release-manifest.json','previous-stable-channel.json', 'standalone-telemetry-evidence.json','standalone-telemetry-runtime-evidence.json']: archive.writestr(name,(self.root/name).read_bytes()) @@ -3581,7 +3591,7 @@ def get(path,_original_get=original): if '/releases?' in path:return [] if hidden=='promote' and '/releases/tags/' in path:value['draft']=True if hidden and '/assets?per_page=100' in path: - name={**{f'archive-asset:{package}':f'{package}.0.111.0.nupkg' for package in PACKAGES}, + name={**{f'archive-asset:{package}':f'{package}.0.112.0.nupkg' for package in PACKAGES}, 'qualification-asset:evidence':'standalone-telemetry-evidence.json', 'qualification-asset:runtime':'standalone-telemetry-runtime-evidence.json', 'channel-asset':'stable-channel.json','manifest-asset':'release-manifest.json'}.get(hidden) @@ -3651,7 +3661,7 @@ def process(argv,**kwargs): return types.SimpleNamespace(returncode=0) if len(argv)>1 and argv[1].endswith('check-release-candidate-uniqueness.py'): self.local_ports.append('uniqueness-external-port') - self.assertEqual(argv[2:],['--version','0.111.0','--predecessor','0.110.0']) + self.assertEqual(argv[2:],['--version','0.112.0','--predecessor','0.111.0']) self.assertFalse(self.native.feeds);self.assertIsNone(self.native.release) return types.SimpleNamespace(returncode=0) self.local_ports.append('inert-nuget-send' if argv[:3]==['dotnet','nuget','push'] else 'saga:'+argv[2]) @@ -3848,7 +3858,7 @@ def get(path): return row self.native.get=get elif mode=='protection':next(iter(self.authority.controls.values()))['enforcement']='disabled' - else:self.external_file('state/releases/coord111-resource-aware-20261021-01/release-state.json',canonical(self.rows['lastObservedJournal'])+b' ') + else:self.external_file('state/releases/coord112-skill-routing-20261021-01/release-state.json',canonical(self.rows['lastObservedJournal'])+b' ') self.on_sleep=change with self.assertRaises(RuntimeError):self.invoke_caller() self.assertEqual(self.dispatches,['tag']) @@ -3942,7 +3952,7 @@ def prepare(effect): name='release-state.json' if mode=='state' else 'release-head.txt' expected=self.providers[0]._ordinary_expected_journal raw=expected[1]+b' ' if mode=='state' else ('e'*40+'\n').encode() - self.external_file('state/releases/coord111-resource-aware-20261021-01/'+name,raw) + self.external_file('state/releases/coord112-skill-routing-20261021-01/'+name,raw) self.on_prepare=prepare with self.assertRaises(RuntimeError):self.invoke_caller() self.assertIsNone(self.native.tag);self.assertEqual(self.publisher_ports.count('post'),0) diff --git a/tests/skill-quality/board-lifecycle.py b/tests/skill-quality/board-lifecycle.py index bf447ca07..3847a82c0 100644 --- a/tests/skill-quality/board-lifecycle.py +++ b/tests/skill-quality/board-lifecycle.py @@ -128,9 +128,8 @@ def mutate(root: Path, relative: str, before: str, after: str, expected: str) -> for variant in ("normal", "best"): mutate(tree, f".claude/agents/fsgg-worker-{variant}.md", "Load `.claude/skills/pnext-item/SKILL.md`", "First run `scripts/fsgg-coord whoami --mint`. Load `.claude/skills/pnext-item/SKILL.md`", "bypasses canonical executor") controls += 1 - # Retained qualified product instructions may contain their original transaction. Their mere - # existence cannot reactivate V1 for organization consumers or trigger blanket archive deletion. + # The retired appendix preserves its disposition without an executable transaction. legacy = tree / ".claude/skills/padd-item/references/legacy-product-intake.md" - assert "intake validate" in legacy.read_text() and "legacy-product target" in legacy.read_text() + assert "retired" in legacy.read_text().lower() and "scripts/fsgg-coord" not in legacy.read_text() assert not inspect(tree), inspect(tree) print(f"board-lifecycle: source routing closure passes; {controls} causal caller/endpoint controls refuse") diff --git a/tests/skill-quality/validated-intake-filing.py b/tests/skill-quality/validated-intake-filing.py index 4c36b6b08..3fd961748 100644 --- a/tests/skill-quality/validated-intake-filing.py +++ b/tests/skill-quality/validated-intake-filing.py @@ -18,7 +18,6 @@ SKILL_ROOTS = (Path(".claude/skills"), Path(".agents/skills")) SCOPED_SKILLS = ("work-board", "p-add", "padd-item", "check-board", "cross-repo-coordination", "pnext-item") LEGACY_RECIPES = ( - "padd-item/references/legacy-product-intake.md", "pnext-item/references/deep-detail.md", "cross-repo-coordination/references/deep-detail.md", ) @@ -83,6 +82,26 @@ def valid_validate_apply_order(actions: list[str]) -> bool: ) +def retired_intake_recipe(text: str) -> bool: + # A compatibility tombstone must not reintroduce an executable current recipe. + return bool(re.search(r"(?m)^\s*(?:command\s+)?scripts/fsgg-coord\s+", text)) + + +def retired_release_commands(text: str) -> bool: + workflow = r"(?:\.github/workflows/)?(?:release-saga-(?:prepare|promote)|release-(?:kit|drivers|coord-engine))\.yml\b" + shell = re.search(r"(?m)^\s*(?:command\s+)?gh\s+workflow\s+run\s+" + workflow, text) + # The original defect was an imperative prose recipe, not a shell command. + # Inspect each paragraph so an explicit sealed-history statement remains data. + for paragraph in re.split(r"\n\s*\n", text): + if not re.search(workflow, paragraph): + continue + if re.search(r"(?i)\b(?:do not|never|must not)\s+(?:dispatch|run|invoke)\b", paragraph): + continue + if re.search(r"(?i)\bdispatch\s+(?:the\s+)?`?" + workflow, paragraph): + return True + return bool(shell) + + def audit(root: Path) -> list[str]: errors: list[str] = [] for skill_root in SKILL_ROOTS: @@ -106,6 +125,13 @@ def audit(root: Path) -> list[str]: f"canonical native intake or qualified legacy validate/apply: {command}" ) + retired = resolved / "padd-item/references/legacy-product-intake.md" + if not retired.is_file() or retired_intake_recipe(retired.read_text()): + errors.append(f"{retired.relative_to(root)}: retired appendix must contain no executable legacy recipe") + cut = resolved / "cut-nuget-release/SKILL.md" + if not cut.is_file() or retired_release_commands(cut.read_text()): + errors.append(f"{cut.relative_to(root)}: sealed release workflow is executable through current entrypoint") + for recipe in LEGACY_RECIPES: path = resolved / recipe if not path.is_file(): @@ -149,6 +175,26 @@ def prove_negative_fixture() -> None: if valid_validate_apply_order(actions): raise Finding("negative fixture escaped: intake apply before validate was accepted") + if not retired_intake_recipe("scripts/fsgg-coord flush\n"): + raise Finding("retired appendix accepted queue-wide flush") + if not retired_release_commands("gh workflow run release-saga-prepare.yml\n"): + raise Finding("current release entrypoint accepted sealed prepare workflow") + if retired_intake_recipe("The legacy recipe is retired; no invocation is selected."): + raise Finding("non-executable retirement disposition was rejected") + original_recipe = """On exact merged `main`, dispatch `.github/workflows/release-saga-prepare.yml` with the fresh version +and source SHA. Require its Core/CLI/package gates to pass. + +Dispatch `.github/workflows/release-saga-promote.yml` only after all three journals exist. +""" + if not retired_release_commands(original_recipe): + raise Finding("original imperative sealed release recipe was accepted") + for history in ( + "Historical `.github/workflows/release-saga-prepare.yml` remains sealed; no operation is selected.", + "Do not dispatch `.github/workflows/release-saga-promote.yml`; retain original custody.", + ): + if retired_release_commands(history): + raise Finding("sealed historical release mention was rejected") + marked = """```sh # fsgg:intake-break-glass: intake is unavailable and the operator records the owed projection gh api -X POST repos/FS-GG/FS.GG.Game/issues -f title=emergency -f body=accountable @@ -174,7 +220,7 @@ def main() -> int: print(f"validated-intake-filing: {error}", file=sys.stderr) return 1 print( - "validated-intake-filing: OK — canonical native routing and legacy PRODUCT order verified; command-wrapped bypass and " + "validated-intake-filing: OK — canonical native routing, retired product appendix and retained legacy PRODUCT order verified; sealed release, queue replay, command-wrapped bypass and " "inverted validate/apply order rejected" ) return 0 diff --git a/tests/telemetry-host-published-org-read/run.py b/tests/telemetry-host-published-org-read/run.py index 46a510528..bf5a84a53 100644 --- a/tests/telemetry-host-published-org-read/run.py +++ b/tests/telemetry-host-published-org-read/run.py @@ -24,11 +24,11 @@ def workflow_contract(text): - required = ["default: coherent-0111-absence", "- coherent-0111-absence", "- host-080-org-artifact", + required = ["default: coherent-0112-absence", "- coherent-0112-absence", "- host-080-org-artifact", "contents: read\n packages: read", "cancel-in-progress: false", "timeout-minutes: 5", "persist-credentials: false", "python3 scripts/telemetry-host-published-org-read.py --check-selection", "python3 tests/release-successor-candidate/run.py", "python3 tests/telemetry-host-published-org-read/run.py", - "if: inputs.observation == 'coherent-0111-absence' || inputs.observation == ''", + "if: inputs.observation == 'coherent-0112-absence' || inputs.observation == ''", "if: inputs.observation == 'host-080-org-artifact'", "if: inputs.observation == 'host-080-org-artifact' && steps.host-org.outcome == 'success'", "name: telemetry-host080-org-read-${{ github.sha }}-${{ github.run_id }}", @@ -43,7 +43,7 @@ def workflow_contract(text): if forbidden in text: raise ValueError("workflow effect or bypass") default, host = text.split(" - name: Observe the published Host 0.8 org archive once", 1) - if "upload-artifact" in default or "--version 0.111.0 --predecessor 0.110.0" not in default: + if "upload-artifact" in default or "--version 0.112.0 --predecessor 0.111.0" not in default: raise ValueError("default coherent branch changed") if text.index("--check-selection") > text.index("python3 tests/"): raise ValueError("selection ordering") @@ -231,7 +231,7 @@ def test_strict_metadata_and_source_pin(self): def test_actual_workflow_and_causal_mutations(self): text=(ROOT/'.github/workflows/release-successor-feed-readiness.yml').read_text();workflow_contract(text) - replacements=[('packages: read','packages: write'),('default: coherent-0111-absence','default: host-080-org-artifact'), + replacements=[('packages: read','packages: write'),('default: coherent-0112-absence','default: host-080-org-artifact'), ('--check-selection','--unchecked'),(" && steps.host-org.outcome == 'success'",''), ('if-no-files-found: error','if-no-files-found: warn'),('tests/telemetry-host-published-org-read/run.py','other.py'), ("if: inputs.observation == 'host-080-org-artifact'\n",'if: always()\n')]