Repository navigation
World stage c3b: locations generated, under Jon's rulings WM.65 (place_kind) and WM.66 (achievability over every effect) - #36
Merged
Merged
Conversation
…e_kind) and WM.66 (achievability over every effect) The fifth stage of phase (c) (docs/specs/WORLD_PHASE_C.md, "c3b. Locations: generation", under Jon's decision WM.64). Every place event type of a world with location fluents is now a move or an act: the ones without an event-file entry draw their dynamics from the new stream world:place_dynamics (the kind at move_share, the location fluent, further literals, effects, and conditions on the agent, drawn as the entity event types' are; a never-legal one redraws from its own part). Two-place event types draw SAME on a location fluent at the pair share (from the part world:pair_preconditions:locations) and the quota same_rules gives it to two of them (from world:pair_preconditions:same_rules). Every place event type with dynamics writes place_kind in its record (WM.65), hashed and checked by the loader. A literal's achievability counts every effect of the world (WM.66): the checkers and the explicit checks read the place event types' effects; the entity draws see the event file's place effects, the place draws every effect. world_stats.yaml gains the place event types by kind, the drawn dynamics' counts, the concentration of habitats, the location fluents counted apart with the place event types' literals and effects, and the move share, the act share, and the two-place share between entities. tiny_full.yaml and default_full.yaml have pair_fluents.locations: 1 (WM.63); tiny.yaml and tiny_full.yaml have place requirements that read the place (WM.62); tiny_place_chain.yaml sets same_rules: 0 so that generation still adds nothing to what its file gives. Figures: the snapshot moved for the tiny world (WM.62: identity, place constraints and densities, its fixtures, its baselines, and the tiny corpus's world identity alone), the chain example (WM.65: identity alone), and the full worlds (every figure, baseline, and fixture, with the new off setting locations_off whose default_full baseline is the stage c2b world); the default world, the default corpus, and tiny_pairs did not move. The 44 hand fixtures gained place_kind and moved in identity alone. default_full's shares (ruling 4): two-place 0.559, of which moves 0.160, acts 0.053, between entities 0.346; define takes 8.5 s (7.4 s in c3a). One acceptance criterion did not hold: the default habitats are not flat beyond three binomial standard deviations on default_full seed 1 (the largest deviation is 0.119 against a margin of 0.149); the bound is kept, the test is an expected failure, and the finding is open question 7 of the proposal file. Proposal: docs/proposals/2026-10-21-world-stage-c3b-decisions.md; decisions WM.65, WM.66, and WM.E307 to WM.E318. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…d the fixed-condition error of event files (WM.68)
Jon's rulings of October 28, 2026, on two of stage c3b's open questions, recorded in
docs/proposals/2026-10-21-world-stage-c3b-decisions.md ("Jon's rulings of October 28, 2026"
and following) and docs/DECISIONS.md (WM.67, WM.68, WM.E319 to WM.E324); open questions 2 to 6
accepted as built.
WM.67: place_event_types.density: [low, high] (or null, the code's default and default.yaml's)
draws a place requirement again while its share of the entity-place bindings lies outside the
band, from world:place_event_types up to MAX_TRIES, with the tries under places.tries and the
place event types still outside the band under places.outside_density with a warning, as
relations.outside_density reports the two-place event types; an explicit requirement is never
drawn again. tiny_full.yaml and default_full.yaml set [0.05, 0.5] and places.habitat_strength 2.
The habitat test reads the expected shares from the habitat weights on seeds 1 to 5 of
default_full; the criterion holds on seeds 3 and 5 and fails on seeds 1, 2, and 4 (0.65, 0.52,
and 0.60 of the margin; strength 4 still fails on seeds 2 and 4), not tuned further by Jon's
instruction, the three seeds strict expected failures with the table in the proposal file.
WM.68: a condition whose value the precondition fixes under fixed_pair_literals (an act's
location literal fixes SOMEOF of the place true) is an error naming the file and the entry, for
place and entity entries alike (fixed_condition_problem in event_types.py), and an invariant of
check_dynamics and check_place_dynamics. The chain example's rest act reads SOME.PAIRFL.1(agent)
in place of SOMEOF.PAIRFL.2(patient).
Engineering choices (WM.E319 to WM.E324): the band's implementation and statistics; the full
worlds differ from tiny.yaml and default.yaml in pair_fluents, habitat_strength, and density
(the tests, comments, and WORLD.md say so); the locations_off baselines of the full worlds are
no longer the stage c2b worlds, and their pair_fluents_off baselines no longer the tiny and
default worlds; the tiny_full place requirements redrawn under the band; the chain's act test
over the agent's row; the habitat test's expected shares and expected failures.
Figures moved (python -m semantic_world.figures snapshot: 279; figures guides: 16 in WORLD.md):
- the band and the strength: tiny_full (identity 75359f7d9a48 -> 2f80537bb72b; its two place
requirements, habitats, drawn dynamics, episode shares, 35 figures, 7 baselines, 6 fixtures)
and default_full (67437c0a6f62 -> baa625dfd0fb; the four requirements' densities 0.644,
0.655, 0.820, 0.018 -> 0.156, 0.380, 0.259, 0.336, the habitats, the episode shares:
two-place share 0.559 -> 0.509, move share 0.160 -> 0.096, act share 0.053 -> 0.026, 182
figures, 7 baselines); the entity event types of both did not move;
- WM.68: tiny_place_chain (fb1cfd1a38bb -> d16dc0ffcf17; the rest act's condition literal and
the episode shares, 17 figures);
- unchanged, checked against the reference run: tiny, default, tiny_pairs, their baselines,
the tiny and default corpora, and the hand fixtures.
Run times (October 28, 2026): define default_full 8.3 s (8.5 s in stage c3b), default 6.8 s,
tiny_place_chain 1.9 s. Tests: the full check list passes; pytest --all reports the three
expected failures of the habitat criterion and nothing else.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… effect sizes as figures (WM.69) Jon's ruling WM.69 of October 28, 2026, on how "the default habitats are not flat" is read: the habitats of the full worlds are real but modest (the median entity leaf category's favorite kind of place gets 1.3 to 1.8 times its uniform share at strength 2, the strongest up to 2.4 times; an entity's leaf category explains about half of the variance of a(x, q)), and no test against a uniform draw holds on every seed with about 7 entities per leaf category, so stage c3b tests their mechanism, not their significance. - tests/world/test_world_location_generation.py: test_the_default_habitats_are_not_flat now asserts, on seeds 1 to 5 of default_full, that the expected mean entropy of each entity leaf category's initial places over the place leaf categories is exactly the uniform entropy at strength 0, strictly falls over the strengths 0, 1, 2, and 3, and is below the uniform entropy at the configured strength 2, that every entity's expected places are ordered by its capacities, and that the run's figures agree with the test's own computation; FLAT_SEEDS and its three strict expected failures are gone, as is _expected_habitat_shares. A fast-tier test on tiny_full checks expected_leaf_habitats at strengths 0 and 2. No test is skipped or an expected failure. - python/semantic_world/world/locations.py: expected_leaf_habitats computes the effect sizes from the habitat weights; habitat_stats takes the requirements and the strength and writes them as expected_by_leaf of every location fluent's habitats block (level, favorite_ratio with median, largest, category, and place_category; entropy with mean and uniform). - python/semantic_world/world/places.py: Places carries habitat_strength so that the statistics can compute the weights; places_stats passes the requirements and the strength. - Figures: the snapshot gained 42 figures and changed none (24 lines added, none removed): places.habitats.<fluent>.expected_by_leaf and places.habitat.expected_by_leaf of tiny_full, default_full, and tiny_place_chain. figures guides filled 6 new figures in WORLD.md's "Habitats" row; no existing figure moved. No world identity changed (tiny_full 2f80537bb72b, default_full baa625dfd0fb, tiny_place_chain d16dc0ffcf17); tiny, default, and tiny_pairs were not rerun. - docs/DECISIONS.md: WM.69 (proposed by Claude (chat), decided by Jon, Decided) after WM.68; WM.E325 (the figures and the tests as built) after WM.E324. - docs/specs/WORLD_PHASE_C.md: an as-built note of WM.69 on the c3b entry of "Build stages", and a pointer on the note of "Initial places (habitats)". - docs/proposals/2026-10-21-world-stage-c3b-decisions.md: the ruling, the measurements for strengths 0 to 3 on seeds 1 to 5, the tests, the figures added, the run times, the test results, the documents changed, and the deferred open question 8 (strong kind-level habitats: requirements that read the features defining a kind, or more place event types); the first follow-up's question 1 marked as ruled. - docs/guides/WORLD.md (the places block's expected_by_leaf keys, the Habitats row, the run time), docs/guides/README.md (the status and the run time), CLAUDE.md (item 10 and the fast tier's time). Run times with nothing else running: define default_full.yaml 8.4 s (8.3 s after the first follow-up), tiny_place_chain.yaml 1.9 s. Tests: the Rust checks and ruff pass; the fast tier 2,063 passed in 2 minutes 29 seconds; pytest --all 2,380 passed in 8 minutes 33 seconds, nothing skipped, nothing xfailed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.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.
The fifth stage of phase (c) (docs/specs/WORLD_PHASE_C.md, "c3b. Locations: generation", under
Jon's decision WM.64). Every place event type of a world with location fluents is now a move or
an act: the ones without an event-file entry draw their dynamics from the new stream
world:place_dynamics (the kind at move_share, the location fluent, further literals, effects,
and conditions on the agent, drawn as the entity event types' are; a never-legal one redraws
from its own part). Two-place event types draw SAME on a location fluent at the pair share
(from the part world:pair_preconditions:locations) and the quota same_rules gives it to two of
them (from world:pair_preconditions:same_rules). Every place event type with dynamics writes
place_kind in its record (WM.65), hashed and checked by the loader. A literal's achievability
counts every effect of the world (WM.66): the checkers and the explicit checks read the place
event types' effects; the entity draws see the event file's place effects, the place draws
every effect. world_stats.yaml gains the place event types by kind, the drawn dynamics' counts,
the concentration of habitats, the location fluents counted apart with the place event types'
literals and effects, and the move share, the act share, and the two-place share between
entities. tiny_full.yaml and default_full.yaml have pair_fluents.locations: 1 (WM.63); tiny.yaml
and tiny_full.yaml have place requirements that read the place (WM.62); tiny_place_chain.yaml
sets same_rules: 0 so that generation still adds nothing to what its file gives.
Figures: the snapshot moved for the tiny world (WM.62: identity, place constraints and
densities, its fixtures, its baselines, and the tiny corpus's world identity alone), the chain
example (WM.65: identity alone), and the full worlds (every figure, baseline, and fixture, with
the new off setting locations_off whose default_full baseline is the stage c2b world); the
default world, the default corpus, and tiny_pairs did not move. The 44 hand fixtures gained
place_kind and moved in identity alone. default_full's shares (ruling 4): two-place 0.559,
of which moves 0.160, acts 0.053, between entities 0.346; define takes 8.5 s (7.4 s in c3a).
One acceptance criterion did not hold: the default habitats are not flat beyond three binomial
standard deviations on default_full seed 1 (the largest deviation is 0.119 against a margin of
0.149); the bound is kept, the test is an expected failure, and the finding is open question 7
of the proposal file.
Proposal: docs/proposals/2026-10-21-world-stage-c3b-decisions.md; decisions WM.65, WM.66, and
WM.E307 to WM.E318.
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com