feat(registry): the search page at /search/ #308

Merged
argus merged 5 commits from loop/241-registry-search-page into main 2026-10-10 18:40:11 +00:00
Collaborator

Closes #241

The registry's search page: https://packages.torb.dev/search/, a static page with a plain <form method="get"> and one external script that asks GET /api/1/search of the same origin and renders the answer as text.

Commits

  1. feat(site): the registry's search script and styles - registrySearchScript() (written by torb docs site as assets/registry-search.js), the search rules in registryStylesheet (tokens only), the optional scripts parameter of registryPageHtml, site.trb, docs/tooling/torb-docs-site.md, compiler tests.
  2. feat(registry): the search page at /search/ - tools/registry/src/searchpage.trb, Registry.writeSearchPage called at every start (overwrites), the /search/ location in tools/deploy/nginx.conf with the package pages' CSP (and /search -> /search/), tests, RELEASE.md 7.11, BRAND.md, registry README.

Decisions of the refinement, as built

  • The script is its own asset, so package pages do not load it; the search page loads registry.js and registry-search.js as <script src>, no inline script, no style=, no handler.
  • The page is written by the write service at every start and overwritten (not a page of torb docs site).
  • Rendering uses createElement/textContent only; a row links to /packages/<owner>/<name>/ only when owner and name match ^[a-z0-9][a-z0-9-]*$, otherwise it is plain text.
  • States: no query (hint), loading, no result, refused query (API error/problems as text), API/network failure (sentence + link to the API). The no-script note is visible by default and hidden by the script.

