The analysis
06 — What is still unverified, and the method
Scope: the verification chain drawn end to end, the revision this package documents, the largest hole in the chain, the licence terms that were quoted rather than read, the complete NOT VERIFIED register, the term table, and the method by which this package was produced.
Source root: as 01-premise-and-reaim.md §0.
1. The verification chain, drawn
Magieva monorepo (private)
internal/contentstudio/cinematography*.go
│
│ ◄── LINK 1: NOT AUDITED
│ A temporary Go harness was compiled inside the module and run.
│ Its output was captured to verification/go-reference-dump.json.
│ The harness source is preserved. It was never re-run by anyone
│ outside the Magieva checkout, and the checkout is not in this package.
▼
verification/go-reference-dump.json (3,003 lines, frozen)
│
│ ◄── LINK 2: MECHANICALLY CHECKED
│ python verification/differential_check.py → 289 checks, 0 disagreements
│ Tolerance 1e-6. Reproduced by this package.
▼
app/cinematographer/*.py (1,342 lines, pure stdlib)
│
├─── LINK 3a: MECHANICALLY CHECKED
│ app/tests/ → 69 tests, hand-computed expectations
│ Reproduced by this package.
│
│ ◄── LINK 3b: MECHANICALLY CHECKED
│ python app/web/parity_check.py → 28 fixtures, 0 mismatches
│ Three-way: JS↔fixtures, Python↔fixtures, Python↔JS live.
│ sha256 staleness guard over the six engine modules.
│ Reproduced by this package.
▼
app/web/cinematographer.js (843 lines, JS mirror)
│
│ ◄── LINK 4: NOT CHECKED
│ The panel renders these numbers. No browser test asserts that
│ what is on screen equals what the engine computed.
▼
app/web/index.html + app.js (the director's panel)
─────────────────────────────────────────────────────────────────────────
app/workflows/*.json (2 graphs, 60 nodes, 82 links)
│
│ ◄── LINK 5: STRUCTURALLY CHECKED ONLY
│ python app/workflows/validate_graphs.py → PASS both
│ Checks: JSON parses, class_type present, slot counts, links
│ resolve, acyclic, reachable from SaveVideo.
│ Does NOT check: that ComfyUI accepts the prompt, that the
│ node packs and weights are installed, that it runs, or that
│ it produces a clip.
▼
ComfyUI ◄── NEVER EXECUTED
─────────────────────────────────────────────────────────────────────────
app/cinematographer/nodes.py (698 lines, 6 nodes)
│
│ ◄── LINK 6: BROKEN, THEN PARTIALLY FIXED
│ ComfyUI's loader requires <pack_root>/__init__.py and does not
│ recurse. The documented clone puts the pack root at the repo
│ root, which has no __init__.py. A shim now exists at
│ app/__init__.py; the documented path is still broken.
▼
ComfyUI custom_nodes/ ◄── NEVER LOADED
Two links are mechanically checked end to end. Four are not.
| Link | Status | Checked by |
|---|---|---|
| 1. Go source → dump | NOT AUDITED | Nothing in this package |
| 2. Dump → Python engine | CHECKED | differential_check.py, 289 checks |
| 3a. Engine → unit tests | CHECKED | pytest, 69 tests |
| 3b. Engine → JS mirror | CHECKED | parity_check.py, 28 fixtures, 3 legs |
| 4. JS mirror → rendered panel | NOT CHECKED | Nothing |
| 5. Graphs → ComfyUI | NOT CHECKED | validate_graphs.py checks structure only |
| 6. Nodes → ComfyUI | NOT CHECKED | Nothing; the path was broken |
2. The revision this package documents
The entry is not a git checkout (git status → fatal: not a git repository). Revision pinning was therefore done by sha256 manifest.
2.1 The manifest
A manifest over the 44 source files (.py, .js, .mjs, .json, .md, .html, .css, .toml, .txt, LICENSE), excluding __pycache__ and .pytest_cache:
$ find . -type f \( -name '*.py' -o -name '*.js' -o -name '*.mjs' -o -name '*.json' \
-o -name '*.md' -o -name '*.html' -o -name '*.css' -o -name '*.toml' -o -name '*.txt' \
-o -name 'LICENSE' \) -not -path '*/.pytest_cache/*' -not -path '*__pycache__*' \
| sort | xargs shasum -a 256 > /tmp/cine-manifest.txt
$ wc -l < /tmp/cine-manifest.txt
44
$ shasum -a 256 /tmp/cine-manifest.txt
58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c /tmp/cine-manifest.txt
Manifest hash: 58d27eab06da1631333d6d5793de6205ca29c6bde3e15a340512d770dafe133c (44 files, observed 2026-10-29 17:38 PT)
2.2 The engine hash
The parity fixtures record their own hash over the six engine modules, constructed as sha256(Σ name ‖ \0 ‖ content ‖ \0) (app/web/parity_check.py:223-237):
engine_hash_sha256 = 24621deb23c66c8ffb501b97e8350f1d67c93c39626f8936a1805fcd1d67bd93
— app/web/parity_fixtures.json meta.engine_hash_sha256
The parity check recomputes it and reports "matches live engine" (parity_check.py:260-262), so the fixtures are not stale.
A second, independent aggregate over the same six modules:
$ find app/cinematographer -name '*.py' -not -path '*__pycache__*' | sort | xargs shasum -a 256 | shasum -a 256
cf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe -
Engine aggregate: cf24e2ba1eeadfd9e7b317fafc2c114710865c91f67b806e2d55fe337fb523fe
Per-module:
| Module | sha256 (first 16) |
|---|---|
geometry.py | 12b5f79083d37e4f |
framing.py | 4b8a5a2ff43f6678 |
scene.py | 875c080dd2d00c31 |
continuity.py | 7378087ee5f0fae1 |
autoframe.py | 20416b5997baf67e |
reliability.py | d9fdaa82a47318f9 |
nodes.py | 262a00103862ee83 |
__init__.py | 5cbba543b3eec096 |
2.3 The concurrency caveat
The source tree was being edited by another lane while this package was written. Three files changed during the writing of 05-adversarial-review.md:
| File | Change |
|---|---|
verification/README.md | The dead parity command was replaced; the parity row moved out of UNVERIFIED |
app/workflows/validate_graphs.py | SamplerCustomAdvanced slot count 1 → 2 |
app/tests/test_framing.py | F = 3.4567701 → F = 3.45679012345679 |
The engine modules did not change (the aggregate hash is stable), so every claim in this package about engine behaviour is pinned. Every claim about the three edited files is timestamped in 05-adversarial-review.md §10.
A reader re-running the manifest will get a different hash if further edits have landed. That is expected; the manifest's purpose is to say what was read, not to freeze the tree.
3. The largest hole: the Go dump's provenance
The adversarial review named it, and it is the single most important caveat in this package:
"No Magieva Go checkout. I could not re-run
go-harness/zz-cine-dump.go. I verified the Python side against the frozengo-reference-dump.jsononly. The dump's own provenance is unverifiable from here — if it were fabricated or stale, none of my claim-A work would detect it. This is the single largest hole in the verification chain, and it is inherent to the setup." —verification/ADVERSARIAL-REVIEW.md:673-676
3.1 What this means precisely
The entry's strongest claim is:
"289 differential checks, zero disagreements — the Python port reproduces the original Go cinematography implementation." —
verification/README.md:15
Stated precisely, the evidence supports:
The Python port agrees with
verification/go-reference-dump.jsonon 289 comparisons.
The step from there to "agrees with the Go implementation" requires a fact this package cannot establish: that the JSON was produced by the Go code it claims to have been produced by.
3.2 What makes it auditable but not audited
The harness source is preserved at verification/go-harness/zz-cine-dump.go, and the README gives the exact reproduction commands:
# verification/README.md:26-32
cp verification/go-harness/zz-cine-dump.go cmd/zz-cine-dump/main.go
GOWORK=off go run ./cmd/zz-cine-dump > /tmp/go-cine-dump.json
rm -rf cmd/zz-cine-dump
python verification/differential_check.py /tmp/go-cine-dump.json
So the claim is auditable: anyone with the Magieva checkout can re-run it in about a minute. It was not audited, because the checkout is not in this package and the reviewer did not have it.
3.3 The three ways the dump could be wrong
| Failure mode | Detectable from this package? |
|---|---|
| The dump was hand-written or fabricated | No |
| The dump is stale — produced from an older revision of the Go source | No |
| The dump was produced by a modified harness that pre-applies the port's own choices | No |
The third is the subtle one. A harness that called the Go functions with the port's own defaults would produce a dump that the port trivially matches. Nothing in the package rules this out.
3.4 What would close it
- Re-run the harness in the Magieva checkout and diff the output against the frozen dump. If they match byte-for-byte, link 1 is closed.
- Record the Go source revision (commit sha) alongside the dump.
- Record the harness's own sha256 in the dump's metadata.
None of the three was done.
4. The licence terms were quoted, not read
The licence argument in 02-licence-trap.md is the entry's second-strongest claim after the differential check. The review did not verify it:
"I did not read the LTX-2.x Community licence, the Wan 2.2 licence, or the MoGe-2 licence to confirm the revenue caps and territory exclusions quoted in the README." —
verification/ADVERSARIAL-REVIEW.md§13 (What I could not verify)
What was verified is narrower and different:
"F — Licence-clean / no trademark — CONFIRMED. No Higgsfield in filenames or app strings; no MiniMax H3, no closed API, no partner nodes, no network calls in the engine." —
verification/ADVERSARIAL-REVIEW.md:38
4.1 The distinction
| Claim | Status |
|---|---|
| The shipped code contains no Higgsfield trademark, no H3, no closed API, no partner nodes, no network calls | VERIFIED — grep clean (verification/ADVERSARIAL-REVIEW.md:654) |
| Wan 2.1/2.2 are Apache-2.0 with no revenue cap | QUOTED — from the recon, not read from the licence text |
| LTX-2.x has a revenue cap | QUOTED — same |
| MiniMax H3 excludes the US and requires ~$5k/month for local commercial use | QUOTED — same |
| MoGe-2's licence | NOT READ |
The licence reasoning is in 02-licence-trap.md, which cites the recon's inventory. The recon read the licence texts; this package did not, and the review did not.
4.2 Why the distinction matters here
The entry's licence position is "we chose Wan 2.2 because it is Apache-2.0 with zero caveats." That is a claim about a licence text. If the text says something else, the entry's central open-weights argument weakens.
The practical consequence is small — the entry ships no weights and no model code, so it is not distributing anything under those licences. But the argument is load-bearing for the "open-weights-only" property, and the argument rests on quotes.
5. The complete NOT VERIFIED register
Consolidated from verification/README.md:117-126, 03-SUBMISSION.md, the workflow _READMEs, and the adversarial review's §13.
5.1 Never executed
| Item | Why not | Consequence |
|---|---|---|
| ComfyUI loading the pack | No ComfyUI instance was available | The install path was broken and nobody noticed until the review simulated the loader |
| Either workflow graph | Same | Both graphs' _READMEs say NOT VERIFIED; the validator checks structure only |
| Any render | Same | LTX 2.3 + CrossView-Warp + MoGe-2 output quality is unknown |
| The panel in a browser | No browser test asserts rendered values | The JS mirror is proven equal to the engine; the rendering of those values is not |
| The Go harness | The Magieva checkout is not in this package | See §3 |
5.2 Never measured
| Item | Status |
|---|---|
| VRAM | "MEASURED: nothing. No timing, no VRAM figure, no output." |
| Runtime / latency | Same |
| The reliability envelope (±45° azimuth) | CrossView-Warp's documented trained range, not independently measured (verification/README.md:123) |
The size_importance absolute values | Explicitly disclaimed (scene.py:15-20); the differential check skips the value (differential_check.py:241-244) |
| The 14-rule count in the Go source | Inherited from the recon (analysis/11-contentstudio-inventory.md:7), not re-derived |
| The 38-rule count in the rulebook | Same |
5.3 Never checked
| Item | Status |
|---|---|
eyeline (rule 12 of 14) | Never differentially verified — both extras fixtures have one character (scene.py:231; verification/ADVERSARIAL-REVIEW.md:203-211) |
| 12 engine constants | Unconstrained by all three harnesses (verification/ADVERSARIAL-REVIEW.md:614) |
| Boundary behaviour of any rule | No fixture sits on a boundary (verification/ADVERSARIAL-REVIEW.md:155-158) |
Scene correction strings | Skipped, and they diverge (em dash vs hyphen) |
Continuity detail strings | Skipped, and three of four diverge (°/≥/— vs deg/>=/-) |
AutoFrameGroup | Not ported; the entry says so (verification/README.md:66) |
| Browser coverage | One viewport, Chrome, local http.server. No CDN-offline fallback, no Firefox/Safari, no mobile |
| Input names beyond the flagged set | Slot counts verified for all 33 class types; input names only for the flagged nodes |
5.4 Never obtained
| Item | Status |
|---|---|
| A comfy.org login | "We do not have a comfy.org login." (03-SUBMISSION.md:10) |
| The competition judging rubric | Unpublished (verification/README.md:125) |
| The demo video | "⛔ not recorded" (03-SUBMISSION.md:39) |
| The social post | "⛔ not posted" (03-SUBMISSION.md:40) |
| A published repo | "⛔ blocked" (03-SUBMISSION.md:38) |
5.5 Never read
| Item | Status |
|---|---|
| The LTX-2.x Community licence text | Quoted from the recon |
| The Wan 2.2 licence text | Quoted from the recon |
| The MoGe-2 licence text | Not read |
| The MiniMax H3 licence text | Quoted from the recon |
| The CrossView-Warp licence text | Quoted from the recon (Apache-2.0) |
6. The term table
The terms used throughout this package, defined for this subject.
| Term | Meaning here | Example |
|---|---|---|
| Reproduced | A command in this package was re-run during writing and produced the stated output | differential_check.py → 289; parity_check.py → PASS; pytest → 69 passed |
| Checked | A harness inside the entry mechanically verifies it, and the harness was re-run | The 289 differential checks; the 28 parity fixtures; the graph validator |
| Constructed | True by construction and checkable by reading, with no run required | The engine has no network calls; converged is assigned from report.overall_pass |
| Measured | Recorded from a real execution of the artefact | Nothing in this entry is measured. No render, no VRAM, no timing |
| Quoted | Taken from a source that was read by someone else and not re-read here | The licence terms; the 14-rule count |
| Broken | A runnable check contradicts it, or the documented path fails | app/README.md:41 — the nodes do not appear (partially fixed) |
| Stale | Was true of an earlier revision and was not updated | verification/README.md:122 listed parity as UNVERIFIED (now fixed) |
| NOT VERIFIED | Could not be confirmed by any means available | ComfyUI loading the pack; either graph running; any render |
| Live | Not applicable to this entry. Nothing in this package was observed running in its target environment | — |
| Flag-off | Not applicable. The entry has no feature flags | — |
The two inapplicable terms are stated rather than dropped, because their absence is itself the finding: this entry has no live surface. Every claim about it is a claim about source code, a harness, or a JSON file. Nothing was observed running.
6.1 The term distribution
| Term | Count of distinct claims |
|---|---|
| Reproduced | 4 (differential, parity, pytest, validator) |
| Checked | 3 harnesses |
| Constructed | Several (no network calls, converged assignment, pure-stdlib engine) |
| Measured | 0 |
| Quoted | 5 licence terms + 2 rule counts |
| Broken | 1 CRITICAL (partially fixed) |
| Stale | 1 (fixed) |
| NOT VERIFIED | 20+ |
Zero measured claims. That is the honest headline of this package, and it is why the entry's own honesty ledger (03-SUBMISSION.md:133-145) is the right artefact to lead with.
7. The method
7.1 How this package was produced
| Step | What was done |
|---|---|
| 1 | Read the entry's own documents in full: 00-BREAKDOWN.md, 01-SPEC.md, 02-DEMO-SCRIPT.md, 03-SUBMISSION.md |
| 2 | Read the recon: analysis/10-comfyui-substrate-inventory.md, analysis/11-contentstudio-inventory.md, analysis/20-competition-brief.md |
| 3 | Read the verification lane: verification/README.md, verification/differential_check.py, verification/ADVERSARIAL-REVIEW.md, verification/go-reference-dump.json (structure) |
| 4 | Read the build: all six engine modules, nodes.py, both graphs, validate_graphs.py, all four test files, all of app/web/ |
| 5 | Read the prior teardown: client-reports/higgsfield-cinema-studio-4.0/README.md, analysis/00-SYNTHESIS.md, analysis/50-verdict.md, analysis/60-risks-and-limits.md |
| 6 | Re-ran the differential check, the unit suite, the parity check, and the graph validator |
| 7 | Recomputed the gating-rule arithmetic from RULE_WEIGHTS (03 §6.4) |
| 8 | Decomposed the 289 counter from the five increment sites (04 §3.3) |
| 9 | Manifested the tree by sha256 and pinned the engine hash |
| 10 | Observed the remediation state directly from the tree, timestamped |
7.2 The rules this package followed
| Rule | How it was applied |
|---|---|
Every factual claim about code carries path:line | Every table row and quotation |
| Do not overstate | The term table (§6) exists for this purpose |
| Say NOT VERIFIED when not run | §5 is a complete register, not a sample |
| Distinguish reproduced from quoted | §6's terms |
| Do not name anything after a Higgsfield product | The pack is ComfyUI-Cinematographer; the category is Cinematographer |
| Do not claim we open-sourced Higgsfield's platform | 01-premise-and-reaim.md §2.4 |
| Do not modify the source entry | Read-only throughout; the manifest records what was read |
7.3 What this package did not do
| Not done | Why |
|---|---|
| Run ComfyUI | Not available |
| Execute a workflow graph | Same |
| Produce a render | Same |
| Re-run the Go harness | The Magieva checkout is not in this package |
| Read any licence text | Out of scope for a documentation package; the quotes are attributed |
| Add boundary fixtures | That is a fix to the entry, not documentation of it |
| Fix any defect in the entry | Write scope is this package alone |
| Audit the panel in a browser | No browser test harness was set up |
7.4 The one thing this package added that the entry did not have
Three findings, each surfaced by re-deriving rather than re-reading:
- The gating-rule arithmetic (
03§6.4). Only four rules can ever fail a frame, andheadroom— the demo's headline example — gates only in a close-up. The demo shows a rule-level FAIL that does not change the frame's verdict. - The 289 decomposition (
04§3.3). 243 of the 289 are per-rule field comparisons; 46 are whole-object or invariant checks. The units are not homogeneous. - The rule-surface vs gating-rule distinction (
03§6.5). Of 14 rules, 4 never fail and 8 more cannot fail the frame in at least one shot type. "14 rules" is the right number for the rule surface and the wrong number for the rules that can fail a frame.
All three are arithmetic consequences of constants the entry already published. None required running anything.
8. The timeline
Reconstructed from file mtimes and the documents' own statements.
| Time (PT) | Event | Evidence |
|---|---|---|
| — | Brief received: Comfy Org "Open Source Higgsfield" LA Build Night | 00-BREAKDOWN.md:1-10 |
| — | Premise checked and found false; entry re-aimed | 01-premise-and-reaim.md §2-4 |
| — | Spec frozen | 01-SPEC.md:3 |
| — | Build lanes run in parallel: engine, nodes, panel, graphs | — |
| — | Differential check run: 289 checks | verification/README.md:15 |
| — | Unit suite run: 69 passed | verification/README.md:98 |
| — | Panel parity run: 28 fixtures, 0 mismatches | app/web/README.md:136 |
| — | Adversarial review written: 740 lines, 17 defects, 1 CRITICAL | verification/ADVERSARIAL-REVIEW.md |
| 17:32 | app/__init__.py shim created | mtime |
| 17:34–17:38 | Three defect fixes land: dead command, slot count, F constant | mtimes |
| 17:38 | This package's snapshot: manifest 58d27eab…, engine cf24e2ba… | §2 |
| 2026-10-30 09:00 | Deadline | 00-BREAKDOWN.md |
The gap between the review landing and the deadline is roughly 15 hours. The CRITICAL defect was still open at the snapshot.
9. What a reader should do to close the gaps
In priority order, with effort estimates.
| # | Action | Closes | Effort |
|---|---|---|---|
| 1 | Add a repo-root __init__.py (or change the documented clone target, or move cinematographer/ to the root) and load it in a real ComfyUI | The CRITICAL defect; link 6 | 30 min |
| 2 | Add one boundary fixture per threshold | The 12-constant hole; the largest verification gap | 2 hours |
| 3 | Re-run the Go harness and diff against the frozen dump | Link 1, the largest hole in the chain | 10 min with the checkout |
| 4 | Add a two-character scene fixture | eyeline | 20 min |
| 5 | Fix the scene/continuity strings to match Go, or disclose the divergence | The "value-for-value" claim | 30 min |
| 6 | Execute one graph in ComfyUI and record the outcome | Link 5 | 1 hour + weights |
| 7 | Read the four licence texts and confirm the quoted terms | The licence argument | 30 min |
| 8 | Add a browser assertion that rendered values equal engine values | Link 4 | 1 hour |
| 9 | Reconcile the demo script to the panel's actual states | Defects #9, #10 | 20 min |
| 10 | Record the Go source revision in the dump's metadata | Link 1's auditability | 5 min |
Items 1 and 2 are the two that matter. Item 1 is the difference between an installable pack and an empty category. Item 2 is the difference between a verification story that survives a curious judge and one that does not.
10. Evidence index for this file
| Claim | Primary source |
|---|---|
| The differential result | verification/README.md:15; re-run in 04 §3.5 |
| The parity result | app/web/README.md:136; re-run in 04 §4.3 |
| The unit result | verification/README.md:98; re-run in 04 §5.2 |
| The validator result | verification/ADVERSARIAL-REVIEW.md:381-385; re-run in 05 §5.1 |
| The dump's provenance hole | verification/ADVERSARIAL-REVIEW.md:673-676 |
| The harness reproduction commands | verification/README.md:26-32 |
| The licence terms were not read | verification/ADVERSARIAL-REVIEW.md §13 |
| The licence-clean grep | verification/ADVERSARIAL-REVIEW.md:38, :654 |
| The UNVERIFIED table | verification/README.md:117-126 |
| The reliability envelope caveat | verification/README.md:123 |
eyeline unverified | verification/ADVERSARIAL-REVIEW.md:203-211 |
| The 12 unconstrained constants | verification/ADVERSARIAL-REVIEW.md:614 |
| The boundary-blindness | verification/ADVERSARIAL-REVIEW.md:155-158 |
| The skipped fields | verification/ADVERSARIAL-REVIEW.md:164-201 |
| The submission blockers | 03-SUBMISSION.md:8-40 |
| The honesty ledger | 03-SUBMISSION.md:133-145 |
| The engine hash construction | app/web/parity_check.py:223-237 |
| The fixture metadata | app/web/parity_fixtures.json meta |
| The gating-rule arithmetic | 03 §6.4 |
| The 289 decomposition | 04 §3.3 |
| The remediation state | 05 §10, observed 2026-10-29 17:38 PT |