Skip to content
Docs Operate Detent Mirrored upstream
native-review.md
Docs source v0.164.2 13d15fec6a14 View this file at the pinned commit ↗

Native Files / Review

Change detail renders a selected immutable customer-hosted diff bundle directly in the browser using the durable access contract. Hub and the dashboard serve metadata, decisions and authored discussion; neither fetches or proxies source. No repository clone, runner, GitHub API, pricing or payment service is needed to display a published bundle.

Select a version, enter a current project credential, and load its pinned bundle. The browser verifies the grant, manifest hash and identity, organization/project/ work-item/run/attempt/version scope, capture base/head/merge base, expiry, object sizes and hashes. A complete bundle's manifest digest must be pinned by the immutable version's code, manifest or diff reference. A matching version ID alone is insufficient. Current/older version and current repository gates remain visible.

File navigation supports additions/deletions, renames, line numbers, highlighting, unified and split layouts. Native capture enables rename detection with a 1,000-candidate exhaustive-search ceiling. Binary changes retain Git's textual binary marker and omit binary source bodies. Oversized files have explicit rendering-limit states; the existing verified artifact download remains available.

Review state and authorization

Discussion is change-level collaboration text with the selected version attached. Pasting source into discussion intentionally uses its ordinary collaboration custody. Decisions use the entered member credential, not the configured dashboard operator identity. Dashboard form origin/token, write scope and project scope also apply. Reviewers need a scoped Hub operator credential under the portable contract.

The browser sends the expected current version and bundle artifact ID, revision, manifest SHA-256 and head SHA. Hub verifies the receipt against the immutable version transactionally with the decision. New approval of an older version is rejected. Idempotent retries remain bound to actor, operation, version and request hash; changed replays conflict. An accepted old replay returns its original historical decision and never approves a new head. Existing direct API clients bind decisions through the URL version; the browser additionally requires a bundle.

Viewed files persist per reviewer, version, manifest and opaque file digest. No filename or source is sent for viewed state. New versions start unviewed and require renewed approval when policy requires review. Native decisions preserve GitHub required reviews, branch protection, check requirements, and human/automatic repository policy. Gate evidence remains separate.

Bounds and limited context

Work Bound
Manifest 1 MiB; 1,024 objects; 256 MiB total referenced bytes
Patch download/index One verified object, 16 MiB; 100,000 lines; 2,048 file sections
File navigation 100 buttons appended at a time
Selected file render 256 KiB; 2,000 patch lines; 16 KiB per line
Highlighting Explicit supported language; 500 lines / 64 KiB; 1,000 characters per highlighted line
Worker Five-second deadline per request; terminate on timeout, identity/bundle change or page removal
Rendered markup 4 MiB; 50,000 nodes; one file at a time
Viewed state 4,096 opaque entries per reviewer/version

Parsing/rendering runs in a worker with line matching and intraline comparison disabled. Unknown languages and long lines remain plain text. Renderer and highlighter output is rebuilt through an element/class allowlist without URLs, style attributes, event handlers, SVG or active elements. File labels use textContent. No source is persisted in browser storage, telemetry or server logs.

File selection rechecks membership. Credential/bundle changes and artifact expiry clear the viewer; page removal terminates workers and cancels downloads. Revoked, expired, missing, malformed, partial, corrupt or unreachable artifacts cannot appear as an empty successful review. Already downloaded bytes cannot be recalled. Runner independence still requires Hub authorization, artifact service and storage to remain reachable. There is no hosted fallback.

The surface uses changed files and captured context, not a full repository. Repository browsing, inline-thread relocation across rebases, suggested edits and conflict editing remain follow-ups. Combined/word diffs, compressed bundles and non-text source bodies are unsupported. The publisher must provide a Git patch; capture failures retain the existing explicit artifact availability state.

Dependency and security review

Reviewed September 7, 2026. Browser assets are vendored into local static assets; the viewer has no CDN/runtime package dependency.

Component Version License Purpose
diff2html 3.4.56 MIT Maintained Git/unified-diff parser and renderer compatible with vanilla JS / Templ / HTMX
highlight.js 11.12.0 BSD-3-Clause Common-language highlighting without autodetection
diff, bundled by diff2html 8.0.3 BSD-3-Clause Intraline dependency; comparison disabled here
@profoundlogic/hogan, bundled by diff2html 3.0.4 Apache-2.0 Fixed renderer templates; no caller-supplied templates

License notices are retained under static/vendor/diff2html and static/vendor/highlight. Registry metadata identifies diff2html 3.4.56 as the current release, modified January 31, 2026. Bundled dependency versions match its release lockfile. An isolated npm audit --omit=optional reported zero known vulnerabilities. This point-in-time advisory check supplements inspection of escaping, fixed templates, resource limits, and malformed/XSS browser tests; it is not a security guarantee.

Vendored SHA-256 digests:

a2110a09cee157bd5466da77be02107ac81a0baa2bc1f3fe81aac8183314598e  diff2html.min.js
8ab71eb09c51f501e5e25157d9cff100e46cc29bcbfc744d0b746d451fca7f53  highlight.min.js

Reproduce with npm pack diff2html@3.4.56 and npm pack @highlightjs/cdn-assets@11.12.0 in the worker temporary directory; inspect upstream licenses/advisories and compare these digests. Patch semantics: Git diff.

Validation: stdlib table-driven Go tests, tests/visual/change-review.spec.js, Chrome DevTools viewport screenshots, make generate, and make check.