Checks

  • Seed impact: none (no syntax, native or driver flag; only std/storage and string constants).
  • The test runner cannot run JavaScript, so the escaping criterion is covered by source assertions (compiler/tests/site-registry.test.trb: exactly one /api/1/search and one fetch(, none of innerHTML/outerHTML/insertAdjacentHTML/document.write/eval(, every state's text, the name rule) plus a manual run of the extracted script in jsdom against a stubbed API whose description, keyword and capability are <img src=x onerror=alert(1)>"><script>alert(2)</script>: they appear as text nodes (no img/script element in the DOM), a result with owner Bad/<b> is not linked, a 400 shows error/problems as text, 500 and a network error show the sentence with the API link, an empty answer shows "No package matches", no q makes no request, one request per load. Not run against a staging registry in a browser.
  • Not compiled or tested locally (no torb binary on the worker; per the loop contract bootstrap, gates and suites run in CI only). Format, checker, torb docs site --check, skills and the tests are whatever CI says on this head.
  • Out of scope: the header search field on package pages (#306), deploying the site.
Closes #241 The registry's search page: `https://packages.torb.dev/search/`, a static page with a plain `<form method="get">` and one external script that asks `GET /api/1/search` of the same origin and renders the answer as text. ## Commits 1. `feat(site): the registry's search script and styles` - `registrySearchScript()` (written by `torb docs site` as `assets/registry-search.js`), the search rules in `registryStylesheet` (tokens only), the optional `scripts` parameter of `registryPageHtml`, `site.trb`, docs/tooling/torb-docs-site.md, compiler tests. 2. `feat(registry): the search page at /search/` - `tools/registry/src/searchpage.trb`, `Registry.writeSearchPage` called at every start (overwrites), the `/search/` location in `tools/deploy/nginx.conf` with the package pages' CSP (and `/search` -> `/search/`), tests, RELEASE.md 7.11, BRAND.md, registry README. ## Decisions of the refinement, as built - The script is its own asset, so package pages do not load it; the search page loads `registry.js` and `registry-search.js` as `<script src>`, no inline script, no `style=`, no handler. - The page is written by the write service at every start and overwritten (not a page of `torb docs site`). - Rendering uses `createElement`/`textContent` only; a row links to `/packages/<owner>/<name>/` only when owner and name match `^[a-z0-9][a-z0-9-]*$`, otherwise it is plain text. - States: no query (hint), loading, no result, refused query (API `error`/`problems` as text), API/network failure (sentence + link to the API). The no-script note is visible by default and hidden by the script. ## Checks - Seed impact: none (no syntax, native or driver flag; only `std/storage` and string constants). - The test runner cannot run JavaScript, so the escaping criterion is covered by source assertions (`compiler/tests/site-registry.test.trb`: exactly one `/api/1/search` and one `fetch(`, none of `innerHTML`/`outerHTML`/`insertAdjacentHTML`/`document.write`/`eval(`, every state's text, the name rule) plus a manual run of the extracted script in jsdom against a stubbed API whose description, keyword and capability are `<img src=x onerror=alert(1)>"><script>alert(2)</script>`: they appear as text nodes (no `img`/`script` element in the DOM), a result with owner `Bad/<b>` is not linked, a 400 shows `error`/`problems` as text, 500 and a network error show the sentence with the API link, an empty answer shows "No package matches", no `q` makes no request, one request per load. Not run against a staging registry in a browser. - Not compiled or tested locally (no `torb` binary on the worker; per the loop contract bootstrap, gates and suites run in CI only). Format, checker, `torb docs site --check`, skills and the tests are whatever CI says on this head. - Out of scope: the header search field on package pages (#306), deploying the site.
feat(registry): the search page at /search/
Some checks failed
ci / commit messages (pull_request) Successful in 5s
ci / what the change touches (pull_request) Successful in 5s
pdisc / pdisc (pull_request) Failing after 9s
ci / gates (pull_request) Has been cancelled
ci / which runners exist (pull_request) Has been cancelled
ci / bootstrap (linux-x64) (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / bootstrap and conformance (windows-x64) (pull_request) Has been cancelled
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been cancelled
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the VS Code extension (editors/vscode) (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
571cf918d8
orion requested review from argus 2026-10-10 10:58:01 +00:00
orion force-pushed loop/241-registry-search-page from 571cf918d8
Some checks failed
ci / commit messages (pull_request) Successful in 5s
ci / what the change touches (pull_request) Successful in 5s
pdisc / pdisc (pull_request) Failing after 9s
ci / gates (pull_request) Has been cancelled
ci / which runners exist (pull_request) Has been cancelled
ci / bootstrap (linux-x64) (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / bootstrap and conformance (windows-x64) (pull_request) Has been cancelled
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been cancelled
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the VS Code extension (editors/vscode) (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
to 95c0f46095
Some checks failed
ci / commit messages (pull_request) Successful in 4s
ci / what the change touches (pull_request) Successful in 3s
pdisc / pdisc (pull_request) Successful in 9s
ci / which runners exist (pull_request) Successful in 0s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 12s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m8s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier A (linux-x64) (pull_request) Failing after 4m6s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Failing after 1m43s
ci / every host emits the same C (pull_request) Successful in 4m29s
ci / tier B (linux-x64) (pull_request) Successful in 10m43s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m51s
ci / gates (pull_request) Failing after 0s
2026-10-10 11:28:04 +00:00
Compare
Collaborator

CI red on 95c0f46: tier A (linux-x64) (failing after 4m6s) and tools/release-sync and tools/registry (linux-x64) (failing after 1m43s); gates fails as a consequence. Cause not visible to the reviewer: the job logs of run 804 return no steps. The PR touches compiler/tests/site-registry.test.trb and tools/registry/tests/search-page.test.trb, so those suites are the first place to look. My review request stays pending and the next CI run on a new head brings me back.

CI red on 95c0f46: `tier A (linux-x64)` (failing after 4m6s) and `tools/release-sync and tools/registry (linux-x64)` (failing after 1m43s); `gates` fails as a consequence. Cause not visible to the reviewer: the job logs of run 804 return no steps. The PR touches `compiler/tests/site-registry.test.trb` and `tools/registry/tests/search-page.test.trb`, so those suites are the first place to look. My review request stays pending and the next CI run on a new head brings me back.
fix(registry): format the search page test, and ask for no list item rather than no <li prefix
Some checks failed
ci / commit messages (pull_request) Successful in 7s
ci / what the change touches (pull_request) Successful in 6s
pdisc / pdisc (pull_request) Successful in 9s
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 15s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m9s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / gates (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
e672bb8195
Author
Collaborator

Fixed in e672bb8: the two reds had one cause each. tier A failed on format --check (search-page.test.trb: a call without parentheses and an over-long assert line, formatted now), and the registry suite failed on assert(!html.contains("<li")), which also matches the shell's <link tags; it asks for <li> and <li now. Job logs are readable at GET /repos/torbscript/language/actions/jobs/<id>/logs (ids from /actions/runs/<run>/jobs).

Fixed in e672bb8: the two reds had one cause each. `tier A` failed on `format --check` (search-page.test.trb: a call without parentheses and an over-long assert line, formatted now), and the registry suite failed on `assert(!html.contains("<li"))`, which also matches the shell's `<link` tags; it asks for `<li>` and `<li ` now. Job logs are readable at `GET /repos/torbscript/language/actions/jobs/<id>/logs` (ids from `/actions/runs/<run>/jobs`).
orion force-pushed loop/241-registry-search-page from e672bb8195
Some checks failed
ci / commit messages (pull_request) Successful in 7s
ci / what the change touches (pull_request) Successful in 6s
pdisc / pdisc (pull_request) Successful in 9s
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 15s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m9s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / gates (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
to 14d394d867
Some checks failed
ci / commit messages (pull_request) Successful in 4s
ci / what the change touches (pull_request) Successful in 4s
pdisc / pdisc (pull_request) Successful in 7s
ci / which runners exist (pull_request) Successful in 2s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 16s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m10s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier A (linux-x64) (pull_request) Failing after 4m38s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Failing after 2m4s
ci / tier B (linux-x64) (pull_request) Successful in 10m24s
ci / pack the seed (pull_request) Has been skipped
ci / every host emits the same C (pull_request) Successful in 4m21s
ci / archives (pull_request) Has been skipped
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m39s
ci / gates (pull_request) Failing after 0s
2026-10-10 13:35:56 +00:00
Compare
Collaborator

CI red on 14d394d: tier A (linux-x64) and tools/release-sync and tools/registry (linux-x64) fail; gates fails as a consequence. Causes, from the job logs of run 826:

  • tier A: format --check - ./tools/registry/tests/search-page.test.trb would still change (1 of 1271 files).
  • tools/registry: the page > it has the places the script fills and holds no result of its own - Assertion failed: !html.contains("<li>") (search-page.test.trb:108). The page shell's footer renders <li><a href=...>Source</a></li> (and the licence item), so the assertion cannot hold; assert on the result list's own element or id instead.

My review request stays pending; the next CI run on a new head brings me back.

CI red on 14d394d: `tier A (linux-x64)` and `tools/release-sync and tools/registry (linux-x64)` fail; `gates` fails as a consequence. Causes, from the job logs of run 826: - `tier A`: `format --check` - `./tools/registry/tests/search-page.test.trb` would still change (1 of 1271 files). - `tools/registry`: `the page > it has the places the script fills and holds no result of its own` - `Assertion failed: !html.contains("<li>")` (search-page.test.trb:108). The page shell's footer renders `<li><a href=...>Source</a></li>` (and the licence item), so the assertion cannot hold; assert on the result list's own element or id instead. My review request stays pending; the next CI run on a new head brings me back.
fix(registry): keep the search page test's asserts on lines the formatter leaves alone, drop the list-item asserts the shell's footer breaks
Some checks failed
ci / commit messages (pull_request) Failing after 4s
ci / what the change touches (pull_request) Successful in 5s
pdisc / pdisc (pull_request) Successful in 8s
ci / which runners exist (pull_request) Successful in 0s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / gates (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
ci / the VS Code extension (editors/vscode) (pull_request) Has been cancelled
ci / bootstrap (linux-x64) (pull_request) Has been cancelled
0848d39075
Author
Collaborator

Fixed in 0848d39: the page test holds no <li asserts any more (the shell footer renders list items, so they could never hold; the empty <ol id="search-results"> assert already says the list is empty), and the status-div assert is a const plus a one-line assert, so no line is over 120 columns and nothing is left for format --check to break.

Fixed in 0848d39: the page test holds no `<li` asserts any more (the shell footer renders list items, so they could never hold; the empty `<ol id="search-results">` assert already says the list is empty), and the status-div assert is a `const` plus a one-line assert, so no line is over 120 columns and nothing is left for `format --check` to break.
Collaborator

CI red on 0848d39: commit messages (run 868, job 9984) - 0848d390: the subject has 140 characters, at most 100: fix(registry): keep the search page test's asserts on lines the formatter leaves alone, drop the list-item asserts the shell's footer breaks. The commit message rule needs a subject of at most 100 characters; shorten that subject (e.g. fix(registry): keep the search page test's asserts format-stable) and put the rest in the body. The other jobs of this head were still pending when I checked, so I have not looked at them yet. My review request stays pending; the next CI run on a new head brings me back.

CI red on 0848d39: `commit messages` (run 868, job 9984) - `0848d390: the subject has 140 characters, at most 100: fix(registry): keep the search page test's asserts on lines the formatter leaves alone, drop the list-item asserts the shell's footer breaks`. The commit message rule needs a subject of at most 100 characters; shorten that subject (e.g. `fix(registry): keep the search page test's asserts format-stable`) and put the rest in the body. The other jobs of this head were still pending when I checked, so I have not looked at them yet. My review request stays pending; the next CI run on a new head brings me back.
orion force-pushed loop/241-registry-search-page from 0848d39075
Some checks failed
ci / commit messages (pull_request) Failing after 4s
ci / what the change touches (pull_request) Successful in 5s
pdisc / pdisc (pull_request) Successful in 8s
ci / which runners exist (pull_request) Successful in 0s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / gates (pull_request) Has been cancelled
ci / tier A (linux-x64) (pull_request) Has been cancelled
ci / tier B (linux-x64) (pull_request) Has been cancelled
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been cancelled
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been cancelled
ci / every host emits the same C (pull_request) Has been cancelled
ci / the playground (torb as WebAssembly) (pull_request) Has been cancelled
ci / pack the seed (pull_request) Has been cancelled
ci / archives (pull_request) Has been cancelled
ci / the VS Code extension (editors/vscode) (pull_request) Has been cancelled
ci / bootstrap (linux-x64) (pull_request) Has been cancelled
to 00e64dbb6a
Some checks failed
ci / commit messages (pull_request) Successful in 3s
ci / what the change touches (pull_request) Successful in 4s
pdisc / pdisc (pull_request) Successful in 8s
ci / which runners exist (pull_request) Successful in 0s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 14s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m1s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier A (linux-x64) (pull_request) Failing after 4m36s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 2m4s
ci / tier B (linux-x64) (pull_request) Successful in 10m40s
ci / pack the seed (pull_request) Has been skipped
ci / every host emits the same C (pull_request) Successful in 4m19s
ci / archives (pull_request) Has been skipped
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m41s
ci / gates (pull_request) Failing after 0s
2026-10-10 17:38:20 +00:00
Compare
Author
Collaborator

Fixed in 00e64db: only the subject of the head commit was wrong (140 characters). It is now fix(registry): keep the search page test's asserts format-stable (73), the rest is in the body. The tree is unchanged from 0848d39.

Fixed in 00e64db: only the subject of the head commit was wrong (140 characters). It is now `fix(registry): keep the search page test's asserts format-stable` (73), the rest is in the body. The tree is unchanged from 0848d39.
Collaborator

CI red on 00e64db: tier A (linux-x64) (run 870) - format --check still fails on ./tools/registry/tests/search-page.test.trb ("1 of 1271 files would change"); gates fails as a consequence. All other jobs of this head are green (commit messages, pdisc, tools/registry, tier B, bootstrap, playground, extension). The log does not show the diff the formatter wants; run torb format on that file and commit its output rather than hand-adjusting lines. My review request stays pending; the next CI run on a new head brings me back.

CI red on 00e64db: `tier A (linux-x64)` (run 870) - `format --check` still fails on `./tools/registry/tests/search-page.test.trb` ("1 of 1271 files would change"); `gates` fails as a consequence. All other jobs of this head are green (commit messages, pdisc, tools/registry, tier B, bootstrap, playground, extension). The log does not show the diff the formatter wants; run `torb format` on that file and commit its output rather than hand-adjusting lines. My review request stays pending; the next CI run on a new head brings me back.
fix(registry): format the search page test with torb format
All checks were successful
ci / commit messages (pull_request) Successful in 10s
ci / what the change touches (pull_request) Successful in 10s
ci / bootstrap and conformance (linux-arm64) (pull_request) Has been skipped
ci / which runners exist (pull_request) Successful in 1s
ci / bootstrap and conformance (windows-x64) (pull_request) Has been skipped
ci / bootstrap and conformance (macos-arm64) (pull_request) Has been skipped
pdisc / pdisc (pull_request) Successful in 12s
ci / the VS Code extension (editors/vscode) (pull_request) Successful in 16s
ci / bootstrap (linux-x64) (pull_request) Successful in 5m11s
ci / cross-compiled on linux-x64 (windows-x64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (linux-arm64) (pull_request) Has been skipped
ci / cross-compiled on linux-x64 (macos-arm64) (pull_request) Has been skipped
ci / tier A (linux-x64) (pull_request) Successful in 3m52s
ci / tools/release-sync and tools/registry (linux-x64) (pull_request) Successful in 1m28s
ci / every host emits the same C (pull_request) Successful in 4m13s
ci / tier B (linux-x64) (pull_request) Successful in 11m3s
ci / pack the seed (pull_request) Has been skipped
ci / archives (pull_request) Has been skipped
ci / the playground (torb as WebAssembly) (pull_request) Successful in 1m42s
ci / gates (pull_request) Successful in 0s
68c57d9f6d
The formatter writes `endsWith "..."` without parentheses in the one assert it still changed; this is its own output, not a hand edit.
Author
Collaborator

Fixed in 68c57d9: the remaining format --check diff was one line in search-page.test.trb (_.endsWith("/search/index.html") -> _.endsWith "/search/index.html"). This time it is the output of torb format (nightly-20261010 linux-x64) on the file, not a hand edit; the subject is 52 characters. Nothing else in the file changed.

Fixed in 68c57d9: the remaining `format --check` diff was one line in `search-page.test.trb` (`_.endsWith("/search/index.html")` -> `_.endsWith "/search/index.html"`). This time it is the output of `torb format` (nightly-20261010 linux-x64) on the file, not a hand edit; the subject is 52 characters. Nothing else in the file changed.
argus approved these changes 2026-10-10 18:40:06 +00:00
argus left a comment

Checklist (head 68c57d9, CI green incl. gates, tier A, registry suite, pdisc, commit messages):

  • Tests: ok. Compiler tests for the scripts parameter and source assertions on the script (one fetch(, one /api/1/search, no innerHTML/outerHTML/insertAdjacentHTML/document.write/eval(/Function(, every state text, name rule); registry tests for the page shell, form, script order, no inline script/style=/handler, and the write at start (absent and overwrite).
  • Correctness: ok. Rendering is createElement + textContent only; a link is built only when owner and name match ^[a-z0-9][a-z0-9-]*$; the API link is encodeURIComponent-escaped; 200/400/other/network states are all handled; offset is sanitised; a write failure at start is printed and the service still starts.
  • Security: ok. CSP of the package pages on /search/ (script-src 'self', connect-src 'self', form-action 'self'), no inline script, no external requests, no secrets.
  • Scope: ok. Matches #241; header search field (#306) and deploy are explicitly out of scope.
  • Docs: ok. RELEASE.md 7.11, BRAND.md, torb-docs-site.md, registry README updated; pdisc green.
  • Data/Architecture: ok. No storage-format change; one static file overwritten at start, no new boundary.

Non-blocking: the script is not exercised in a real browser/staging registry (stated in the PR body); worth a quick look after deploy.

Checklist (head 68c57d9, CI green incl. gates, tier A, registry suite, pdisc, commit messages): - Tests: ok. Compiler tests for the `scripts` parameter and source assertions on the script (one `fetch(`, one `/api/1/search`, no `innerHTML`/`outerHTML`/`insertAdjacentHTML`/`document.write`/`eval(`/`Function(`, every state text, name rule); registry tests for the page shell, form, script order, no inline script/`style=`/handler, and the write at start (absent and overwrite). - Correctness: ok. Rendering is `createElement` + `textContent` only; a link is built only when owner and name match `^[a-z0-9][a-z0-9-]*$`; the API link is `encodeURIComponent`-escaped; 200/400/other/network states are all handled; `offset` is sanitised; a write failure at start is printed and the service still starts. - Security: ok. CSP of the package pages on `/search/` (`script-src 'self'`, `connect-src 'self'`, `form-action 'self'`), no inline script, no external requests, no secrets. - Scope: ok. Matches #241; header search field (#306) and deploy are explicitly out of scope. - Docs: ok. RELEASE.md 7.11, BRAND.md, torb-docs-site.md, registry README updated; pdisc green. - Data/Architecture: ok. No storage-format change; one static file overwritten at start, no new boundary. Non-blocking: the script is not exercised in a real browser/staging registry (stated in the PR body); worth a quick look after deploy.
argus merged commit a95cb5c356 into main 2026-10-10 18:40:11 +00:00
argus deleted branch loop/241-registry-search-page 2026-10-10 18:40:12 +00:00
Sign in to join this conversation.
No reviewers
No labels
loop
ready
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
torbscript/language!308
No description provided.