Watcher: quote arXiv phrases and fix hint ids — 27 of 39 recent issues were noise - #95
Merged
Merged
Conversation
Every docs/*.js bundle carried a `// Generated: <today>` header. Nothing else in the generator output varies between runs, so that one line was the whole reason a regenerate on a different day showed four dirty files — and, since #30, the reason the Generator reproducibility job and the `committed entries match a fresh generation` test could only pass on the day the bundles were last committed. - generate.js: drop the run-date lines; the Source header now reads the version from package.json instead of a hard-coded, stale `v1.5.2`. - generate.test.mjs: assert no bundle header names a run or carries a date. - validate.yml: the reproducibility job now diffs every generated artefact (backlinks.json, backlinks.js, frameworks-registry.js too). - CONTRIBUTING.md: document the build contract — generated files, the determinism requirement, and why the bundles are committed (Pages serves docs/ from main; no deploy workflow exists). Determinism only. No structural, route, layout or logo change (C2). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0147wBugcuzLkswKPqgofcke
…s were noise The weekly arXiv watcher opened 39 issues between 2026-08-31 and 2026-09-14; triage closed 27 as outside GenAI security (CBDC settlement, 6G NOMA, MIMO lattices, TPM tracing). Cause: unquoted multi-word terms. `ti:LLM+security` parses as `ti:LLM` OR a bare `security` in any field, so the query admitted almost every cs.CR paper. A live check on 2026-09-14 returned 3 AI-related titles in 30; the quoted, title-scoped query returned 30 in 30. The "Suggested OWASP Mapping" hints were also wrong in two ways: no word boundaries (`rag` matched "storage"/"average") and pre-2026 ids (supply chain pointed at LLM10, now Improper Output Handling; poisoning at LLM04, now Supply Chain). Rules now name the entry title they target. - watch.js: quoted query; ARXIV_HINT_RULES with boundaries and 2026 ids; main() guarded by require.main so the module can be tested without running the watchers. - watch.test.mjs (6): query phrases quoted, and the check proven against the old query; cs.CR scope; no substring hits; 2026 ids; every hint id exists and still carries the title its rule names. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
Conflicts were only in the four generated webapp bundles, and only in their header lines: #92 regenerated them with a `// Generated:` date that this branch removes. Resolved by re-running scripts/generate.js on the merged sources; a second run is byte-identical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
Generated files re-run on the merged sources; a second generation is byte-identical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
Base automatically changed from
fix/T-ENG03-deterministic-webapp-build
to
main
September 14, 2026 21:08
#37 landed as a squash, so this branch's copies of its commits resolve as identical content. Generated files re-run on the merged sources; a second generation is byte-identical. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
emmanuelgjr
added a commit
that referenced
this pull request
Sep 15, 2026
Generated files re-run on the merged sources; a second generation is byte-identical. text-integrity test passes on this branch's files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR
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.
Plan ID: — (follows the watch backlog triage) Ticket: — Wave: —
Constraints honored:
docs/change.Why
The watcher opened 39 arXiv issues between 2026-08-31 and 2026-09-14. Triage closed 27 of them as out of scope (CBDC settlement, 6G NOMA, MIMO lattice hardness, TPM measured-boot tracing…). All carry
triage:out-of-scopewith a reason.Cause: unquoted multi-word terms. In the arXiv API
ti:LLM+securityisti:LLMplus a baresecurityterm matched in any field, so the query admitted nearly all of cs.CR.The issue bodies' Suggested OWASP Mapping was wrong too:
/rag/matched "storage" and "average".LLM10(now Improper Output Handling), poisoning →LLM04(now Supply Chain). For example, [new-research] arXiv:2609.04820 — Cost-Aware Hierarchical Multi-Agent Ransomware Detection and Family Attribution #78 (ransomware detection) was hinted asDSGAI04, LLM04, ASI06, ASI01, ASI02.Changes
scripts/watch.js"prompt injection","large language model","AI agent","retrieval-augmented", plusjailbreak,LLM,agentic,RAG,MCP, still insidecat:cs.CR.ARXIV_HINT_RULES: word-bounded patterns, each naming the entry title it targets.main()guarded byrequire.main === module, and the query/rules exported for tests. Running the file directly behaves as before.scripts/watch.test.mjs(6 tests)data/entriesand still carries the title its rule names, so the next renumbering fails CI instead of silently mis-hinting.Dry run (
node scripts/watch.js --dry-run --watcher arxiv): the 20 papers returned are LLM, agent or RAG security topics.Deliberately NOT changed
weekly-watch.yml.Noted while testing
While testing, I loaded the previous
watch.jswithrequire(). It had norequire.mainguard, so it ran all watchers once from this machine. With noGITHUB_TOKENset it opened nothing; the issue list confirms none were created. It wrote no state file. This PR adds the guard that would have prevented that.Verify
🤖 Generated with Claude Code
https://claude.ai/code/session_014SfR2YzLxRH54DAVzDk8gR