Phase 9 plan — adventure-bundled monsters#25
Merged
Merged
Conversation
Blocking: the validation failure path is now total — _effective_monsters returns the first-occurrence-wins dedup union plus the colliding-id list, so both callers get a usable catalog, collision reports name every id, and a colliding adventure's report carries no spurious unknown-monster echo (pinned, with the tests to match). Non-blocking: fact 1's redirect count corrected to four with the validation site kept-by-contract; the id-domain docstring sweep added to work item 4; the helper's definition moved under work item 3; the versioned-docs evaluation now cites the 1.1.0 precedent and rebuts the gloss instead of reading past it; the wandering-validation tightening gains its Changed bullet; the property renamed effective_monsters (room for effective_equipment siblings, no helper shadowing); the adaptations register's silence recorded as deliberate. Claude-Session: https://claude.ai/code/session_01EVrxXFxYBEGYjTF6wqnGP2
The DoD's changelog line pluralizes to match work item 4's Added-plus- Changed pair, and the empty-bundle sentence states the tuple return shape exactly. Claude-Session: https://claude.ai/code/session_01EVrxXFxYBEGYjTF6wqnGP2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The plan for phase 9: an
Adventuredocument carries its ownMonsterTemplates, resolved everywhere the engine resolves template ids — the consumer-demonstrated need phase 6 pinned as the reopening condition ("post-1.0 if a consumer ever demonstrates the need"), demonstrated now by osr-forge's phase 7 (custom monster emission). Document-carried data, not a runtime registration API: the phase 6 boundary stands.Notable decisions
GameSession.effective_monsters(built once in__init__) plus four one-line redirects; the fifthload_monsters()site — validation inGameSession.new— keeps passing the base catalog by contract.validate_adventurekeeps its exact signature and unions internally, honoring the consumer contract osr-forge's merged phase 7 plan pins: its existing call is correct unchanged.orcwould silently re-stat every reference); the_effective_monstershelper returns a first-occurrence-wins dedup union plus the colliding-id list, so both callers stay total and each turns collisions into its own typedContentValidationError— checked before construction becauseMonsterCatalog's own validator raises a bareValueError, the wrong failure shape.monster_idsjoin validation, closing a pre-existing deferred play-timeValueErrorsurface (Changed bullet pinned — previously-accepted dangling ids now fail the gate up front).SCHEMA_VERSIONbump, no golden regeneration, no__all__edit — the field is additive and defaulted, no golden embeds a serialized Adventure, and the property/helper are invisible totest_public_surface.py. Released as 1.2.0, semver-minor under the phase 8 discipline.Review provenance
Rubber-ducked per AGENTS.md; first pass NEEDS REVISION, second pass SOLID. The blocking finding: the validation failure path was decision-incomplete — when the union fails, which catalog do the remaining checks use? Fixed by making the helper total (dedup union + collision list), pinning that remaining checks resolve the union so a colliding adventure's report names exactly the root cause with no spurious unknown-monster echo, and pinning the tests that assert it. Non-blocking findings addressed: the redirect count corrected (four, not five — the validation site is kept by contract), the id-domain docstring sweep added, the helper's definition moved to the validation work item, the versioned-docs evaluation now cites the 1.1.0 precedent and rebuts the AGENTS.md gloss instead of reading past it, the wandering-tightening Changed bullet pinned, the property renamed
effective_monsters(leaving room foreffective_equipmentsiblings, no helper shadowing), and the adaptations-register silence recorded as deliberate. Sign-off cosmetic notes folded in.https://claude.ai/code/session_01EVrxXFxYBEGYjTF6wqnGP2