Skip to content

chore!: rename the project to firenze - #16

Merged
Madeuss merged 4 commits into
mainfrom
chore/rename-to-firenze
Aug 30, 2026
Merged

chore!: rename the project to firenze#16
Madeuss merged 4 commits into
mainfrom
chore/rename-to-firenze

Conversation

@Madeuss

@Madeuss Madeuss commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Stacked on #15 — merge that one first and GitHub retargets this to main
automatically.

Three names, one thing

Was Now
firenze (repository) firenze
Mansão (product, docs, README) Firenze
mansao (Python package, env prefix, database) firenze

On a public repository the first name a visitor meets is the repository's, and
it named nothing in the game. The plan also drops its (working title) marker,
since the name is now decided.

What moved

Package and imports, the firenze CLI command, MANSAO_FIRENZE_, the
compose project, the database user and name, the FastAPI title, and every path
cited in the documents and the ADRs.

63 passed · ruff clean · mypy strict: 16 files, no issues
firenze generate --seed 42 --locale en   # same case, same culprit

The case is byte-identical before and after: the rename touches no constant the
generator seeds from.

Local cleanup, once

Containers and the pgvector volume were created under the old project name:

docker compose -f infra/compose/docker-compose.yml -p mansao down -v
make dev

Nothing of value is lost — no case is persisted yet and there are no migrations.

Still open, deliberately

The generator only knows how to build a manor, and the veneer prompt still says
"a Brazilian manor house in the 1930s". Whether the setting follows the name to
Florence is a question about content, and it belongs in its own change.

…hing

Closes E1. The generator produces a structure the solver has approved; this
turns it into prose a player would want to read.

Two boundaries define the module, and they are the whole design.

It takes `Case`, never `CaseWithSolution` — the same signature discipline as the
solver, for a different reason. A writer who knew the culprit would telegraph
it. Nobody would mean to; the guilty character would simply end up with the
sharper description, and the mystery would be over before the first question. A
test asserts the stronger property: every suspect appears exactly once in the
prompt, so nothing in the text distinguishes them.

It is only ever shown public facts. The veneer has no use for a restricted one,
so it never receives one and cannot leak one. The canary check on the output is
therefore not aimed at the model — it is aimed at us, because a canary in this
output means context assembly upstream is broken (RN-010, RN-012).

The output schema is narrow on purpose: role, appearance, manner, and a scene.
There is no field in which to invent evidence, move somebody through the house,
or name a killer. What the schema cannot prevent, validation rejects: an
invented or dropped character, a duplicated id, one suspect described with
another's name, a blank or runaway field. A rejected draft is discarded rather
than repaired — a model that broke the cast once will break it differently on a
patch.

Failure is not fatal. No key, a refusal, a network error, a rejected draft: the
case still prints, with a note on stderr. Prose is a luxury; the mystery is not.

The prompt is a versioned file in prompts/veneer/, never a string literal, and
the tests read it rather than restating it.

Also finishes the ADR-0006 rename that phase 0 left behind: Configuracao became
Settings, and the health endpoint now answers with version and environment.

63 tests, all of them keyless — the model is a stub returning exactly the drafts
that must not reach a player. Waiting for a real model to produce one of those
by chance is not a test strategy.
The veneer is short, structured, and its failure modes — an invented character,
a swapped name, a leaked canary — are caught by validation rather than by model
quality. The prompt measures ~400 input tokens and the reply ~400 output, which
puts Haiku 4.5 at roughly US$ 0.0025 per case: about 400 cases per dollar.

Opus would be ~5x that on paper and more in practice, because adaptive thinking
is on by default there and thinking tokens bill as output. That headroom is
better spent in phase 2, where six NPCs each answer a turn against the R$ 0,50
per-match budget.

Env-switchable through MANSAO_VENEER_MODEL, so comparing the two on the same
seed costs about a cent.
The repository was firenze, the product was Mansão, and the Python package was
mansao. Three names for one thing, on a public repository where the first one a
visitor sees is the repository's. Now they are the same word, and the plan drops
its "(working title)" marker because the name is settled.

Mechanical throughout: package, imports, entry point, env prefix (MANSAO_ ->
FIRENZE_), compose project, database user and name, API title, CLI command, and
every path cited in the documents and ADRs.

Nothing in the domain changed. The manor is still the only setting the generator
knows how to build — whether the game follows the name to Italy is a separate
question about content, not about what anything is called.

Local containers and the pgvector volume were provisioned under the old project
name. `docker compose -p mansao down -v` clears them; `make dev` rebuilds under
the new one. No data is lost that matters — no case is persisted yet, and there
are no migrations.
Base automatically changed from feat/llm-veneer to main August 30, 2026 21:53
@Madeuss
Madeuss merged commit 33db286 into main Aug 30, 2026
4 checks passed
@Madeuss
Madeuss deleted the chore/rename-to-firenze branch August 30, 2026 21:59
The branch carried the original veneer commits while main carried them squashed
— divergent history over identical content, so every renamed file conflicted
falsely. The branch tree already contains everything main has plus the rename,
which is what makes -s ours the honest resolution here rather than a shortcut.
@Madeuss Madeuss added this to the Phase 0 — Foundation milestone Aug 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant