FrankenSuite research program · A shareable brief

Franken Surveillance System The Camera Stack That Files Its Own Incompleteness

A shareable brief from the FrankenSuite research program. Every claim below traces to the assessed repository; sources are linked at the end. Assessment pinned September 22, 2026.

Assessment pinned September 22, 2026 (the assessed commit)·~1,304 words·5 sections·Every claim traceable to a source
Six definitions. NODUS is the program’s four-ring verdict scale (Invest, Pilot, Explore, Monitor) assigned per assessment packet. TRL is technology readiness level, scored 1 to 9 per packet. CI is continuous integration: the project’s automated test runs. The pin is the exact commit the assessment froze on; every claim is evaluated at the pin, not at HEAD. The rider is the license clause withholding all rights, including benchmarking and analysis, from OpenAI, Anthropic, their affiliates, and anyone acting for them. Bus factor is how many people can leave before the project stalls; it is 1 for every repo here.

01 · What it is

What a network video recorder is, and why it matters

A network video recorder, or NVR, is the software behind a security camera. It takes the feeds, records them, watches for objects (a person, a car, a dog) and alerts you when something crosses a zone you drew. Your doorbell clips and driveway alerts live in something like this.

It matters for three reasons. First, scale: cameras are cheap, homes and small businesses have several, and owners increasingly want local control without a cloud subscription. Second, the AI shift: detection that once needed a server now runs on a small accelerator at home. Third, trust: a system that decides "intruder" versus "cat" is making claims about the physical world, and most systems cannot tell you what they do not know.

The lane has an owner. Frigate, Blake Blackshear's MIT-licensed NVR, is described by an independent NVR comparison as the most popular self-hosted option for homelab and Home Assistant users, with mature hardware-accelerated detection. It records, detects, and alerts. It works.

The gap this project aims at is different. Consumer cameras are islands: a battery camera exposes only its app, a drone gives a superb view with no control SDK. And conventional NVRs record streams but do not build a calibrated, provenance-carrying world model that an autonomous agent can query and act on safely. The bet underneath everything here is that agents, not people, will be the primary consumers of surveillance infrastructure.

02 · Why build it

Why rewrite it in Rust?

More precisely: why build from a clean room instead of extending Frigate. The maintainer's answer is in the architecture docs. Bolting provenance, version-universe semantics, and agent legibility onto an existing NVR would inherit foreign runtimes (Python, Node, FFmpeg) and ambient-authority designs where any subsystem can touch anything. Only a clean room, he argues, lets every plane of the system be type-distinct from the start: packet truth, authority history, the agent's cognition, and effects are four separate planes, so an agent can never mistake a raw packet for a detection, or a detection for permission to act.

Rust is the bet under that argument: memory safety without a garbage collector, enforced by a compiler strict enough to hold the planes apart. The zero-dependency posture is the extreme version of the same instinct. The lockfile at the pin (the commit the assessment was pinned to) contains exactly 13 packages: the 13 workspace crates themselves. No serde, no tokio, no libc. The MJPEG decoder, the HTTP camera client, the tensor types, the recording layer: all first-party code on the standard library alone, with zero unsafe constructs in the tree.

The engineering case is the evidence chain. When an agent acts on camera footage (sending an alert, locking a door), the chain from photon to action should be auditable: content digests on retained bytes, an ordered history of what changed, and an explicit rule that a missing detection during a coverage gap is not evidence of absence. The project has a name for the latter: a coverage witness. Frigate detects objects; nothing in the lane certifies what the system doesn't know, because nobody is currently paying for that. That is both the project's unoccupied niche and its commercial problem.

The counter-argument is the reinvention surface. Rewriting every layer beneath you (codecs, containers, protocols, model execution) is an enormous tax paid before a single camera works. Whether the clean-room premium is worth it before anything is qualified is the open question.

03 · What was built

What the project actually built

The scale is startling: about 437,000 lines of Rust across 13 crates and 833 files, carrying 5,379 test attributes. All of it builds on the standard library alone. The reference implementation covers a native MJPEG codec, native HTTP camera recording (landed at the pin), content-addressed object graphs, an ordered authority history, and an agent "situation capsule" membrane that hands an agent an anchored summary of the world instead of subsystem replies. Commit velocity is agent-shaped: roughly 20 commits across the two days before the pin.

More interesting than the scale is the self-audit machinery. Commit messages carry machine-readable qualification trailers: "Rust compilation, tests, rustfmt, Clippy and native qualification NOT RUN: no Rust toolchain available." The performance ledger's first line reads "No runtime exists yet, so this ledger contains no performance wins." The README's IMPORTANT box says the repo is not yet a surveillance product. Every statement in the plan is meant to be labeled FACT, DESIGN, HYPOTHESIS, TARGET, or OPEN. A requirement counts as "implemented" only when seven criteria hold jointly, including deterministic reference tests, adversarial tests, and retained reproducible evidence. Under the maintainer's own bar, most of the project is DESIGN and TARGET, not FACT.

Evidence · CI status

What the project’s own CI said at the pin

  • At the pin, no CI (continuous integration: automated checks that run on every change) run had ever validated the current workflow: 622 runs recorded, zero successes. 570 were cancelled, 47 failed, and the only 4 successes belong to retired workflows no longer in the tree.

The uncomfortable findings

Uncomfortable finding

The pin's own run sat queued against self-hosted runners. About 63 percent of the last 40 commits admit tests were not run, and the pin's headline feature (native HTTP camera recording) was merged uncompiled, by its own commit message's admission. The declared sole async runtime, asupersync, appears nowhere in the dependency tree: zero manifests, zero lockfile entries, zero async functions in the code. The README's headline disclaimer ("does not yet acquire camera feeds, decode video, run models, or deliver alerts") had already gone stale days after it was written. source source The pin's recording commit outgrew it, and its status section counts twelve deep-dive audits where the tree holds fourteen. There are no releases. One maintainer. And the license is MIT plus a rider naming OpenAI and Anthropic as forbidden parties, barred from even analyzing the code. That exclusion matters: the two labs whose models would most plausibly operate the agent layer the project is built for may not touch it.

04 · Where it stands

Where it stands

In our program's terms: TRL 3, NODUS ring Explore. In plain English: this is analytical and experimental. A large, internally coherent reference implementation exists, but nothing has been demonstrated in an operational environment: no qualified run against a real camera, no release artifact, no independent validation. Substantive but unproven is the Explore ring's working definition.

Technology readiness

TRL 3 on a 1-to-9 scale.

NODUS ring

MonitorExplorePilotInvest

The program’s adoption ring for this project.

Verdict key

NODUS ring
Explore: The default for substantive-but-unproven work.
TRL
Technology Readiness Level, a 1-to-9 scale of how proven a technology is. This brief rates the project at TRL 3.
CI
Continuous integration: the project’s automated checks, run on every change.
The pin
The exact commit the assessment was pinned to. “At the pin” means as of that commit.

Evidence tiers

  1. Tier 1 · Verified — Confirmed by direct inspection of a fresh clone, an API response, or a live page read by the analyst.
  2. Tier 2 · CI-observed — Observed executing on live CI pages. Attests the suite runs, not that it is green, unless pass/fail is legible.
  3. Tier 3 · Maintainer claim — Asserted in README or docs by the maintainer; not independently executed or reproduced.
  4. Tier 4 · External — Independent sources: APIs, papers, press, third-party benchmarks. Absence of coverage is reported as a finding.
  5. Tier 5 · Inference — The analyst’s judgment. Always labeled; never presented as fact.

What this verdict rests on. Tier labels are the assessment packet’s own annotations.

  • Tier 1 · Verified: 5,379 tests and a 133-document corpus counted and sampled from the clone.
  • Tier: unassessed in packet: CI: 622 runs recorded, but no run ever validated the current workflow; whether a self-hosted runner sits behind the queued jobs is unknown.
  • Tier 3 · Maintainer claim: Nothing was compiled or executed; no camera hardware was touched.
  • Tier 4 · External: No independent coverage found.
  • Tier 5 · Inference: The Explore ring at TRL 3.

Should you use it?

No.

There is nothing to run yet: a 437,000-line codebase whose own documentation's first substantive sentence is a disclaimer, and 5,379 tests of unknown greenness.

Should you learn from it?

Yes.

The lessons are the point. The self-audit machinery is exportable: commit-level qualification receipts, a claim taxonomy that separates FACT from TARGET, a seven-way definition of "implemented" that most of the project's own code fails, a ledger schema for recording failures with revival conditions. Most projects inflate; this one files its incompleteness at the resolution other teams reserve for victories.

What would change the verdict, in order

  1. a green test run anyone can see, the first published local-qualification receipt, one qualified real-camera recording loop with retained evidence, asupersync actually entering the dependency tree, a second maintainer
  2. Any one of these moves the conversation
  3. The license rider is the ceiling that caps everything
  4. Even a fully qualified system could not advance past Explore while the named-party exclusion stands
source

05 · What it teaches

What this teaches about building with agents

The transferable lesson is the qualification receipt.

AI-assisted development moves faster than any human can review: twenty commits in two days, an issue tracker with 1,262 open items. The usual response is to let the green badge imply what was never checked. This project does the opposite: every commit records, in machine-readable form, exactly what was not verified. The NOT-RUN trailer is the counterpart to passing CI that records the negative. Most teams quietly merge uncompiled work; this one writes the absence down.

The generalization is a norm worth stealing: when your agents outpace your verification, stop asking "is the code good" and require every change to carry a receipt. Compiled? Tests run? By whom, on what toolchain? What you have not verified, you write down. Verification debt, like technical debt, compounds silently unless it is booked. Book it.

Evidence

This page cites selected evidence. The full claim-by-claim audit is in the assessment packet.

Open a panel to see what each source evidences. Full claim-by-claim audit.

Full claim-by-claim audit with evidence tiers lives in the program's assessment packet.

The repositorygithub.com/Dicklesworthstone/franken_surveillance_system
README

its README

LICENSE

LICENSE, IMPLEMENTATION_STATUS.md, and docs/PERF_LEDGER.md, docs/NATIVE_HTTP_RECORDING.md, docs/NEGATIVE_EVIDENCE.md at the assessed commit

GitHub Actions run data

GitHub Actions run data

github.com/open-nvr/open-nvrgithub.com/open-nvr/open-nvr

the independent NVR comparison (github.com/open-nvr/open-nvr).