Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/skills/publishing-and-deployment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16
| `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.113.0` | `0.112.0` | `github:0.112.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` | `telemetry-host` | `0.9.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.22.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.3` | `0.19.3` | `templates:0.19.3` | 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 |
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/publishing-and-deployment/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Registry release inventory: 18 package-bearing contracts across 9 producers; 16
| `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.113.0` | `0.112.0` | `github:0.112.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` | `telemetry-host` | `0.9.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.22.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.3` | `0.19.3` | `templates:0.19.3` | 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 |
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/release-telemetry-host-successor-candidate.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name: release-telemetry-host-successor-candidate

# Published predecessor is immutable Host0.7.0 (utel-host-rel-13).
# Published predecessor is immutable Host0.8.0 (utel-host-rel-14).
# Prospective source coordinates only. Separately admitted invocation may establish
# feed absence in its mandatory first gate; no candidate work precedes that PASS.
# Root still supplies fresh tag/release/journal/protection and source admission.
# Independent Host 0.8.0 source and byte qualification only. This workflow has
# Independent Host 0.9.0 source and byte qualification only. This workflow has
# no package-feed, tag, release, journal, OIDC or promotion write capability.
on:
workflow_dispatch:
Expand All @@ -19,7 +19,7 @@ concurrency:

jobs:
candidate:
name: telemetry-host-080-candidate
name: telemetry-host-090-candidate
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
timeout-minutes: 45
Expand Down Expand Up @@ -54,14 +54,14 @@ 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.Telemetry.Host/FS.GG.Telemetry.Host.fsproj -getProperty:Version | tr -d '[:space:]')"
test "$version" = 0.8.0
test "$version" = 0.9.0
- name: Test passive Host HTTP authority before browser qualification
timeout-minutes: 5
run: |
set -euo pipefail
dotnet restore tests/FS.GG.Telemetry.Tests/FS.GG.Telemetry.Tests.fsproj --locked-mode
dotnet test tests/FS.GG.Telemetry.Tests/FS.GG.Telemetry.Tests.fsproj -c Release --no-restore --filter "FullyQualifiedName~HostPassiveReceiptTests|FullyQualifiedName~HostSchemaProfileTests|FullyQualifiedName~RemoteTelemetryTests.protected native collector resolves durable dispatch and replays retained envelope" --blame --logger "console;verbosity=normal" --logger "trx;LogFileName=host-passive.trx" --results-directory "$RUNNER_TEMP/host-passive"
python3 scripts/read-trx-count.py "$RUNNER_TEMP/host-passive/host-passive.trx" --minimum 4 --label "passive Host HTTP" --summary-file "$GITHUB_STEP_SUMMARY"
python3 scripts/read-trx-count.py "$RUNNER_TEMP/host-passive/host-passive.trx" --minimum 5 --label "passive Host HTTP" --summary-file "$GITHUB_STEP_SUMMARY"
- name: Retain passive Host HTTP diagnostics
if: ${{ always() && steps.read-first.outcome == 'success' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down Expand Up @@ -95,13 +95,13 @@ jobs:
mkdir -p artifacts/telemetry-host
dotnet pack src/FS.GG.Telemetry.Host/FS.GG.Telemetry.Host.fsproj -c Release --no-restore \
-p:RepositoryCommit="$SOURCE_SHA" -o artifacts/telemetry-host
package=artifacts/telemetry-host/FS.GG.Telemetry.Host.0.8.0.nupkg
package=artifacts/telemetry-host/FS.GG.Telemetry.Host.0.9.0.nupkg
manifest=artifacts/telemetry-host/manifest.json
test -f "$package"
python3 scripts/telemetry-host-release.py prepare --package "$package" \
--lock src/FS.GG.Telemetry.Host/packages.lock.json \
--assets src/FS.GG.Telemetry.Dashboard/Assets \
--source-sha "$SOURCE_SHA" --version 0.8.0 --tag telemetry-host/v0.8.0 \
--source-sha "$SOURCE_SHA" --version 0.9.0 --tag telemetry-host/v0.9.0 \
--output "$manifest"
python3 scripts/telemetry-host-release.py verify --manifest "$manifest" --package "$package"
bash tests/standalone-telemetry-host-package/run.sh "$package" artifacts/telemetry-host/package-evidence.json
Expand All @@ -115,7 +115,7 @@ jobs:
with:
name: telemetry-host-successor-candidate-${{ github.sha }}-${{ github.run_id }}
path: |
artifacts/telemetry-host/FS.GG.Telemetry.Host.0.8.0.nupkg
artifacts/telemetry-host/FS.GG.Telemetry.Host.0.9.0.nupkg
artifacts/telemetry-host/manifest.json
artifacts/telemetry-host/package-evidence.json
if-no-files-found: error
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ on:
required: true
type: string
continue_failed_original:
description: Retired Host 0.6 continuation flag; current Host 0.8 refuses true
description: Retired Host 0.6 continuation flag; current Host 0.9 refuses true
required: true
default: false
type: boolean
Expand All @@ -41,7 +41,7 @@ concurrency:

jobs:
publish:
name: telemetry-host-080-publisher
name: telemetry-host-090-publisher
if: github.ref == 'refs/heads/main' && github.actor == 'EHotwagner'
runs-on: ubuntu-latest
environment: release-successor
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/telemetry-host-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ on:
- "tests/standalone-telemetry-host-package/**"
- "tests/telemetry-host-release/**"
- "scripts/telemetry-host-release.py"
- "scripts/telemetry-host-published-org-read.py"
- "tests/telemetry-host-published-org-read/**"
- "scripts/telemetry-host-successor-*.py"
- "scripts/telemetry_host_successor_*.py"
- "scripts/release_successor_execution.py"
Expand Down Expand Up @@ -93,6 +95,8 @@ on:
- "tests/standalone-telemetry-host-package/**"
- "tests/telemetry-host-release/**"
- "scripts/telemetry-host-release.py"
- "scripts/telemetry-host-published-org-read.py"
- "tests/telemetry-host-published-org-read/**"
- "scripts/telemetry-host-successor-*.py"
- "scripts/telemetry_host_successor_*.py"
- "scripts/release_successor_execution.py"
Expand Down Expand Up @@ -167,6 +171,7 @@ jobs:
run: |
set -euo pipefail
python3 tests/telemetry-host-successor/run.py
python3 tests/telemetry-host-published-org-read/run.py
bash tests/telemetry-host-release/run.sh
- name: Test passive Host HTTP authority before expensive qualification
if: ${{ !(inputs.learn_native_fixture || inputs.learn_native_preflight) }}
Expand All @@ -175,7 +180,7 @@ jobs:
set -euo pipefail
dotnet restore tests/FS.GG.Telemetry.Tests/FS.GG.Telemetry.Tests.fsproj --locked-mode
dotnet test tests/FS.GG.Telemetry.Tests/FS.GG.Telemetry.Tests.fsproj -c Release --no-restore --filter "FullyQualifiedName~HostPassiveReceiptTests|FullyQualifiedName~HostSchemaProfileTests|FullyQualifiedName~RemoteTelemetryTests.protected native collector resolves durable dispatch and replays retained envelope" --blame --logger "console;verbosity=normal" --logger "trx;LogFileName=host-passive.trx" --results-directory "$RUNNER_TEMP/host-passive"
python3 scripts/read-trx-count.py "$RUNNER_TEMP/host-passive/host-passive.trx" --minimum 4 --label "passive Host HTTP" --summary-file "$GITHUB_STEP_SUMMARY"
python3 scripts/read-trx-count.py "$RUNNER_TEMP/host-passive/host-passive.trx" --minimum 5 --label "passive Host HTTP" --summary-file "$GITHUB_STEP_SUMMARY"
- name: Retain passive Host HTTP diagnostics
if: ${{ always() && !(inputs.learn_native_fixture || inputs.learn_native_preflight) }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,7 @@ product's `FS.GG.UI.*` pin), which is a different axis from the template package
| `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.113.0` | `0.112.0` |
| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.8.0` |
| `telemetry-host` | FS-GG/.github | `0.9.0` | `0.8.0` |
| `new-sdd-workspace` | FS-GG/.github | `0.22.0` | `0.21.0` |
| `fs-gg-workspace-template` | FS.GG.Templates | `0.19.3` | `0.19.3` |
| `game-skills` | FS.GG.Game | `0.9.0` | `0.9.0` |
Expand Down
41 changes: 41 additions & 0 deletions docs/coordination/telemetry-host-release.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,46 @@
# Telemetry host package and release boundary

## Prospective Host 0.9 source — Outcome4640, 2026-10-23

[PR4802](https://github.com/FS-GG/.github/pull/4802) taught the shared store to admit
passive `provider-usage-observation/1` facts with provenance
`claude-local-transcript/1`, each in its own native identity namespace
(`claude-transcript/1`), beside `codex-local-rollout/1`. Every other provenance is still
refused. Published Host0.8 was built from `74cbd6f0` and predates that change, so it
answers a Claude transcript batch with `invalid-request`. The Host takes the parser
through its Store and Coord.Core project references. It therefore needs a new
independent package rather than any Host logic change. The packaged closure also carries
other coherent113 source compiled through those references (the Claude transcript reader
in `SkillTelemetryReaders.fs` and `Coord.Core/Telemetry.fs`); none of it is reachable from
Host entry points. Root re-diffs the Host closure against `74cbd6f0` at the dispatch SHA.
The bump also re-pins `telemetry-host-release.py` in the read-only org observer
(`scripts/telemetry-host-published-org-read.py`), whose test now runs in the package
workflow so a stale pin fails at PR time.

This source prepares **0.9.0**, `telemetry-host/v0.9.0` and logical journal15 at
`state/releases/utel-host-rel-15`. The predecessor is the accepted original Host0.8
publication: [publisher39580298871](https://github.com/FS-GG/.github/actions/runs/39580298871)
with independent readonly [39591087147](https://github.com/FS-GG/.github/actions/runs/39591087147),
nonlatest release419394647 at `74cbd6f0b1b598d48556eb854c4ba6a3c3abda54`, release archive
`44273495…5aba89` and common normalized payload `f036808546…1802ee`, with journal14.
The read-first gate now requires the known0.8 predecessor and normalized0.9 absence.
The other gate, artifact, publisher and journal mechanics are unchanged from Host0.8.
These are prospective coordinates, not an availability claim. Root still verifies
tag/release occupancy, Authority journal15 destination/protection and exact accepted
source before any invocation. Publication needs its own fresh effect admission, and
the publisher stays default-false.

Store14 and the receipt ABI are unchanged. Since `74cbd6f0`, `TelemetryStore.fs`
differs only in the provenance-to-namespace match. `TelemetryStoreApplication`
(`currentSchemaVersion = 14`, DDL and passive query) is byte-identical, and the release
manifest still selects only schema14. Claude observations use the existing
`current_ingest_facts` rows and corrections path, so a Home Store14 workspace can move
from0.8 to0.9 without migration. The focused passive Host HTTP preflight now requires
five tests. The new test proves that the actual Host receipt endpoint applies a Claude
transcript observation and refuses an unknown provenance or a Codex-namespaced identity.
Home cutover, credential custody and installed acceptance remain separate.
Published0.8/journal14, 0.7/journal13 and held0.6/journal12 remain unchanged.

## Prospective Host 0.8 source — Delivery4707, 2026-10-21

[Delivery4707](https://github.com/FS-GG/.github/issues/4707) owns the first installed
Expand Down
2 changes: 1 addition & 1 deletion docs/registry/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ authored `Version` cells of the Versioned contracts table (#748).*
| `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.113.0` | `0.112.0` |
| `telemetry-host` | FS-GG/.github | `0.8.0` | `0.8.0` |
| `telemetry-host` | FS-GG/.github | `0.9.0` | `0.8.0` |
| `new-sdd-workspace` | FS-GG/.github | `0.22.0` | `0.21.0` |
| `fs-gg-workspace-template` | FS.GG.Templates | `0.19.3` | `0.19.3` |
| `game-skills` | FS.GG.Game | `0.9.0` | `0.9.0` |
Expand Down
Loading
Loading