# Stateful emission correction

The first hearth probe failed the existing actual-light rule: campfire was absent from the
modeled unconditional source table. This is a missing block-model feature, not a serious flaw in
the composition architecture. Adding its name alone would incorrectly light an extinguished fire.
`hearth.blocks.emitted_light(state)` now resolves explicit campfire `lit` state. The existing shared
light validator calls that service for source selection and levels; propagation, attenuation,
requirements and all validators remain in force. No component-specific branch was added to the
kernel, and no permission, transaction, provenance or lifecycle protocol changed. The three-line
validator service-use delta is covered by new extinguished-fire and source-removal tests plus full
regression. Previous illumination values are unchanged. The finite light model still does not
simulate Minecraft or cover every emitting block.

The extinguished-fire negative test also exposed a pre-existing cache alias bug: `parse(state)`
returned its cached mutable dictionary. Editing one returned mapping contaminated later queries
for the original string. This is a service implementation bug, not a flaw in component contracts.
The public function now returns an independent property mapping while its parsing cache stays
private. The test retains mutation of the returned mapping and asserts that the original state's
emission remains 15. Property-order equivalence and complete replay tests are rerun.
