fix(queen): the map refreshes again -- zoom ceiling follows the map, bot push leases its real head - #1154
Merged
dmitrii-f-t27 merged 3 commits intoSep 24, 2026
Conversation
Zoom on the Queen map is relative to the whole field (1 shows everything), and every zoom path clamped it at a fixed 128. As the catalogue grows, a fixed ceiling is worth fewer pixels. Since 2026-09-21 the nightly scan finds eleven repositories; the smallest cell then needs zoom 130 at 390x300 to reach its readable size, check:queen-continuous fails with "Close-up stays readable at the actual viewport", and t27-world-scan stops in its gates (runs of 2026-09-21, 22 and 23). The ceiling is now the zoom at which the smallest cell reaches the largest readable width a close-up asks for (520 px), never below the old 128 (hiveMaxZoom, catalogMaxZoom). The cell and region close-ups, the connection view, the wheel, the pinch and the + button share it, and fit() takes an unfocused zoom down when a narrower host lowers the ceiling, so the next drag or wheel does not jump. Tests: qa/queen-continuous-map.mjs checks every close-up on a field eight times wider (fails on the old code with today's data) and catalogMaxZoom itself; qa/queen-hive-display-contract.mjs pins hiveMaxZoom, the extended hiveFocusZoom and, in the scene source, that no zoom path keeps 128. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The checkout fetches main alone at depth 1, so the bare --force-with-lease of the push step had no remote-tracking ref for bot/t27-world-scan and expected the branch not to exist. The run of 2026-09-16 created it (PR gHashTag#1039); from 2026-09-17 to 2026-09-20 every push was refused as "! [rejected] HEAD -> bot/t27-world-scan (stale info)" after all gates had passed, so no refresh reached the site even before the zoom ceiling broke. The expected value is now read with ls-remote and named explicitly: the push goes through whether the branch exists or not, and is still refused if someone moves the branch between the read and the push (checked against a local bare remote with a depth-1, main-only checkout). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
check:queen-continuous and check:queen-displays ran only in the nightly t27-world-scan, so the fixed zoom ceiling surfaced there, three nights after the catalogue outgrew it, instead of on a pull request. Both are pure node scripts over the committed atlas. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
github-actions Bot
added a commit
that referenced
this pull request
Sep 24, 2026
fix(queen): the map refreshes again -- zoom ceiling follows the map, bot push leases its real head (#1154) The nightly t27-world-scan failed every night since 2026-09-17: first the bot push was refused as stale (bare --force-with-lease on a depth-1 checkout), then from 2026-09-21 check:queen-continuous failed 'Close-up stays readable' because the zoom ceiling was a fixed 128 relative to the whole field. The ceiling now follows the smallest cell (never below 128), the push leases the branch head it actually read, and the map contracts run in website-checks on PRs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The t27.ai Queen map has not refreshed since 2026-09-21 (the last manual atlas build). The nightly t27 world scan (
.github/workflows/t27-world-scan.yml) has failed every night since 2026-09-17, for two different reasons:! [rejected] HEAD -> bot/t27-world-scan (stale info)after all gates passedClose-up stays readable at the actual viewport(qa/queen-continuous-map.mjs:32)The last successful run (2026-09-16) opened #1039, still open. Repositories, specs and issues added since then (for example the nine open issues of
dmitrii-f-t27/trinity-memory, created 2026-09-22) are not on the map.Why
actions/checkoutfetchesmainalone at depth 1, so the baregit push --force-with-leasehas no remote-tracking ref forbot/t27-world-scanand expects the branch not to exist. The 2026-09-16 run created it; every later push was refused.128. As the catalogue grows, 128 buys fewer pixels. On 2026-09-21 the scan qualified an eleventh repository; with today's scan (11 repositories, 1481 specs) the smallest cell needs zoom 130 at 390x300. Replaying the workflow's scan locally onorigin/mainreproduces the CI assertion exactly; with the committed data (10 repositories) the contract still passes. Measured withfit()'s own field size, phone close-ups of the smallest cells were already below the contract's 260 px on main (248.7 px at 390x844); with this change they reach 327.6 px.Change (three commits)
hiveMaxZoom(smallestCellWidth)(queenHiveDisplay.ts) is the zoom at which the smallest cell reachesHIVE_FOCUS_MAX_PX(520 px, the largest width a close-up asks for), never below 128;catalogMaxZoom(map, halfWidth, width)(queenCatalogData.ts) derives it from the map.QueenCombBabylon.tsx:fit()recomputes it for the current field and viewport and takes an unfocused zoom down when a narrower host lowers it; the wheel, the pinch, the + button, the focus and the connection views clamp to it instead of the literal 128. Tests: every close-up is also checked on a field eight times wider (fails on the old code with today's data),catalogMaxZoomis checked directly, and a scene-source contract keeps any zoom path from reintroducing 128.git ls-remoteand passes it to--force-with-lease=refs/heads/$BRANCH:$EXPECT(empty when the branch does not exist). Checked against a local bare remote and a depth-1 main-only checkout: the old command is refused withstale infoas in CI, the new one pushes with and without the branch, and is still refused if the branch moves between the read and the push.check:queen-displaysandcheck:queen-continuousnow also run on pull requests; until now only the nightly scan ran them.Verification
check:discovery,check:shared-core,check:spec-catalog,check:queen-atlas,check:queen-catalog,check:queen-continuous(11 repositories, 1281 issues, 1481 specs),check:queen-spec-mirrors,check:skills-catalog,check:crons-catalog,check:tools: all pass.typecheck:ratchet(no file gained type errors),check:queen-displays,check:queen-continuous,check:queen-catalog,check:queen-spec-mirrors,check:queen-atlas,check:spec-catalog,npm run build: all pass.Not in this PR (the next stops of the nightly job)
With these changes the nightly scan passes
check:queen-continuousand can push, but on today's upstream content it stops at two contracts that drifted today and are content decisions for the owner:check:agents:module 'passport' is in none of the index's three groups, so its card is drawn nowhere(qa/agents-spec-contract.mjs:417).check:docs:the constitution defines L1-L7/8 !== 7(qa/docs-spec-contract.mjs:173):docs/T27-CONSTITUTION.mdadopted L0 on 2026-09-23.Once those are settled, a
workflow_dispatchof t27-world-scan updates #1039, anddeploy-site.ymlpublishes the refreshed map.Work report
{ "version": 1, "head_sha": "e90d427a7a3bab2794ec5dbdd1eee7916c2d8c57", "summary": "The nightly t27 world scan has not refreshed the Queen map since 2026-09-16, for two reasons fixed here: its push to the bot branch was refused as stale info from 2026-09-17 to 2026-09-20, and from 2026-09-21 the map's fixed zoom ceiling of 128 failed the close-up readability gate once the catalogue reached eleven repositories. The ceiling now follows the size of the map, the push leases against the branch's real head, and the map contracts also run on pull requests.", "changes": [ "apps/website/src/components/queenHiveDisplay.ts: new hiveMaxZoom(smallestCellWidth) returns the zoom at which the smallest cell reaches HIVE_FOCUS_MAX_PX (520 px), never below the old ceiling of 128; hiveFocusZoom takes that ceiling as an optional fourth argument and keeps 128 when it is omitted.", "apps/website/src/components/queenCatalogData.ts: new catalogMaxZoom(map, halfWidth, width) computes the ceiling from the smallest cell scale of the map (cached per map); catalogFocusView uses it for cell and region close-ups and catalogConnectionView accepts it as an optional last argument.", "apps/website/src/components/QueenCombBabylon.tsx: fit() recomputes the ceiling from the current field and viewport and takes an unfocused zoom down when a narrower host lowers it; the wheel, the pinch, the + button, the focus and the connection views clamp to it instead of the literal 128.", ".github/workflows/t27-world-scan.yml: the push step reads the bot branch head with git ls-remote and passes it to --force-with-lease explicitly, because the depth-1 main-only checkout has no tracking ref and the bare lease refused every push once the branch existed.", ".github/workflows/website-checks.yml: a new step runs check:queen-displays and check:queen-continuous on pull requests, which until now ran only in the nightly scan.", "apps/website/qa/queen-continuous-map.mjs: every close-up is also checked on a field eight times wider than today's, which fails on the old code with today's atlas and passes with this change.", "apps/website/qa/queen-hive-display-contract.mjs: pins hiveMaxZoom and the extended hiveFocusZoom, and checks in the scene source that no zoom path keeps the literal 128 and that fit() clamps an unfocused zoom; queen-continuous-map also checks catalogMaxZoom directly." ], "tests": [ { "command": "gh run view <run> --repo gHashTag/trinity --log-failed for the t27 world scan runs of 2026-09-17 to 2026-09-23", "result": "Runs 35201352458, 35323881148, 35431198954 and 35500226448 (2026-09-17 to 20) pass the gates and fail at the push with stale info; runs 35581268564, 35705900105 and 35838477411 (2026-09-21 to 23) fail in Catalog gates with Close-up stays readable at the actual viewport", "status": "failed", "evidence": "The last success, 2026-09-16, created bot/t27-world-scan and opened #1039, which is still open" }, { "command": "bash leasetest.sh: a local bare remote holding main and bot/t27-world-scan, a depth-1 main-only checkout like actions/checkout, then the old and the new push", "result": "The old bare lease is refused with stale info exactly as in CI; the new explicit lease pushes when the branch exists and when it does not, and is still refused when the branch moves between ls-remote and push", "status": "passed", "evidence": "Local simulation on 2026-09-23 with git 2.50.1; the push commands are the ones in the workflow" }, { "command": "local replay of the t27-world-scan Scan, vendor, index, atlas step on origin/main 7e1c0d2be, then node --experimental-strip-types qa/queen-continuous-map.mjs", "result": "With today's scan (11 repositories, 1481 specs, 1281 issues) the old code fails with the same assertion as CI; the smallest cell needs zoom 130 at 390x300 against the ceiling of 128", "status": "passed", "evidence": "Reproduced on 2026-09-23 in a local worktree with the unchanged workflow commands" }, { "command": "npm run check:discovery check:shared-core check:spec-catalog check:queen-atlas check:queen-catalog check:queen-continuous check:queen-spec-mirrors check:skills-catalog check:crons-catalog check:tools (each separately, on today's scan data, with this change)", "result": "All ten gates pass on the fresh data with this change, including check:queen-continuous: 11 repositories, 1281 distinct issues, 1481 specs", "status": "passed", "evidence": "Local run on 2026-09-23 in the same worktree after the replayed scan" }, { "command": "npm run check:agents && npm run check:docs (on today's scan data)", "result": "Both fail on the fresh data for reasons unrelated to this change: module passport is in none of the agent index groups, and the constitution now defines L0 to L7 while the docs contract expects L1 to L7", "status": "failed", "evidence": "Both come from today's upstream content (L0 adopted on 2026-09-23); the nightly job stops at check:queen-continuous today, so these were not yet visible" }, { "command": "npm run typecheck:ratchet && npm run check:queen-displays && npm run check:queen-continuous && npm run check:queen-catalog && npm run check:queen-spec-mirrors && npm run check:queen-atlas && npm run check:spec-catalog && npm run build", "result": "All pass on main's committed data with this change; the typecheck ratchet reports that no file gained type errors and the Vite build completes", "status": "passed", "evidence": "Local run on 2026-09-23 on branch fix/queen-close-up-readable over origin/main 7e1c0d2be" } ], "limitations": [ "The nightly scan will still stop after this change at check:agents and check:docs until the agent index lists the new passport module and the docs contract accepts the L0 law adopted today; those follow content decisions and are left to the owner.", "The camera change was checked with the node contracts, the scene-source contract and a production build; a reviewer also drove the real map in headless Chrome over CDP (zoom to the ceiling, narrower window, drag), but the final version was not inspected on a phone.", "The push fix was verified against a local simulation of the checkout, not in a scheduled run; the first nightly after the merge is the real test.", "The refreshed catalogue data itself is not part of this pull request: it comes from the nightly job, or from #1039 once rebased, after this change is merged." ], "tags": [ "queen", "map", "catalog", "ci" ], "blog": { "title": "Why the Queen map stopped refreshing: a stale lease and a zoom ceiling", "summary": "The nightly scan that keeps the t27.ai Queen map current failed every night since 2026-09-17, first at the push because of a lease with no tracking ref, then at a readability gate because a fixed zoom ceiling shrinks in pixels as the map grows. Both are fixed.", "outline": [ "The Queen map on t27.ai is drawn from a static atlas that a nightly GitHub workflow rebuilds from every public repository that writes .t27 specs, and that workflow had failed every night since 2026-09-17, so new repositories, specs and issues stopped reaching the site after the manual rebuild of 2026-09-21.", "For the first four nights every gate passed and the push was refused: the checkout fetches main alone, so a bare force-with-lease had no tracking ref for the bot branch and expected it not to exist, while the first refresh of 2026-09-16 had created it.", "The failing gate asks that a close-up of any cell reaches a readable width at three viewport sizes, and the camera clamped every zoom at 128, a number chosen when the map held five repositories and zoom 1 still covered a small field.", "Zoom is relative to the whole field, so as the catalogue grew to eleven repositories and 1481 specs the same 128 bought fewer pixels, and at 390 by 300 the smallest cell needed a zoom of 130 to reach its readable size.", "The fix computes the ceiling from the map itself: the zoom at which the smallest cell reaches the largest readable width a close-up asks for, never lower than the old 128, and every zoom path shares it.", "A regression check now repeats every close-up on a field eight times wider than today's, so the map can keep growing without silently breaking the nightly refresh again, while two content contracts that drifted today are left to the owner." ] } }🤖 Generated with Claude Code