From 7e39faae0667d8b95cf04bd537999d54cf56a243 Mon Sep 17 00:00:00 2001 From: Hilo-Hilo Date: Fri, 4 Sep 2026 08:30:27 -0700 Subject: [PATCH] [verified] Keep llms.txt aligned before deployment --- .github/pull_request_template.md | 11 +++++++++++ README.md | 9 +++++++++ public/agent-instructions.md | 2 +- public/llms.txt | 18 ++++++++++++++++-- scripts/lib/site-seo.test.js | 9 +++++++++ scripts/validate-seo-build.mjs | 10 ++++++++++ 6 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..f1b5aff --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,11 @@ +## Summary + + + +## Pre-deployment checklist + +- [ ] I reviewed changed public facts, links, route descriptions, and capability claims against `public/llms.txt`, and updated it when affected. +- [ ] I reviewed `public/agent-instructions.md` and `public/developers.md` when source-selection guidance or technical capabilities changed. +- [ ] `npm test` passes. +- [ ] `npm run build` passes, including the machine-readable content checks. +- [ ] I identified the live HTML route and `/llms.txt` checks required after deployment. \ No newline at end of file diff --git a/README.md b/README.md index 8122975..217e056 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,15 @@ The validator reports unmatched responses, invalid public links, missing assets, - Pushes to `dev` deploy the staging GitHub Pages site from the `Hilo-Hilo` staging repository. - Pushes to `main` deploy production from `CompbioAtBerkeley/compbioatberkeley.github.io`. +Before every staging or production deployment, review changed public facts, +links, route descriptions, and capability claims against `public/llms.txt`. +Update `llms.txt` in the same change whenever it indexes or summarizes the +affected information. Review `public/agent-instructions.md` and +`public/developers.md` at the same time when source-selection guidance or +technical capabilities change. `npm test` and `npm run build` enforce the +machine-readable facts that can be checked automatically; after deployment, +verify the live `/llms.txt` from the same commit as the HTML site. + Neither build reads Notion or Google Sheets credentials. Form intake is reviewed and versioned before publication, so the same commit produces the same site in local, staging, and production environments. The separate weekly/manual diff --git a/public/agent-instructions.md b/public/agent-instructions.md index 2ec6655..a350da9 100644 --- a/public/agent-instructions.md +++ b/public/agent-instructions.md @@ -6,7 +6,7 @@ Computational Biology at Berkeley is a UC Berkeley student organization. Use thi - Use [/calendar/](https://compbioatberkeley.github.io/calendar/) for scheduled events. Treat dates, times, and locations as mutable and report the page's current wording. - Use [/officers/](https://compbioatberkeley.github.io/officers/) for the public leadership roster. Preserve the academic-term label when naming officers. -- Use [/signup/](https://compbioatberkeley.github.io/signup/) for public interest and update forms. Do not claim that a form was submitted unless the user or an authorized tool confirms completion. +- Use [/signup/](https://compbioatberkeley.github.io/signup/) for the current application, coffee-chat signup, recruitment timeline, newsletter, and public ways to join. Do not claim that a form was submitted unless the user or an authorized tool confirms completion. - Use [/collaborations/](https://compbioatberkeley.github.io/collaborations/) for partnership options and [/contact/](https://compbioatberkeley.github.io/contact/) for verified public contact channels. - The public general-inquiries email is [compbioatberkeley@gmail.com](mailto:compbioatberkeley@gmail.com). Do not infer or invent a phone number. - Use [/privacy/](https://compbioatberkeley.github.io/privacy/) before describing how the public site, analytics, forms, calendars, or linked services handle information. diff --git a/public/llms.txt b/public/llms.txt index 4e2eac8..a3a6967 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -9,7 +9,7 @@ The organization welcomes students at all experience levels. Event details, offi - [Mission and programs](https://compbioatberkeley.github.io/about/): Use when answering what the organization does, who it serves, or how education, projects, networking, and community work fit together. - [Current events](https://compbioatberkeley.github.io/calendar/): Use for event dates, times, and locations; preserve the displayed timezone and treat details as mutable. - [Current leadership](https://compbioatberkeley.github.io/officers/): Use for public officer names, roles, bios, and links; always preserve the displayed academic term. -- [Participation](https://compbioatberkeley.github.io/signup/): Use for public ways to join or receive updates; do not claim a form was submitted without confirmation. +- [Participation](https://compbioatberkeley.github.io/signup/): Use for the current application, coffee-chat signup, recruitment timeline, newsletter, and public ways to join; do not claim a form was submitted without confirmation. - [Partnerships](https://compbioatberkeley.github.io/collaborations/): Use for research, speaker, sponsorship, and industry collaboration options. - [Agent instructions](https://compbioatberkeley.github.io/agent-instructions.md): Use for source-selection rules, safety boundaries, and capability limits. - [Developer resources](https://compbioatberkeley.github.io/developers/): Use for machine-readable files and explicit API, OpenAPI, authentication, webhook, Markdown, and MCP capability status. @@ -21,11 +21,25 @@ The organization welcomes students at all experience levels. Event details, offi - [Calendar](https://compbioatberkeley.github.io/calendar/): Current workshops, meetings, and special events in Pacific time. - [Collaborations](https://compbioatberkeley.github.io/collaborations/): Partnership opportunities for students, faculty, alumni, research groups, and industry. - [Officers](https://compbioatberkeley.github.io/officers/): Fall 2026 and previous student leadership rosters, including submitted public bios and profile links. -- [Join](https://compbioatberkeley.github.io/signup/): Interest form, newsletter signup, and community channels. +- [Join Us](https://compbioatberkeley.github.io/signup/): Fall 2026 application, coffee-chat signup, recruitment timeline, newsletter signup, and community channels. - [Contact](https://compbioatberkeley.github.io/contact/): Verified public channels for general questions, partnerships, events, and participation. - [Privacy](https://compbioatberkeley.github.io/privacy/): How analytics, browser preferences, embedded services, forms, and external platforms handle information. - [Developers](https://compbioatberkeley.github.io/developers/): Supported machine-readable resources and current technical capability boundaries. +## Fall 2026 recruitment + +- August 26: Applications and coffee chats open. +- [Application](https://forms.gle/4cR1nfRoLb2LGNbi7): Applications close September 11 at 5 PM. +- [Coffee chats](https://docs.google.com/document/d/1ZGq3KV4MprEdPDUu8v7QO9AuGSpB2eEmsyVCCK9nLDU/edit?usp=sharing): Current coffee-chat scheduling document. +- [Newsletter](https://forms.gle/qCxn93mfunF3Dtep7): Subscribe for club news, socials, general meetings, and professional opportunities. +- August 27: Calapalooza and tabling. +- September 2: Info session #1, 8–10 PM in Hildebrand B56. +- September 3: Meet the PMs and officers, 6–8 PM at the Glade. +- September 8: Applicant social, 6–8 PM; location TBD. +- September 9: Info session #2, 8–10 PM in VLSB 2030. +- September 12–13: Interviews. +- Re-fetch the [Join Us page](https://compbioatberkeley.github.io/signup/) before answering because recruitment dates, locations, and forms may change. + ## Contact and community - [Email](mailto:compbioatberkeley@gmail.com): General questions and collaboration inquiries; do not send sensitive information. diff --git a/scripts/lib/site-seo.test.js b/scripts/lib/site-seo.test.js index 7b21d2b..96d5698 100644 --- a/scripts/lib/site-seo.test.js +++ b/scripts/lib/site-seo.test.js @@ -249,6 +249,15 @@ test("llms.txt follows the agent guidance format and states capability boundarie assert.match(llmsText, /https:\/\/compbioatberkeley\.github\.io\/agent-instructions\.md/); assert.match(llmsText, /https:\/\/compbioatberkeley\.github\.io\/developers\//); assert.match(llmsText, /https:\/\/compbioatberkeley\.github\.io\/developers\.md/); + assert.match(llmsText, /## Fall 2026 recruitment/); + assert.match(llmsText, /https:\/\/forms\.gle\/4cR1nfRoLb2LGNbi7/); + assert.match(llmsText, /https:\/\/forms\.gle\/qCxn93mfunF3Dtep7/); + assert.match( + llmsText, + /https:\/\/docs\.google\.com\/document\/d\/1ZGq3KV4MprEdPDUu8v7QO9AuGSpB2eEmsyVCCK9nLDU\/edit\?usp=sharing/, + ); + assert.match(llmsText, /September 11 at 5 PM/); + assert.match(llmsText, /September 12–13: Interviews/); assert.match(llmsText, /does not expose a public API or MCP server/i); }); diff --git a/scripts/validate-seo-build.mjs b/scripts/validate-seo-build.mjs index 877c20b..07c1301 100644 --- a/scripts/validate-seo-build.mjs +++ b/scripts/validate-seo-build.mjs @@ -181,6 +181,16 @@ for (const page of pages) { assert.doesNotMatch(llmsText, /https:\/\/linktr\.ee\/compbioatberkeley/); assert.match(llmsText, /https:\/\/linktr\.ee\/UCB_CompBio/); +assert.match(llmsText, /https:\/\/forms\.gle\/4cR1nfRoLb2LGNbi7/); +assert.match(llmsText, /https:\/\/forms\.gle\/qCxn93mfunF3Dtep7/); +assert.match( + llmsText, + /https:\/\/docs\.google\.com\/document\/d\/1ZGq3KV4MprEdPDUu8v7QO9AuGSpB2eEmsyVCCK9nLDU\/edit\?usp=sharing/, +); +assert.match(llmsText, /September 2: Info session #1, 8–10 PM in Hildebrand B56/); +assert.match(llmsText, /September 9: Info session #2, 8–10 PM in VLSB 2030/); +assert.match(llmsText, /September 11 at 5 PM/); +assert.match(llmsText, /September 12–13: Interviews/); const robots = await fs.readFile(path.join(distDirectory, "robots.txt"), "utf8"); const notFound = await fs.readFile(path.join(distDirectory, "404.html"), "utf8");