Dependencies
Blocked by: nothing — this is the first sub-issue to start.
Blocks: #7 (the page contract), and therefore everything downstream of it.
Start here. It de-risks the one part nobody has tested: Pages on this org, and this Actions workflow.
Part of #4 — the handbook knowledge layer.
Stand up launchpad-26/handbook and prove it publishes automatically, before any real content exists.
This goes first deliberately. Nobody in the cohort has enabled GitHub Pages on this org or run this workflow. It is the only part of the design that could hit a wall changing everything downstream — so find that out with a placeholder page, not with twelve real ones.
Scope
- Create
launchpad-26/handbook, private
- Configure GitHub Pages access control so only organisation members can view the site
- MkDocs project at the repository root
- Navigation skeleton for the eleven categories: Getting started, Architecture, Deployment, Operations, Agents and AgentOps, Development workflows, Security, Upstream Buzz, Launchpad-specific behaviour, Troubleshooting, Reference
- GitHub Actions workflow: on push to the default branch, run
mkdocs build and deploy to Pages using the workflow's own GITHUB_TOKEN
- One placeholder page so the site renders
Acceptance
Corrected: the site URL is not launchpad-26.github.io/handbook
The original wording of the second criterion was wrong, and the first criterion is what caught it.
A private, access-controlled Pages site is served from a randomised *.pages.github.io subdomain, assigned by GitHub. The predictable <org>.github.io/<repo> form exists only for public sites. launchpad-26.github.io/handbook will never resolve, so a criterion demanding it could never have been met.
The live site is https://ideal-adventure-2yyn6ow.pages.github.io/. site_url is deliberately left unset in mkdocs.yml rather than hardcoded to a value GitHub assigns and could change.
§9 of the design document states the same wrong URL and needs the same correction.
Evidence
Verified 2026-08-11, in the order the criteria demand.
Access control is available and on:
GET /repos/launchpad-26/handbook/pages
{"build_type": "workflow", "public": false, "https_enforced": true}
public: false is the org-only restriction. Available because launchpad-26 is on the enterprise plan.
A logged-out request does not get the content:
anonymous GET https://ideal-adventure-2yyn6ow.pages.github.io/
-> HTTP 302
-> location: https://github.com/pages/auth?nonce=...&page_id=83048225
-> follows to github.com/login
The site builds and publishes on push to main: the Publish workflow completed success on the scaffold commit, and all eleven category pages render.
Built locally first: mkdocs build --strict passes; site/ is gitignored and never committed.
No deployment secret: deploys with the workflow's own GITHUB_TOKEN.
Why private, and why this is the riskiest step
Two of the five source repositories the handbook draws on — launchpad-26/launchpad and launchpad-26/skills — are private. A public site citing them would fail two ways at once: a reader outside the org following a [cohort] citation gets a 404, and an agent synthesising a page from a private repo would publish cohort material to the internet.
A private, org-scoped site removes both, because every reader of a citation is someone already entitled to read its source.
This is possible because launchpad-26 is on the enterprise plan, where a private repo can publish a Pages site with access restricted to org members. That is a platform feature governed by enterprise policy, so verify it works before building on it — hence the first acceptance criterion. If it turns out to be unavailable, the fallback is restricting the handbook to public sources only, which is a scope decision and not this issue's to make.
Watch out for
- Nothing sensitive, from the very first commit — no live hostnames, keys, tokens,
.env bodies, or member rosters. Private lowers the blast radius; it does not change the rule. A private repo is read by everyone in a 1,948-seat org, cloned to laptops, and one settings change from public.
Dependencies
Blocked by: nothing — this is the first sub-issue to start.
Blocks: #7 (the page contract), and therefore everything downstream of it.
Start here. It de-risks the one part nobody has tested: Pages on this org, and this Actions workflow.
Part of #4 — the handbook knowledge layer.
Stand up
launchpad-26/handbookand prove it publishes automatically, before any real content exists.This goes first deliberately. Nobody in the cohort has enabled GitHub Pages on this org or run this workflow. It is the only part of the design that could hit a wall changing everything downstream — so find that out with a placeholder page, not with twelve real ones.
Scope
launchpad-26/handbook, privatemkdocs buildand deploy to Pages using the workflow's ownGITHUB_TOKENAcceptance
launchpad-26repo can serve a Pages site restricted to org members. If it cannot, stop and reopen the scope question — do not proceed by making the repo public.Corrected: the site URL is not
launchpad-26.github.io/handbookThe original wording of the second criterion was wrong, and the first criterion is what caught it.
A private, access-controlled Pages site is served from a randomised
*.pages.github.iosubdomain, assigned by GitHub. The predictable<org>.github.io/<repo>form exists only for public sites.launchpad-26.github.io/handbookwill never resolve, so a criterion demanding it could never have been met.The live site is
https://ideal-adventure-2yyn6ow.pages.github.io/.site_urlis deliberately left unset inmkdocs.ymlrather than hardcoded to a value GitHub assigns and could change.§9 of the design document states the same wrong URL and needs the same correction.
Evidence
Verified 2026-08-11, in the order the criteria demand.
Access control is available and on:
public: falseis the org-only restriction. Available becauselaunchpad-26is on the enterprise plan.A logged-out request does not get the content:
The site builds and publishes on push to
main: thePublishworkflow completedsuccesson the scaffold commit, and all eleven category pages render.Built locally first:
mkdocs build --strictpasses;site/is gitignored and never committed.No deployment secret: deploys with the workflow's own
GITHUB_TOKEN.Why private, and why this is the riskiest step
Two of the five source repositories the handbook draws on —
launchpad-26/launchpadandlaunchpad-26/skills— are private. A public site citing them would fail two ways at once: a reader outside the org following a[cohort]citation gets a 404, and an agent synthesising a page from a private repo would publish cohort material to the internet.A private, org-scoped site removes both, because every reader of a citation is someone already entitled to read its source.
This is possible because
launchpad-26is on the enterprise plan, where a private repo can publish a Pages site with access restricted to org members. That is a platform feature governed by enterprise policy, so verify it works before building on it — hence the first acceptance criterion. If it turns out to be unavailable, the fallback is restricting the handbook to public sources only, which is a scope decision and not this issue's to make.Watch out for
.envbodies, or member rosters. Private lowers the blast radius; it does not change the rule. A private repo is read by everyone in a 1,948-seat org, cloned to laptops, and one settings change from public.