Glossary term
Declared vs. enforced
Declared vs. enforced names the gap between what a system’s configuration lets you write down and what its runtime actually checks at execution time — a declaration that nothing enforces reads like a guarantee and behaves like a comment.
Also known as declared but not enforcedpaper permissionenforce or remove
In practice
Any system with a schema, a policy language, or a settings screen has two distinct sets: the keys you are allowed to declare, and the keys something actually acts on. They start out identical and drift apart quietly. A field marked required that only the browser form honours, so the API accepts it empty. A retention period no job ever reads. A permission flag one code path checks and the export endpoint does not. Each was true when it was written, and each stopped being true without anything failing — which is exactly why the gap survives audits. Nothing is broken, the setting is still there, and the screen still shows it as on.
The gap becomes structurally more dangerous once the configuration is authored by a model rather than by the people who built the runtime. A model learns a configuration format from its examples and documentation, and nothing in that material distinguishes a key the runtime enforces from a key it merely parses: both appear in samples, both validate, both read as authoritative. So an agent will confidently declare a control that does nothing — and, the sharp part, the human reviewing that diff sees a plausible, correct-looking line and approves it. This is the characteristic failure mode of AI-authored configuration: not invalid syntax, which every validator catches, but valid, plausible, inert declarations. The access-control special case has its own name: a paper permission, metadata that reads as a boundary and enforces nothing. A related tell is that a request-level filter and a server-enforced boundary look identical from outside, because both make two test accounts see the right thing.
One question separates the two sets, and it can be asked of any declaration: what fails, where, and how loudly, if I violate this? If the answer is "nothing," the line is documentation rather than a control and should be labelled as such. That leaves two defensible resolutions for any declarable key — enforce it, or remove it. Carrying an unenforced key is the third option and the one that costs real credibility, because everyone downstream reads it as a guarantee: the reviewer approving a change, the auditor sampling controls, and now the agent generating the next application from your examples.
ObjectStack closes the gap at authoring time rather than at run time: the definition surface is schema-validated, and a declaration the runtime would not enforce is rejected at the validation gate instead of shipping as a false guarantee. Where the check itself could silently degrade — a row-level rule whose predicate the engine cannot compile, for instance — the gate calls the runtime’s own decision procedure rather than modelling its behaviour, so "rejected by the linter" and "dropped with no enforcement" are the same boolean and cannot drift into two different answers.
Where this term is used
Pages and articles that put this term to work.
Product pages
- Permissions & security Role-based, row-level, and field-level access control with a permission matrix editor and an audit log viewer, record sharing, and tenant isolation — enforced on people and AI agents alike.
- Trust center Review the ObjectOS trust model: data residency, self-hosted deployment, identity, permissions, approvals, audit logs, AI tool boundaries, and enterprise security review materials.
- Agent developer Teach a coding agent the open ObjectStack target format, Strict TypeScript definitions, Zod schemas, validation gate, and whole-context proof needed to generate reviewable applications.
Articles
- ¿Lovable es seguro para producción? El problema de revisar el control de acceso Lovable es fuerte para prototipos rápidos. En producción no basta con que la app funcione: alguien debe poder revisar el control de acceso. RLS, filtros de frontend y escáneres de seguridad no son lo mismo.
- Cuando tu agente de IA borra la base de producción: el caso de las barreras de ejecución El incidente de base de datos de Replit muestra una lección estructural: el radio de impacto de un agent no debe depender solo de un prompt. Permisos, aprobaciones y auditoría deben ser impuestos por el runtime.