# Layering and dead surface

Neither entry breaks anything today. Both make a later change cost more than it
should, which is why they are low and not medium.

## Domain packages depend on store and IPC types [#685] {#dtos}

Costs: dialogue exposes `store.DialogueSessionRow` in its port, the pure
morning planner takes a `store.Fact`, and auth policy imports IPC method and
caller types. There is no Go import cycle. A schema change reaches further than
it should.
Revisit when: the dialogue or fact schema changes, or a second transport
appears beside IPC.
Workaround: none needed. It compiles and it is correct.

## Eleven symbols are unreachable [#686] {#deadcode}

Costs: extra API and test surface, and comments that claim callers which no
longer exist. Three of the eleven must not be deleted. `HisGender` is a
documented seam tied to V-399. `AudioDuration` duplicates `internal/audio` and
should call it. `CountWord` is a one-line alias nobody uses and can go.
Revisit when: `deadcode` is wired into the audit gate, which needs the
allowlist this entry describes. **An unannotated list invites deleting the
three above.**
Workaround: none needed.
