problem
Files in folders were an accident of storage, not a model of software. Most API surfaces sit where a file happened to end or a team happened to split — and our diffs measure bytes moved, not meaning changed.
# code is a graph, not a filesystem
The current disruption is a forcing function: to delegate work you must say what you mean, declaratively and intentionally — and once you do, API boundaries move to where they should have been all along.
Functions, tests, scenarios, commands, events, components, and architecture become top-level constructs. The folder tree is demoted to a projection. Diffs become semantic.
Files in folders were an accident of storage, not a model of software. Most API surfaces sit where a file happened to end or a team happened to split — and our diffs measure bytes moved, not meaning changed.
When agents write most of the code, the human contribution is intent — and intent must be stated declaratively or it cannot be delegated. Speech that says what it means pushes boundaries to the semantic edge: the command, the event, the scenario. The repo becomes one rendering of the graph among several.
top-level constructs
A named, typed, addressable unit of behavior — not line 214 of utils.ts.
A claim about behavior, linked to the construct it constrains.
A given/when/then path through the system, executable and citable.
The CQRS/ES triad as first-class objects: intent in, facts out, views derived.
An interface contract addressable independent of its import path.
Swimlanes, slices, and timelines as durable design objects, not whiteboard photos.
Context, container, component — the architecture graph kept live and linked to the code it describes.
Why a boundary sits where it sits, attached to the boundary itself.
A repo-level glossary: constructs get stable identities, and human names become metadata overlaid in the editor. A rename is a glossary edit, not a refactor — and tools recognize and enrich every reference.
semantic change
"Renamed PlaceOrder's timeout parameter and tightened its type" — not forty lines of churn because an import moved. In the spirit of opral/lix.
Content-addressed constructs (the Unison move) make moving code a no-op and renaming metadata. Review attention goes to behavior only.
"When did this boundary last move, and which decision moved it?" stops being commit-message archaeology.
Stories link to the constructs that implement them and the tests that constrain them — so coverage is measured against scope, not lines. "Which requirements have no tests" becomes a query.
prior art
A change-control SDK where changes are semantic entities, not text hunks.
Content-addressed functions; names are metadata; the codebase is a database.
Code lived in the system, not in files — the original everything-is-an-object workspace.
Structural parsing and AST-aware diffing as the practical on-ramp from text.
artifacts
unfiled.sudoscience.dev
constructs, edges, changes, decisions as a typed vocabulary
branchable scenarios as executable constructs, from the agentic workflow cookbook — a Scenario is a claim you can run, and the same claims enforce parity across two execution engines
the field above, filed: graph-based code modeling, moldable development, language workbenches, code-query systems, Unison, lix — captured into a typed concept ontology by the same research run that seeded Rhett. The prior-art section is the visible tip
render the graph to a conventional repo so toolchains keep working
edges
absorbed prior work — named, never shipped, not available
The repo-level object store draft: code as data in an append-only ledger, Functions addressed by checksum, invocation histories that become test cases. Unfiled is Sgittish with the boundaries argument in front.
Optic's component-driven code generation: units of code as React components rendered by a filesystem-oriented renderer, with changelog-aware SDK generation that wouldn't break clients. Generation as projection — the move Unfiled makes for everything.
Optic's query layer over API descriptions: one GraphQL surface regardless of how the spec was represented underneath. The same trick Unfiled plays on codebases.
Optic's event-sourced spec format: each change semantic and unambiguous ("did that key get renamed, or removed and re-added?"), attributed to a person, replayable into any version. Semantic diffs, shipped once already.
Say what you mean; let the boundaries follow. It started as the Sgittish draft and an "append-only object store on top of Git" experiment — the AI wave didn't create the idea, it created the audience.