You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the liveapp priorities control panel. The loop uses priorities.md as its north
star — but treats it as a dated hypothesis, re-examined when the evidence moves, never as
permanent truth. This panel makes it visible and lets you steer it without editing files.
Last re-tune (already applied)
The loop keeps these priorities current by itself — a priority it judges satisfied comes off
the list without waiting for you. This is what it changed most recently:
Every re-tune is announced as a comment on this issue, labelled user fyi.
To steer the priorities
Comment steer priorities: <what should matter more/less> — e.g.
steer priorities: the Telegram flows matter more than layout guards right now
and the loop folds it into priorities.md and reflects it into the next cycle.
To stop automatic re-tuning altogether, comment reflect off.
Only you can do this: comments from the loop itself, or any bot, are ignored — it can
never re-tune its own priorities.
This loop runs as @lukaso-bot. Commands from @lukaso-bot are ignored — only other accounts can steer it.
Current priorities.md (last changed: 2026-09-04; the last pass judged the previous document DRIFTING and re-tuned it)
Priorities
What released is, what must never break, and where it hurts today. Inferred from the code on 2026-06-25; re-examined 2026-08-24, 2026-08-27, 2026-08-29, and on 2026-09-04 against live signal (production probes, open issues, recent loop journals). The last two passes were unanchored re-derivations.
What the product does
Answers "which release first contains this commit?" for GitHub and a curated set of GitLab hosts. No clone. Four surfaces, one algorithm (packages/core/src/find-release.ts):
Web (packages/web) — paste a commit/SHA/PR/MR/issue, get the first release tag, a shareable permalink, and an auto-updating badge.
CLI (packages/cli, npm git-released) — same answer in a terminal, including private repos via a host-scoped token.
Badge (/…/badge.svg) — shows "not yet released" and flips to the version tag automatically once a release contains the commit.
OG renderer (packages/web-og) — PNG unfurls for permalinks.
Critical user journeys
Web lookup → permalink → share. Paste any GitHub commit URL / bare SHA / PR / issue, or a federated GitLab commit/MR. Get the first containing release + also-in list + shareable /r/… or /h/… permalink. The whole algorithm runs in the Worker under a wall-clock deadline. The homepage is the front door and the share is how the product spreads — the unfurl is the tail of this journey, not a separate feature.
Auto-updating badge. Embedded in PRs/READMEs. Correctness here is a cache problem as much as a lookup problem: not-yet must be short-cache so it flips; released must be long-cache.
Federated GitLab (gitlab.com, GNOME, KDE, Debian, freedesktop, Kitware). Anubis-protected hosts (freedesktop/GNOME) route provider fetches through the container relay; if the relay is unavailable they must degrade to the "use the CLI" card, never hard-fail.
PR/MR as input. Resolve to the merge commit, then find its release. PR title becomes the headline.
Private repos (CLI). Token resolves per host and is never sent to a host that didn't issue it.
Bulk lookup (POST /api/lookup-bulk) — many inputs, shared deadline and tag-list memoization, capped at MAX_BULK.
What must never break
Correctness and safety invariants, not features:
First-release correctness. Sort tags by date ascending; never filter by date for containment. Ancestry (/compare) is the sole containment test. The gallop+bisect fast path and the containingTags shortcut must return the same answer a linear scan would. (CLAUDE.md "Algorithm guardrails", D24.)
Token host-scoping. A credential only ever goes to its issuing host. No generic token as a cross-host fallback (except GITLAB_TOKEN for gitlab.com by design). Security boundary.
A token-derived answer must never land in an anonymous shared slot. Host-scoping governs where a credential goes; this governs where the answer it bought is stored. The result cache key has five parts and none of them is auth, so this invariant does not hold on main. (PAT-computed results are cached in a public, auth-agnostic key namespace #164)
Release-notes sanitization. Provider release bodies are untrusted HTML. Strip <script>/<svg>/<iframe> and javascript: URIs before render.
Cache semantics on every auto-updating artifact — badge and OG card. Released → long cache; not-yet/checking → short cache. Get it wrong and the artifact stops flipping when the release lands. The badge honours this; the OG card does not. Stated for badges alone, this invariant read as satisfied while the identical bug shipped on a second surface. (OG card for a not-yet-released commit is cached 24h, so it never flips when the release lands #151)
Graceful degradation. Rate-limit, upstream-down, and Anubis-block paths show a recovery card (try-again / CLI-hint), never a stack trace or the wrong "not yet released."
Order of Worker publication.web before web-og (the Service Binding must exist). Publication is owned by CI on a push to main.
Current pain
The queue is frozen, and that is the whole story
Nothing has reached production in 14 days.main is still 0ee8e68, the live Worker matches it, the last merge was 2026-08-21, and the last human action on the repo was filing #154 on 2026-08-27. All four open PRs (#144, #153, #158, #163) are MERGEABLE, gates green, zero unresolved review threads anywhere. Every fix on this board exists only in a branch.
The loop has reported WIP limit reached (4 open PRs, limit 3) and ended idle on every cycle since 2026-08-29 (journals 09-01, 09-02, 09-03). Two of the four PRs holding that cap are one-click Dependabot merges (#153 npm-minor-patch, #163 changesets/action) — merging just those two unblocks the loop without touching any product code. That is the cheapest thing anyone can do on this repo right now.
The binding constraint is merge latency, not defect-finding. The highest-value work the loop can do is make each PR easier to merge; the second-highest is not to add to the pile; the third is work that does not consume a PR slot at all (see the probe item below). Filing another defect is the lowest-value thing available.
Severity order for whatever merges next
PAT-computed results are cached in a public, auth-agnostic key namespace #164 — a private-repo answer can be served to someone with no access, on main, today./api/lookup honours a caller-supplied X-User-Github-Token, then writes the result under ('res', host/path, sha|pr|issue, cull|strict, nopre|pre) — five parts, no auth component — and issue.tsx, pr.tsx, result.tsx read that same slot anonymously on public permalinks, title included. Pre-existing and reachable now; no open PR widens it and no open PR fixes it. It is the only confidentiality-class defect on this board, it outranks the entire OG cluster by severity, and it has sat 7 days with no branch. Two small fixes exist: namespace PAT-computed lookups, or don't cache them. When a PR slot opens, this one goes first.
Dependabot's weekly npm run wedges whenever a patch is 3-7 days old: cooldown default-days (7) exceeds semver-patch-days (3) #161 — the only dependency channel this repo has is wedged, and there is no second one. The weekly Dependabot npm run fails on the grouped job (reproduced 2026-08-28, job 33214471336). Mechanism, corrected and settled — do not re-derive: pnpm applies minimumReleaseAge to the whole resolution graph, so a patch admitted under the 3-day window drags in a transitive package newer than the 7-day window used by a later non-patch step, which kills the job. The fix is to make the two cooldown values equal; dependabot.yml is engine-managed, so it is routed upstream. Behind this, Dependabot security alerts are disabled on the repo (403) — the osv CI gate still detects High/Critical, but detection with no update path is half a control. hono ^4.12.32 carries four MEDIUM advisories fixed in 4.12.34 and no PR exists; bumping it by hand is a local call.
Does released CLI need a new version? #154 — the published CLI differs in behaviour from main, and the version call is the human's. Answered 2026-08-27 against the published tarball: eb014fd (the popular-projects removal) deleted the alias shorthand from packages/core/src/parse-input.ts, so main no longer accepts <alias> <sha> for the 13 catalog aliases, while git-released@0.2.0 on npm still does. The open decision: 0.3.0 shipping the removal, or 0.2.1 restoring the aliases in core. The durable gap underneath is unfixed — nothing states when a CLI version is cut. Proposed rule: any PR touching packages/cli/src or packages/core/src ships a changeset for git-released, enforced by a CI check. @released/core is ignored in .changeset/config.json, which is exactly why a core-only diff shipped a CLI behaviour change unnoticed.
The green probe is lying about OG, and fixing that costs no PR slot
On 2026-09-04 all 30 journeys passed, including all six OG renders as real-result PNGs, with 0 SYSTEM errors over 24h and 7d against 9596 AE events/24h and a 95% result-cache hit rate. That green is real for the front door and worthless for OG: the probe re-requests the same fixed OG URLs every cycle and so keeps exactly those warm. A probe that warms its own fixtures measures only that it warmed them.
The health-map's named UNCOVERED seam — cold-input OG render — has been open since 2026-08-17, eighteen days. The reason recorded for it losing every cycle ("drained review threads") expired on 2026-08-29: threads have been at zero and the loop has idled every cycle since. The probe lives in $LIVEAPP_STATE_DIR/bin/liveness-probe.mjs, outside the app repo — building it opens no PR, consumes no WIP slot, and is not blocked by the merge queue. It is therefore the correct work for an idle cycle at the cap, and "WIP limit reached" is not a reason to skip it. A real guard needs one of: a genuinely cold input each run (a SHA/PR never requested before), or an assertion on the tell. The cheap tell got more expensive — once fix(web-og): cache the OG card by terminality, not by result presence (#151) #158 merges, max-age=60 no longer means "placeholder" (a real not-yet/partial card is short-cached by design), so pair the header with the byte-size floor, or keep fixtures on stably-released commits.
A guard must assert the tell that distinguishes a real answer from the fallback. The cold-OG bug hid behind a 200 and a valid PNG. Status codes and non-empty bodies are not evidence; the cache header, the byte size, and the rendered value are.
Review rounds on an unmerged PR open more issues than they close
#144 has run nineteen rounds since 2026-08-17 and is still unmerged. Round 10 produced #156 and #157; reviewing #158 produced #159 — which is #155, already open three days, found again from the other end; round 16 produced #162, which asks whether the PR works at all; round 18 produced #164. The findings are real (#164 is the most severe thing on this board), but they are findings in adjacent, untouched code, surfaced because a reviewer was reading files the PR happens to touch. This is where nearly all of the loop's non-idle time has gone. Two responses, both working and worth keeping: smaller, single-issue PRs off a freshly-fetched main, and check the open queue before filing — a defect found twice is one issue with a second reference. A PR the human can read and merge in one sitting is worth more than a PR that fixes everything.
/internal/* keeps producing defects on inspection, which reads as under-designed rather than merely buggy. Four open defects (#150, #152, #156, #157) are on that one route and none came from a probe. It deserves one deliberate pass over its deadline, cache, and back-off semantics — after the queue drains, not stacked onto #144.
Structural constraints — currently green, watch and mitigate rather than grind
The osv override floors on main are load-bearing and unguarded. They keep the dependency gate green; a grouped Dependabot bump can rewrite them and no executable guard would catch it. A silent loss re-opens the CVE arc that closed 2026-08-20.
Unauthenticated GitHub rate limits on the web path. Structural; monitored via the AE error history (self-probe lookup_timeout is expected weather — a real signal only if it far exceeds ~1/cycle).
Shipped / no longer pain (status only — do not re-litigate)
Priorities for this app
This is the liveapp priorities control panel. The loop uses
priorities.mdas its northstar — but treats it as a dated hypothesis, re-examined when the evidence moves, never as
permanent truth. This panel makes it visible and lets you steer it without editing files.
Last re-tune (already applied)
The loop keeps these priorities current by itself — a priority it judges satisfied comes off
the list without waiting for you. This is what it changed most recently:
Every re-tune is announced as a comment on this issue, labelled
user fyi.To steer the priorities
Comment
steer priorities: <what should matter more/less>— e.g.and the loop folds it into
priorities.mdand reflects it into the next cycle.To stop automatic re-tuning altogether, comment
reflect off.Only you can do this: comments from the loop itself, or any bot, are ignored — it can
never re-tune its own priorities.
This loop runs as @lukaso-bot. Commands from @lukaso-bot are ignored — only other accounts can steer it.
Current priorities.md (last changed: 2026-09-04; the last pass judged the previous document DRIFTING and re-tuned it)
Priorities
What
releasedis, what must never break, and where it hurts today. Inferred from the code on 2026-06-25; re-examined 2026-08-24, 2026-08-27, 2026-08-29, and on 2026-09-04 against live signal (production probes, open issues, recent loop journals). The last two passes were unanchored re-derivations.What the product does
Answers "which release first contains this commit?" for GitHub and a curated set of GitLab hosts. No clone. Four surfaces, one algorithm (
packages/core/src/find-release.ts):packages/web) — paste a commit/SHA/PR/MR/issue, get the first release tag, a shareable permalink, and an auto-updating badge.packages/cli, npmgit-released) — same answer in a terminal, including private repos via a host-scoped token./…/badge.svg) — shows "not yet released" and flips to the version tag automatically once a release contains the commit.packages/web-og) — PNG unfurls for permalinks.Critical user journeys
/r/…or/h/…permalink. The whole algorithm runs in the Worker under a wall-clock deadline. The homepage is the front door and the share is how the product spreads — the unfurl is the tail of this journey, not a separate feature.npx git-released <input>→ first release. Human,--json,--slack,--markdownoutput. Exit codes drive scripting.POST /api/lookup-bulk) — many inputs, shared deadline and tag-list memoization, capped atMAX_BULK.What must never break
Correctness and safety invariants, not features:
/compare) is the sole containment test. The gallop+bisect fast path and thecontainingTagsshortcut must return the same answer a linear scan would. (CLAUDE.md "Algorithm guardrails", D24.)partialcarrying a gallopedfirstReleaseis an unconfirmed answer, so it has to stay revalidatable. Broken onmaintoday. (partial-with-a-gallop-hit is cached as terminal: 30-day TTL, never revalidated #155/partial-with-a-firstRelease is cached as terminal on the web + badge surfaces (30d / 24h), so a truncated traversal pins a possibly-wrong tag #159)GITLAB_TOKENfor gitlab.com by design). Security boundary.main. (PAT-computed results are cached in a public, auth-agnostic key namespace #164)<script>/<svg>/<iframe>andjavascript:URIs before render.webbeforeweb-og(the Service Binding must exist). Publication is owned by CI on a push tomain.Current pain
The queue is frozen, and that is the whole story
Nothing has reached production in 14 days.
mainis still0ee8e68, the live Worker matches it, the last merge was 2026-08-21, and the last human action on the repo was filing #154 on 2026-08-27. All four open PRs (#144, #153, #158, #163) are MERGEABLE, gates green, zero unresolved review threads anywhere. Every fix on this board exists only in a branch.The loop has reported
WIP limit reached (4 open PRs, limit 3)and ended idle on every cycle since 2026-08-29 (journals 09-01, 09-02, 09-03). Two of the four PRs holding that cap are one-click Dependabot merges (#153 npm-minor-patch, #163 changesets/action) — merging just those two unblocks the loop without touching any product code. That is the cheapest thing anyone can do on this repo right now.The binding constraint is merge latency, not defect-finding. The highest-value work the loop can do is make each PR easier to merge; the second-highest is not to add to the pile; the third is work that does not consume a PR slot at all (see the probe item below). Filing another defect is the lowest-value thing available.
Severity order for whatever merges next
main, today./api/lookuphonours a caller-suppliedX-User-Github-Token, then writes the result under('res', host/path, sha|pr|issue, cull|strict, nopre|pre)— five parts, no auth component — andissue.tsx,pr.tsx,result.tsxread that same slot anonymously on public permalinks, title included. Pre-existing and reachable now; no open PR widens it and no open PR fixes it. It is the only confidentiality-class defect on this board, it outranks the entire OG cluster by severity, and it has sat 7 days with no branch. Two small fixes exist: namespace PAT-computed lookups, or don't cache them. When a PR slot opens, this one goes first.33214471336). Mechanism, corrected and settled — do not re-derive: pnpm appliesminimumReleaseAgeto the whole resolution graph, so a patch admitted under the 3-day window drags in a transitive package newer than the 7-day window used by a later non-patch step, which kills the job. The fix is to make the two cooldown values equal;dependabot.ymlis engine-managed, so it is routed upstream. Behind this, Dependabot security alerts are disabled on the repo (403) — the osv CI gate still detects High/Critical, but detection with no update path is half a control.hono ^4.12.32carries four MEDIUM advisories fixed in 4.12.34 and no PR exists; bumping it by hand is a local call./internalcache-and-keying cluster — ten of the fifteen open defects, all parked behind merge. It sits on critical journey Build /how-it-works page #1 (the share), it is real, and none of it came from a probe: every one came from reading code or reviewing the fix for the previous one. One line each, detail in the issues: cold unfurls serve the placeholder and do not self-heal (Cold-cache OG unfurls serve the placeholder again (#53 regression) — probe is blind because it re-warms its own fixtures #143); cards key on a 7-char SHA while permalinks key on the full SHA (OG cards key on a 7-char SHA while permalinks key on the full SHA — the first unfurl never reuses the warm slot #147);/internal/*503s on a not-yet-released commit so the crawler keeps the placeholder (OG unfurls of a not-yet-released commit serve the neutral placeholder permanently (/internal 503s on NotYetReleasedError) #150); the not-yet card is pinned 24h so the one card whose job is to flip does not flip (OG card for a not-yet-released commit is cached 24h, so it never flips when the release lands #151, PR fix(web-og): cache the OG card by terminality, not by result presence (#151) #158 fixes it);/internal/*has no deadline, so a large repo's first unfurl runs ~20s and the crawler caches the placeholder (/internal/* blocks on findRelease with no deadline, so the FIRST unfurl of a large repo hands the crawler the placeholder #152); a partial-with-a-gallop-hit is cached as terminal for 30d and reported fresh forever (partial-with-a-gallop-hit is cached as terminal: 30-day TTL, never revalidated #155, re-filed as partial-with-a-firstRelease is cached as terminal on the web + badge surfaces (30d / 24h), so a truncated traversal pins a possibly-wrong tag #159 — still to be closed as a duplicate with itsbadge.ts:141half moved onto partial-with-a-gallop-hit is cached as terminal: 30-day TTL, never revalidated #155); deadline-heavy repos get a blank card plus one full traversal per minute after fix(web): align /internal/* result cache with the public routes (#143) #144 (Deadline-heavy repos get a permanently blank OG card and one full traversal per minute after #144 #156); the back-off bypass re-stamps the neg marker and starves human page views of a retry window (/internal/* back-off bypass re-stamps the neg marker, starving human page views of a retry window during an outage #157);ResultCardignoresresult.partial, so a truncated traversal unfurls as a final answer (web-og ResultCard ignores result.partial, so a truncated traversal unfurls as a final answer #160).caches.defaultmay be scoped to the invocation rather than to the URL passed tomatch()/put(), and a Service-Binding invocation arrives as the non-routablehttps://web/.... Nothing currently discriminates: unit tests use an in-memory store, theworkers.devpreview is not a custom domain, the docs are silent. A fix exists that holds under either hypothesis — haveweb-ogcall the binding onPUBLIC_BASE_URLinstead ofhttps://web— and it removes machinery instead of adding it. Nineteen review rounds went into fix(web): align /internal/* result cache with the public routes (#143) #144 before anything asked whether its premise held, and its empirical test needs fix(web): align /internal/* result cache with the public routes (#143) #144 live. This is the merge-decision question, and it is the human's: a +2526/−69 PR resting on an open premise is harder to merge than the small alternative.max-age=60; a nonexistent SHA → 15001B,max-age=60; production is 28899B long-cached. Same neutral treatment for both ⇒PlaceholderCardfor everything, almost certainlyINTERNAL_SECRETunset on preview. The fix is the human's:wrangler secret put INTERNAL_SECRETon bothreleased-web-previewandreleased-web-og-preview, same value. It gates fix(web): align /internal/* result cache with the public routes (#143) #144, fix(web-og): cache the OG card by terminality, not by result presence (#151) #158, and anything after them.main, and the version call is the human's. Answered 2026-08-27 against the published tarball:eb014fd(the popular-projects removal) deleted the alias shorthand frompackages/core/src/parse-input.ts, somainno longer accepts<alias> <sha>for the 13 catalog aliases, whilegit-released@0.2.0on npm still does. The open decision:0.3.0shipping the removal, or0.2.1restoring the aliases in core. The durable gap underneath is unfixed — nothing states when a CLI version is cut. Proposed rule: any PR touchingpackages/cli/srcorpackages/core/srcships a changeset forgit-released, enforced by a CI check.@released/coreisignored in.changeset/config.json, which is exactly why a core-only diff shipped a CLI behaviour change unnoticed.The green probe is lying about OG, and fixing that costs no PR slot
On 2026-09-04 all 30 journeys passed, including all six OG renders as real-result PNGs, with 0 SYSTEM errors over 24h and 7d against 9596 AE events/24h and a 95% result-cache hit rate. That green is real for the front door and worthless for OG: the probe re-requests the same fixed OG URLs every cycle and so keeps exactly those warm. A probe that warms its own fixtures measures only that it warmed them.
UNCOVEREDseam — cold-input OG render — has been open since 2026-08-17, eighteen days. The reason recorded for it losing every cycle ("drained review threads") expired on 2026-08-29: threads have been at zero and the loop has idled every cycle since. The probe lives in$LIVEAPP_STATE_DIR/bin/liveness-probe.mjs, outside the app repo — building it opens no PR, consumes no WIP slot, and is not blocked by the merge queue. It is therefore the correct work for an idle cycle at the cap, and "WIP limit reached" is not a reason to skip it. A real guard needs one of: a genuinely cold input each run (a SHA/PR never requested before), or an assertion on the tell. The cheap tell got more expensive — once fix(web-og): cache the OG card by terminality, not by result presence (#151) #158 merges,max-age=60no longer means "placeholder" (a real not-yet/partial card is short-cached by design), so pair the header with the byte-size floor, or keep fixtures on stably-released commits.app.onErrorbackstop (fix(web): app.onError backstop — uncaught exceptions degrade gracefully AND surface in the error history #99), the blank-PNG OG regression (fix(web-og): real per-commit OG card rendered a 0-byte PNG (blank unfurl) #56), an issue-badge route with no probe, and the whole cold-OG cluster (Cold-cache OG unfurls serve the placeholder again (#53 regression) — probe is blind because it re-warms its own fixtures #143). Event-driven rule: when a new route or input kind ships, re-derive the health-map inventory and add a read-only probe the moment it lands; when a newReleasedErrorclass is added, add it toCLIENT_ERRORSby class name so it reads as expected input, not a SYSTEM error. The map decays within about a week of a feature shipping — assume decay, re-derive rather than trusting the last "zero uncovered".Review rounds on an unmerged PR open more issues than they close
#144 has run nineteen rounds since 2026-08-17 and is still unmerged. Round 10 produced #156 and #157; reviewing #158 produced #159 — which is #155, already open three days, found again from the other end; round 16 produced #162, which asks whether the PR works at all; round 18 produced #164. The findings are real (#164 is the most severe thing on this board), but they are findings in adjacent, untouched code, surfaced because a reviewer was reading files the PR happens to touch. This is where nearly all of the loop's non-idle time has gone. Two responses, both working and worth keeping: smaller, single-issue PRs off a freshly-fetched
main, and check the open queue before filing — a defect found twice is one issue with a second reference. A PR the human can read and merge in one sitting is worth more than a PR that fixes everything./internal/*keeps producing defects on inspection, which reads as under-designed rather than merely buggy. Four open defects (#150, #152, #156, #157) are on that one route and none came from a probe. It deserves one deliberate pass over its deadline, cache, and back-off semantics — after the queue drains, not stacked onto #144.Structural constraints — currently green, watch and mitigate rather than grind
RELAY_SECRET, a built container image, and the CI token carrying Containers/Cloudchamber edit. If any is missing, freedesktop/GNOME silently fall back to the CLI card. Both relay hosts probe green each cycle; the fragility is structural, not an active break. Deadline-heavy repos get a permanently blank OG card and one full traversal per minute after #144 #156 and /internal/* back-off bypass re-stamps the neg marker, starving human page views of a retry window during an outage #157 both land load on this samemax_instances = 1singleton.containingTagsshortcut on the user-facing path. The same constraint is un-mitigated on/internal, which has no deadline at all (/internal/* blocks on findRelease with no deadline, so the FIRST unfurl of a large repo hands the crawler the placeholder #152), in how a truncated traversal's result is cached (partial-with-a-gallop-hit is cached as terminal: 30-day TTL, never revalidated #155), and in what a refusedpartialcosts upstream (Deadline-heavy repos get a permanently blank OG card and one full traversal per minute after #144 #156).mainare load-bearing and unguarded. They keep the dependency gate green; a grouped Dependabot bump can rewrite them and no executable guard would catch it. A silent loss re-opens the CVE arc that closed 2026-08-20.lookup_timeoutis expected weather — a real signal only if it far exceeds ~1/cycle).Shipped / no longer pain (status only — do not re-litigate)
BareShaErrorkept as general input validation. Its CLI side effect is what Does released CLI need a new version? #154 is deciding.main,osv dependency scanis green, osv gate fails on main's lockfile: 3 High advisories (nanoid, js-yaml, undici) block every PR #145/fix(deps): raise override floors to clear 3 High advisories (nanoid, js-yaml, undici) #146 closed. Do not re-derive an older "un-published security fixes" framing. (Latent follow-up: the floors have no guard — above.)released-web-preview+released-web-og-preview) deploy per non-Dependabot PR viapreview.yml+[env.preview]; the DO wall is cleared by re-declaringGitlabRelaywithANUBIS_HOSTS="". Human finished the preview-secret + GitHub-app setup 2026-08-04. The relay is deliberately off in preview. The OG-blind preview is tracked as pain above (Preview OG Worker renders the neutral card for every input — og-preview can't reach web-preview /internal (likely INTERNAL_SECRET unset on preview) #148), not as a residual caveat.cache-controloverride fix (fix(web-og): stop workers-og's 1-year immutable default overriding OG cache-control #141) are merged and live. The rendering works; the caching and keying around it do not — that is the open cluster above.Open deferred work (open issues)
Human/demand-gated — do not pick up on a routine cycle:
/api/v4/versionauto-discover (Auto-discover unknown GitLab hosts via /api/v4/version probe #9,wontfix) and per-host PAT UI (Per-host PAT UI in the web app #7,blocked) stay demand-gated. Not a resumable queue — scope is frozen on GitHub + the curated GitLab hosts. Leverage is in making the existing surfaces excellent, not expanding them.Test gates
pnpm -r test,pnpm -r typecheck,pnpm -r build. TDD: failing test before implementation. Algorithm changes get afind-releasetest first.Human steer (2026-07-26)