Summary
Follow-up to #809, per the decision recorded there on 2026-08-23.
rate_limit.requests_per_minute and rate_limit.requests_per_hour are dead:
nothing in the codebase reads either value. Actual rate limiting is driven by
server.disable_rate_limiting and server.ratelimit_public_rpm, which are
separate, classified, and live.
#812 classified both keys, which was the behavior-preserving fix — it cleared the
live 404-on-GET-for-a-listed-key inconsistency. But classification leaves two
settings an administrator can read and edit that silently do nothing, which is
arguably a worse trap than the 404 it replaced, since a 404 at least fails loudly.
This issue removes them.
Acceptance Criteria
Notes
Summary
Follow-up to #809, per the decision recorded there on 2026-08-23.
rate_limit.requests_per_minuteandrate_limit.requests_per_hourare dead:nothing in the codebase reads either value. Actual rate limiting is driven by
server.disable_rate_limitingandserver.ratelimit_public_rpm, which areseparate, classified, and live.
#812 classified both keys, which was the behavior-preserving fix — it cleared the
live 404-on-GET-for-a-listed-key inconsistency. But classification leaves two
settings an administrator can read and edit that silently do nothing, which is
arguably a worse trap than the 404 it replaced, since a 404 at least fails loudly.
This issue removes them.
Acceptance Criteria
rate_limit.requests_per_minuteandrate_limit.requests_per_hourare removedfrom the
SettingDefregistry ininternal/config/setting_defs_*.go, and thereforefrom the
DefaultSystemSettings()andGetMigratableSettings()projections.feat(config): make one registry the authoritative declaration of every setting #812 are updated to reflect the removal, and still may only shrink.
Both k3s and RDS hold these rows today — leaving them as orphans would
reintroduce exactly the list-but-404 shape fix(api): rate_limit.* settings are listed but 404 on GET/DELETE — unclassified keys seeded straight into the database #809 was about, since a row with no
registry entry resolves to
VisibilityInternal.cmd/dbtoolis updated in line with the schema/seed change, per the project'sdbtool-follows-schema rule.
rate_limit.requests_per_minuteas an illustrativeexample (
api/models/system_setting.go:13, and the generated example inapi/api.go) no longer reference a key that does not exist. Theapi/api.gooccurrence comes from the OpenAPI spec, so the example changes in
api-schema/tmi-openapi.jsonand is regenerated.test by name. (Per the rule established in feat(config): make one registry the authoritative declaration of every setting #812 — a guardrail nobody has watched
fail is not evidence.)
Notes
names promise. That is a feature (per-user rate limits), needs its own design, and
is not what the names currently imply is already happening.
oracle-db-adminmust sign off before completion. Note the latent ORA-01400 thatfeat(config): make one registry the authoritative declaration of every setting #812's Oracle review found in
SeedDefaultswhen reasoning about the seed loops.