Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
211 changes: 98 additions & 113 deletions CONTINUITY.md

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions actions/repository-intelligence/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,27 @@ separate review-only envelope remains publication-denied. See the collector
guide for pinned runtime acquisition, offline use, provenance, and Identity #69
adoption gates.

### Navigation branding

The shared shell packages the organization mark and GitHub icon locally, with
named, keyboard-focusable navigation links. Every routed page and the standalone
dashboard uses the same organization favicon with a relative bundle path.
Consumers receive these assets by selecting the reviewed immutable Relay
revision and rebuilding; existing host branding outside the subtree is unchanged.

- `assets/egohygiene.png` preserves the exact organization avatar observed on
2026-10-10 at `https://avatars.githubusercontent.com/u/196492251?v=4`
(GitHub organization `egohygiene`, ID `196492251`; 460 × 460 pixels).
SHA-256: `cc09173cd26cade507423c22c5cca914cc424563d402341310fbe796ce81951a`.
This is a dated organization-owned branding capture, not an immutable upstream
revision or a runtime image request.
- `assets/github.svg` preserves the exact [existing SVG](https://github.com/egohygiene/egohygiene/blob/5eaa26a1c82fbbc7a351b4cc774758161441f56f/publishing/sources/magazine/app/src/stories/assets/github.svg)
(blob `dc513528ca899d698d55418bd3a39c036d01e21e`).
SHA-256: `a4113cf2c6e0e6fba99a85498e6b7c84c42d8c13928f89e0eede78bc596e0add`.
Its source repository's [MIT notice](https://github.com/egohygiene/egohygiene/blob/5eaa26a1c82fbbc7a351b4cc774758161441f56f/LICENSE)
is Copyright (c) 2026 Ego Hygiene; GitHub retains its trademark rights.
CSS presents the unchanged dark mark in white against the shared dark header.

## Consumer contract

After a complete-history checkout, the production integration can be one step:
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions actions/repository-intelligence/assets/github.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 6 additions & 1 deletion actions/repository-intelligence/assets/site.css
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,12 @@ button, input, select { font: inherit; }
backdrop-filter: blur(18px);
}

.ri-global-header nav { display: flex; gap: 1.25rem; font-size: 0.88rem; }
.ri-global-header nav { display: flex; align-items: center; gap: 0.35rem; }
.ri-global-link { display: inline-flex; align-items: center; justify-content: center; min-width: 3rem; min-height: 3rem; border-radius: 0.7rem; }
.ri-global-link:hover { background: rgba(174, 186, 228, 0.1); }
.ri-global-link img { display: block; width: 2rem; height: 2rem; object-fit: contain; }
.ri-global-link--organization img { width: 2.75rem; height: 2.75rem; }
.ri-global-link--github img { filter: brightness(0) invert(1); }

.ri-brand {
display: inline-flex;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2089,6 +2089,7 @@ def render_html(
<meta name="color-scheme" content="dark" />
<meta name="description" content="Repository intelligence for {escaped(repository["name"])}." />
<title>Repository intelligence · {escaped(repository["name"])}</title>
<link rel="icon" type="image/png" href="{escaped(asset_prefix)}egohygiene.png" />
<link rel="stylesheet" href="{escaped(asset_prefix + stylesheet_name)}" />
</head>
<body>
Expand Down Expand Up @@ -2221,6 +2222,8 @@ def write_dashboard_bundle(
)
atomic_write_text(output_root / stylesheet_name, stylesheet_source.read_text(encoding="utf-8"))
atomic_write_text(output_root / "explorer.js", script_source.read_text(encoding="utf-8"))
favicon = Path(__file__).resolve().parents[1] / "assets/egohygiene.png"
(output_root / "egohygiene.png").write_bytes(favicon.read_bytes())
if provenance is not None:
atomic_write_text(
output_root / "provenance.json",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2329,13 +2329,14 @@ def shell_document(
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Repository Intelligence {escaped(route_label)} view for {escaped(repository)}.">
<title>{escaped(route_label)} · {escaped(repository)} · Repository Intelligence</title>
<link rel="icon" type="image/png" href="{escaped(prefix)}egohygiene.png">
<link rel="stylesheet" href="{escaped(prefix)}site.css">
</head>
<body data-ri-route="{escaped(route)}" data-ri-repository="{escaped(repository)}" data-ri-commit="{escaped(source_commit)}">
<a class="ri-skip" href="#main-content">Skip to view content</a>
<header class="ri-global-header">
<a class="ri-brand" data-preserve-context href="{escaped(prefix)}"><span aria-hidden="true">EH</span><strong>Repository Intelligence</strong></a>
<nav aria-label="Global navigation"><a href="https://github.com/egohygiene">Ego Hygiene</a><a href="{escaped(repository_url)}">Repository source</a></nav>
<nav aria-label="Global navigation"><a class="ri-global-link ri-global-link--organization" href="https://github.com/egohygiene" aria-label="Ego Hygiene" title="Ego Hygiene"><img src="{escaped(prefix)}egohygiene.png" alt="" width="44" height="44"></a><a class="ri-global-link ri-global-link--github" href="{escaped(repository_url)}" aria-label="Repository source on GitHub" title="Repository source on GitHub"><img src="{escaped(prefix)}github.svg" alt="" width="32" height="32"></a></nav>
</header>
<div class="ri-layout">
<aside class="ri-sidebar" aria-label="Repository Intelligence navigation">
Expand Down Expand Up @@ -2501,6 +2502,9 @@ def write_site(
)
atomic_write(output_root / "site.css", stylesheet_source.read_text(encoding="utf-8"))
atomic_write(output_root / "site.js", script_source.read_text(encoding="utf-8"))
assets = Path(__file__).resolve().parents[1] / "assets"
(output_root / "egohygiene.png").write_bytes((assets / "egohygiene.png").read_bytes())
atomic_write(output_root / "github.svg", (assets / "github.svg").read_text(encoding="utf-8"))


def main() -> int:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
"dashboard/index.html",
"decisions/index.html",
"dependencies/index.html",
"egohygiene.png",
"explorer.js",
"github.svg",
"health/index.html",
"index.html",
"journey/index.html",
Expand All @@ -38,6 +40,7 @@
}
LEGACY_BUNDLE_FILES = {
"build-manifest.json",
"egohygiene.png",
"explorer.js",
"index.html",
"provenance.json",
Expand Down Expand Up @@ -1382,13 +1385,16 @@ def validate_canonical_assets(output_root: Path) -> None:
assets_root = Path(__file__).resolve().parents[1] / "assets"
expected = (
{
"egohygiene.png": assets_root / "egohygiene.png",
"explorer.js": assets_root / "explorer.js",
"github.svg": assets_root / "github.svg",
"site.css": assets_root / "site.css",
"site.js": assets_root / "site.js",
"styles.css": assets_root / "dashboard.css",
}
if (output_root / "now/index.html").is_file()
else {
"egohygiene.png": assets_root / "egohygiene.png",
"explorer.js": assets_root / "explorer.js",
"styles.css": assets_root / "dashboard.css",
}
Expand Down Expand Up @@ -1449,6 +1455,9 @@ def validate_privacy(
ROUTED_BUNDLE_FILES if (output_root / "now/index.html").is_file() else LEGACY_BUNDLE_FILES
)
for name in sorted(bundle_files):
if name == "egohygiene.png":
# This binary is byte-checked against the canonical asset before privacy validation.
continue
text = (output_root / name).read_text(encoding="utf-8")
decoded_text = decode_percent_layers(text)
if decoded_text is None:
Expand Down
Loading