fix: unblock Crashlanded research scoring (seed bench + brief observability) - #75
Merged
Merged
Conversation
Research 1.2 floors at 7/31 on Crashlanded because the save had no research bench and currentProj was unset. Agents never finish tech; research_target is rejected as bench/prereqs missing. That floor is the starting tree, not sigma. Bake a player-owned wood SimpleResearchBench at (128, 136) and queue Smithing. Re-pin save_sha256. Do not recalibrate the baseline sidecar. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
Add research_bench_present to the harness-neutral state snapshot and a MAP_SUMMARY cue when no bench is visible. Prefer research benches in the 50-structure sample so ruin walls cannot hide the seeded bench. research_target on the already-queued current project is success-by-state (no rewrite), matching the growing-zone already-covered gate. Tests cover the 7/31 floor math, brief flag true/false, save contract, and the current-project path. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
Mock state already has Electricity queued. After treating the current project as success-by-state, the MCP round-trip smoke issued zero research POSTs. Smithing is available and not current, so the write path is still exercised. Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
jkbennitt
marked this pull request as ready for review
September 8, 2026 14:20
jkbennitt
commented
Sep 8, 2026
jkbennitt
left a comment
Member
Author
There was a problem hiding this comment.
LGTM — scope matches CoS greenlight: Crashlanded seed SimpleResearchBench + currentProj=Smithing, brief research_bench_present + MAP_SUMMARY cue, get_map prefers benches, research_target current-project success-by-state, smoke targets Smithing for write path. No scoring/version/baseline bump. Tests cover floor math, save contract, brief flag, already-satisfied, get_map keep. All five CI SUCCESS on 7c61cd8 (run 34237372223). HOLD merge for CoS clear. Same Main 1-review gate as #74 (own-PR APPROVE impossible as jkbennitt).
jkbennitt
added a commit
that referenced
this pull request
Sep 8, 2026
) Native POST /game/load reads RimWorld AppData Saves, not docker/saves. The YAML pin only hashed the repo mirror, so #75's Crashlanded seed (SimpleResearchBench + Smithing) could be ignored in favor of a stale April AppData file. Copy the canonical save when the live hash diverges and fail closed if the pin cannot be satisfied. Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
jkbennitt
added a commit
that referenced
this pull request
Sep 8, 2026
…rge) (#77) * fix: read BuildingDto.def and merge research progress Post-#76 native pin-match still reported research_bench_present false and research_target Smithing locked. Live buildings use snake_case def (label fallback has spaces); /research/summary has no current project and by-tech-level bucketing dropped Smithing from available. Map def → def_name → label, strip spaces in the bench matcher, and merge /research/progress + finished + tree so current can be Smithing. Co-authored-by: Jason <jkbennitt@users.noreply.github.com> * test: keep research adapter cases out of TestReadEndpoints Move the post-#76 adapter tests into their own class so the existing read-endpoint cases stay under TestReadEndpoints. Co-authored-by: Jason <jkbennitt@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Jason <jkbennitt@users.noreply.github.com>
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.
Why
Scoring 1.2 research is
completed / (completed + available). On Crashlanded that starts at 7/31 ≈ 0.2258 — the finished/available ratio already inrle_crashlanded_v1, not model variance. The seed had no ResearchBench andcurrentProjunset. Agents never finish tech; gates that forceresearch_targetget RIMAPI “bench/prereqs missing.” Do not treat that floor as σ.CoS greenlit this exact scope: seed + brief observability + tests. No scoring formula / version bump, no baseline-delta, no matrix or billed cal runs.
What landed
Seed
SimpleResearchBench(Building_ResearchBench) at(128, 0, 136)indocker/saves/rle_crashlanded_v1.rwsand the gzip siblingsaves/rle_crashlanded_v1.rws.gz(round-trip gzip; BOM + CRLF preserved).CompPowerTraderis hi-tech only). Encoded like other built furniture in this save (stuff, factionFaction_11, emptybillStack).currentProj=Smithingusing the sameresearchManagerfieldrle_ship_launch_v1already uses.save_sha256on01_crashlanded_survival.yaml. The.baseline.jsonsidecar is not recalibrated (scoring 1.2 / no baseline-delta).Brief
research_bench_presenton the harness-neutral state snapshot.get_mapprefers research benches in the 50-structure sample so 400+ ruin walls cannot hide the seeded bench.Executor
research_targeton the already-queued current project is success-by-state (no rewrite), same pattern as a covered growing zone.Smithing(available, not current) so the write path is still exercised.Tests
SimpleResearchBench+ gzip == canonical.rws)get_mapkeeps the bench when there are 60+ wallsOut of scope
SCORING_VERSION