Docs/promote landing pages - #288
Conversation
The pages built in tirith-internal as an isolated preview under documentation/new-landing-page/ become documentation/ itself, replacing the single-page landing site. Only documentation/ is built by deploy_docs.yml, so this is what makes them the published site rather than a preview nothing runs. The preview read the real site across a folder boundary. Those paths are now the site's own: staticDirectories drops to the default single root with the brand assets moved into documentation/static/img/, and the docs preset takes ./docs and ./sidebars.js directly rather than ../docs and ../sidebars.js. Five pages, replacing one: the landing page, Learn with the browser playground, Skills, At scale (the commercial page, previously Fleet), and the logo page reachable only from the landing footer. The Skills page instructs a reader to curl .claude/skills/tirith-policies/ and .cursor/rules/tirith-policies.mdc from this repository's main branch, and every file it lists links into that folder. Neither existed here, so the page shipped install instructions that 404. The skill pack is self-contained and meant to be copied into any project, so it moves here with the page that advertises it. docs/Tirith Logo.html comes across for the same reason: brand/README.md links to it as the source of truth for the mark's geometry, and three source files cite it. Its relative link is repointed for the shallower location. Also brings the public documentation the pages link to: editor-and-local.md, a link target the build would otherwise reject under onBrokenLinks: 'throw', plus the Bitbucket, Jenkins and pre-commit CI sections, the 1.2.0 install pins, and the issue-template links. deploy_docs.yml gains the PostHog and HubSpot environment. Every value is optional and unset means the analytics script never loads and the At scale form disables itself and says why -- which is the right behaviour on a fork. The documentation README was the stock Docusaurus scaffold telling readers to use yarn, which is wrong: package-lock.json is the committed lockfile and both docs workflows say so. It now describes the pages, the environment, the brand assets and the playground's documented limits. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The preview folder carried this rule in its own .gitignore; promoting it into documentation/ kept that folder's .gitignore, not the preview's, so the rule was lost. A `docusaurus start` then wrote a 352KB yarn.lock into documentation/, untracked and one `git add -A` away from being committed. That matters more than a stray file: package-lock.json is the committed lockfile, both docs workflows run `npm ci`, and a yarn.lock beside it invites exactly the resolve-fresh install the workflow comments warn against. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Introduced llms.txt for comprehensive documentation on Tirith, covering installation, usage, policy writing, and integration. - Added a robots.txt file to manage crawler access and document intended policies. - Updated TUI banner and subtitle to reflect "Open-source IaC governance" instead of "Policy as Code".
…md, validate.md, verdicts.md, and tirith-policies.mdc for clarity and accuracy
Codecov Report✅ All modified and coverable lines are covered by tests.
🚀 New features to boost your workflow:
|
…, validation methods, and pipeline integration
Review: 10 confirmed findingsAll verified against source at tag Blocking1. The 2. Exit code 2 is documented two opposite ways inside this PR Should fix before merge3. The
4. The skill-install snippet reintroduces the bug this PR fixed elsewhere — 5. Deep links to files that exist in no ref — Smaller, still real6. 7. 8. 9. Minor / mentions
One candidate was checked and dropped: the unrendered Reviewed with Claude Code — findings verified against |
…ibution (#289) * fix: clear Infima's default table styling from the at-scale comparison The comparison table is ruled horizontally only and its cells start at the measure with no left padding, but Infima's defaults were still supplying a 1px border on all four sides of every cell plus zebra striping. The result was a bordered grid the design never asked for, with the text jammed against the vertical rules. Reset the borders, row backgrounds and display so border-collapse applies. * fix: align the status tags in the home page roadmap strip The tag trailed the title inline, so it landed wherever each title happened to stop and the four sat at four different offsets. Give it its own column so they line up down the strip, and fall back to the inline treatment on a phone, where the rows go full width and there is nothing to line up against. * style: lead the get involved block with contribution, not the star The block promoted four links as equally weighted buttons, so nothing in it was ranked, and the loudest element was a star. Its own copy says a bug report is worth more than a star, so the layout was arguing against the text; starring is also not contributing. Give it one button, the good-first-issue list, and drop the rest to plain text running from the ask that takes real work down to the one that costs nothing. Promote the label to a heading, and caption the contributor row, which otherwise loses its label to that heading and reads as decoration. * docs: cut the tirith ui banner to one line Four clauses and forty-four words wrapped the announcement strip onto two lines, which is more than a banner gets read for. Keep the two things the tool is for and drop the rest, which the page it links to already covers.
|
❌ The last analysis has failed. |
Pull Request Template
Description
What changes are being made?
tirith-internalunderdocumentation/new-landing-page/becomedocumentation/itself. Only
documentation/is built bydeploy_docs.yml, so this is what makesthem the published site rather than a preview nothing runs. Five routes replace one:
/(landing),/learn/(six lessons and a browser playground),/at-scale/(commercial),
/origins/(the name and the mark),/roadmap/. The paths the previewused to reach across a folder boundary (
../docs,../sidebars.js,../static)become the site's own.
.claude/skills/tirith-policies/, 11 files) and.cursor/rules/tirith-policies.mdc. The Skills page instructs readers tocurlthesefrom this repository's
mainbranch and links every file it lists; neither existedhere, so those install commands returned 404.
llms.txt,llms-full.txt(all 26 doc pages inone file),
ai.txt,robots.txt, JSON-LD (SoftwareApplication+SoftwareSourceCode+Organizationsite-wide,FAQPageon/at-scale/), and 26per-page markdown endpoints at each route plus
.md.scripts/generate-llms-full.pygenerates the last three from the doc sources so theycannot drift, and fails if a doc is added without being placed in its order list.
HUMAN | AGENTtoggle that replaces thepage with its machine-readable form. It renders
llms.txtthrough a generated module,so the page and the crawler file are the same text.
editor-and-local.md(new, marked in development),Bitbucket/Jenkins/pre-commit sections in
ci-integration.md,1.2.0install pins, andissue-template links.
tirith lintis not inthe released CLI, and the pre-commit hook and VS Code task file are not in this
repository. Every affected snippet has the lint line commented (
# in dev, not in 1.2.0), the docs page carries a warning admonition and an(in dev)sidebar label,and the landing-page section that depended on them is switched off.
deploy_docs.ymlgains the optional PostHog and HubSpot environment. Unset, theanalytics script never loads.
documentation/.gitignorenow excludes the strayyarn.lockDocusaurus writes,and one TUI banner string changed in
src/tirith/tui/app.py.Why are these changes necessary?
pages were finished in
tirith-internalbut sat in a folder no workflow built, so theycould never ship from where they were.
that were not in this repository, and a
tirith lintsubcommand the released packagedoes not have. That is worse than a missing page, because it fails after the reader has
committed to trying.
wrong about Tirith are specific and costly:
pip install tirithfetches an unrelatedproject, and exit
1and exit3mean different things on purpose.Which issues or tickets does this PR close or relate to?
Type of Change
.claude/and.cursor/agent instruction files at the repository rootChecklist
npm run buildpasses withonBrokenLinks: 'throw', which is what proves everyinternal link resolves. No Python source changed except one TUI banner string.
documentation/README.mdrewritten (it was the stock Docusaurus scaffold tellingreaders to use yarn, which contradicts the committed
package-lock.jsonand bothworkflows).
DESIGN-NOTES.mdandbrand/README.mdadded.No test changes. Nothing here touches the engine;
src/tirith/tui/app.pychanges onebanner string. Site correctness is enforced by the build itself: broken links throw,
and the llms generator fails on an unlisted doc.
None to the CLI. Two things reviewers should know: the published site's URLs change
(the old single page becomes five routes), and
/logo/was renamed/origins/before ever being published, so no live link breaks.
Screenshots or Recordings (if applicable)
Additional Information
Known limitations, deliberate:
robots.txtandai.txtwill not be read as published. Crawlers fetch those only from ahost root, and this is a GitHub Pages project site, so they land at
/tirith/robots.txt. Both say so at the top. Thellms.txthalf is mitigated by a<link rel="alternate">in every page head. The real fix is a custom domain such astirith.stackguardian.io, which would make all of them root-relative at once.pages.excludeindocusaurus.config.js) and two landing-page sections ({false && …}guards). Each carries a comment saying exactly how to restore it. Skills is excluded
because it advertises
tirith lint.llms-full.txt, the 26.mdendpoints andsrc/data/agentBrief.jsare generated andcommitted. Re-run
python3 documentation/scripts/generate-llms-full.pyafter editing docs.Worth a reviewer's attention:
documentation/static/img/platform/holds three StackGuardian product screenshots takenfrom stackguardian.io. They are currently referenced only by a switched-off section.
If they are not wanted in an Apache-2.0 repository, deleting the three files and the
assetentries inVIEWSis the whole change.EVALUATORS_DICT, 5 providers againstsrc/tirith/providers/, exit codes againststatus.py, the version and Python floor againstsetup.py. There is no CloudFormationprovider, so the site does not claim one.