Skip to content

[fork test] Finish #132 (CI-1, 4, 5, 6, 7, 8, 9, memory retention) - #6

Draft
Cadacious wants to merge 10 commits into
ci/fix-post-merge-failuresfrom
ci/finish-132
Draft

Cadacious wants to merge 10 commits into
ci/fix-post-merge-failuresfrom
ci/finish-132

Conversation

@Cadacious

Copy link
Copy Markdown

Fork validation run for the upstream PR finishing InfiniteRasa#132. Based on the InfiniteRasa#139 branch. Not for merging.

🤖 Generated with Claude Code

Cadacious and others added 10 commits October 5, 2026 08:35
…mage

NuGet versions move into Directory.Packages.props (central package
management), so a bump changes one line. The pin guards now check that
copies agree instead of asserting literals: the Dockerfile's SDK stage
matches global.json, the image runs on that SDK's runtime line, the EF Core
packages and the dotnet-ef tool share a version, and the DotRecast pair
agree. An update that moves every copy passes; one that misses a copy fails.

The Dockerfile builds in sdk:10.0.401 and runs in runtime:10.0 as the
image's non-root app user (UID 1654), keeping the output paths compose
uses. The container model learns FROM stages, COPY --from/--chown/--chmod
and USER; other COPY flags are still rejected.

Refs InfiniteRasa#132 (CI-4, CI-7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
- MSTEST0017: NonContiguousMemoryStreamTests passes expected before actual,
  and asserts the counts its Read calls return (CA2022).
- CA2022: PythonWriter.ToString reads its buffer with ReadExactly.
- CS0414/CS0219: drop MapChannelManager.MapChannel_PlayerQueue and three
  unused bonus locals in ManifestationManager.
- EF1002: MigrationConsolidationTests and ClientWaypointIdTests use the
  parameterized SqlQuery/ExecuteSql; BootcampWorldContentTests keeps a
  raw query for table names (identifiers can't be parameters), with a
  scoped suppression.
- EF1001: MySqlMigrationHistoryRepository keeps subclassing Pomelo's
  internal MySqlHistoryRepository, the only way to bound GET_LOCK names to
  64 characters, now behind a scoped, explained suppression.
- MSTEST0044: [DataTestMethod] becomes [TestMethod].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
- dotnet.yml: a `migration drift` job runs has-pending-model-changes for all
  six EF contexts, and `tests complete` requires it. MySqlAuthContext's
  design-time factory now uses a fixed server version like Char and World,
  so none of the six needs a database server.
- container.yml: builds the image, starts docker-compose.yml, and checks
  from inside each container that every TCP port compose maps is listening
  (a host-side probe always connects through Docker's proxy); UDP ports by
  their startup log line. Also checks the image runs as UID 1654, and runs
  an advisory Trivy scan pinned by commit.
- release-on-comment.yml / release-container.yml: a /release comment on a
  merged PR from someone with write access dispatches a build of
  development's HEAD to GHCR, once CI has passed on that commit.
- prune-container.yml: weekly, keeps the 14 newest image versions.
- dependabot.yml: NuGet (grouped; EF Core 10 and Pomelo held back),
  GitHub Actions, and the SDK, whose global.json and Dockerfile bumps share
  one multi-ecosystem PR.
- docs/setup.md: six drift commands, and how to bump the SDK or packages.

Actions in workflows that push images or hold write tokens are pinned by
commit SHA.

Refs InfiniteRasa#132 (CI-1, CI-4, CI-5, CI-8, CI-9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
Refs InfiniteRasa#132 (CI-7, CI-8, CI-9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
…mpty

SeedWorldContent writes today's Bootcamp evidence, and some of its notes
are longer than the varchar(256) ConsolidatedWorldSchema created, so
`dotnet ef database update --context MySqlWorldContext` on an empty server
stopped with "Data too long for column 'reconstruction_note'". Sqlite
doesn't enforce the width, and the existing boundary test only sees
InsertDataOperation rows, not the seed's raw SQL inserts.

Databases already past the seed were widened by WildernessAliaBranches and
WildernessEvidenceCapacity; for them this changes nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
…asa#132: CI-6)

A `mysql` job, matrixed over mysql:8.0 and mysql:8.4 service containers,
applies all three MySQL contexts' migrations to an empty server with
`dotnet ef database update`, then runs the new `MySql` test category
against it. It fails unless every test in the category ran and passed,
and `tests complete` now requires it.

The MySql tests (MySqlLiveDatabaseTests) check that every migration is
applied with none pending, that every table holds the same rows as after
Sqlite's migrations, and that accounts, characters and missions round-trip
through the repositories with MySQL's collation and foreign keys. They find
the server through RASA_TEST_MYSQL and report inconclusive without it.

Config stays file-only: the job writes a databasesettings.env.json for the
design-time factories. TestShards.cs leaves the category out of the plan
and every lane's filter excludes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
- Release waits for CI on the commit (a /release usually comes right after
  a merge), takes only development push runs, also requires the container
  smoke test when it ran, and reacts 🚀 or 👎 on the comment for the actual
  outcome instead of on dispatch.
- Each push to development gets its own CI concurrency group, so a pending
  run is never replaced and every commit stays releasable.
- Prune skips only on a 404, and fails on any other API error.
- The smoke test spots a crash (restart: always hides it as a restart),
  matches UDP ports exactly, watches Rasa.NET.sln and .config, and keeps the
  advisory scan from failing the job or saving a cache on PRs.
- Dependabot's docker entry matches every image in the Dockerfile.
- Docs: SDK bumps arrive as one PR; released images are amd64 only.
- Restore the line continuations in dotnet.yml that had collapsed to spaces.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
- The Dockerfile model reads FROM past --platform and other flags, keeps
  each stage's WORKDIR (a stage built FROM another inherits it), accepts a
  stage index in COPY --from, and rejects a copy from the current stage.
- The SDK guard strips @sha256 digests and accepts a runtime image pinned
  to a patch (runtime:10.0.12) as well as the floating line.
- A guard that the build stage gets global.json, Directory.Packages.props
  and the tool manifest before it restores.
- Live MySQL tests also read databasesettings.env.json for database names.
- docs/setup.md: no hardcoded SDK or EF versions, the one-line recovery for
  a MySQL World database whose build stopped at SeedWorldContent before the
  reconstruction_note fix, and a warning to run the live tests only against
  a throwaway server.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
A Wilderness harness removed the creatures it spawned but not its map's
dynamic objects. EntityManager outlives the harness, so the Logos (and
other objects) it registered kept the map channel, and with it the
harness's whole world, reachable for the rest of the test run
(gcroot: EntityManager -> DynamicObjects -> Logos -> MapChannel).

Dispose now removes the objects on its map that it added, and
RuntimeHarnessRetentionTests checks, with weak references and a forced
full GC, that a disposed Wilderness or Bootcamp harness leaves its map
channel, map channel manager and mission application collectable. The
Wilderness guard fails without the fix. Also drops an unused navmesh
Lazy that TestNavMeshes replaced.

Refs InfiniteRasa#132.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AxABTHjs6nJrsXVCTnmMo7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant