Skip to content

release: v0.1.0 - #16

Draft
corpora-ui-automation[bot] wants to merge 8 commits into
mainfrom
release/v0.1.0
Draft

release: v0.1.0#16
corpora-ui-automation[bot] wants to merge 8 commits into
mainfrom
release/v0.1.0

Conversation

@corpora-ui-automation

Copy link
Copy Markdown

Release v0.1.0.

Changes

  • chore: remove agent/AI tool artifacts (chore: remove agent/AI tool artifacts #4)
  • ✨: add mintlify documentation workflow skills
  • feat: validate section requests and reconcile merged navigation
  • feat: open an activation PR when a section is marked active
  • fix: make the activation re-runnable and the report always present
  • fix: add the Makefile the PR workflow shells out to
  • chore: drop the corpora-py leftovers from .github

Refreshed automatically whenever a PR lands on release/v0.1.0.

emmanuel-defreitas and others added 8 commits August 8, 2026 13:30
Lands the read-only half of section activation (#9).

Schema, slug format and slug/repo uniqueness now live in one place,
.github/scripts/sections.py, so the PR validator, the reconciler and the
activation workflow cannot drift apart on what "valid" means.

section-request.yml validates PRs touching sections/** and posts a single
status comment that is rewritten in place. Drafts are validated too — an
author should see schema errors while still drafting — but only the comment
waits for ready-for-review so draft iterations don't spam the thread.
Activation state is deliberately not checked here: a PR that merely files a
request has no submodule yet, and demanding one would make every new request
red.

reconcile-sections.yml gains the navigation check. Its submodule check could
pass while a section was still invisible: a submodule with no docs.json nav
entries ships content nobody can navigate to. It stays read-only.

The nav check walks the navigation tree rather than grepping the file, so it
sees nested groups and tabs. Page paths include docs_path — a submodule
clones a whole repository, so a source repo's docs/ lands at
content/<slug>/docs/, not content/<slug>/.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Lands the write half of section activation (#9): steps 1 and 3 of
"Activating a section" now run on a push to main that sets status: active.

The result is always a pull request, never a push to main. The submodule pin
and the mechanical nav rewrite are exactly the kind of change a human should
read before it reaches the deploy branch.

merge_nav.py splices each section in as one top-level group named after its
label rather than flattening the source's groups in. Mintlify's navigation
takes one top-level shape (tabs or groups, not both), and source repos
commonly use names as generic as "Contributing" or "API" — one group per
section preserves the source hierarchy and cannot collide with this repo's
own groups. Re-running replaces the previous block for a slug instead of
appending, so activation is idempotent.

Step 2, connecting the Mintlify GitHub App, is dashboard-only with no API.
It appears as an unticked checklist item at the top of the PR body, so
merging an activation never implies the App is connected.

Verified end to end against exegia/corpora-auth in a throwaway clone: the
submodule pins, all 14 rewritten page paths resolve to real files, the
reconciler goes green, and a second merge is a no-op. Manual runs default
to a dry run, so the write path can be exercised without activating
anything.

Also corrects the docs' path example: page paths include docs_path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two failure modes found by re-testing the paths the first rehearsal didn't
reach.

The activation branch could not be updated. An activation PR that is opened
but not yet merged leaves main without the submodule and nav, so the slug
stays listed and the next sections/** push re-enters the loop for it. The
push then failed: actions/checkout fetches a single ref, so there is no
remote-tracking ref for the bot branch and --force-with-lease rejects with
"stale info" — aborting the step under `set -e` before `gh pr edit` could
run. Reproduced against a scratch remote; plain --force fixes it, and a
lease buys nothing on a branch that is bot-owned and rebuilt from
origin/main every run.

validate_sections.py returned before writing --output when sections/ was
absent. Git does not track empty directories, so archiving the last section
deletes sections/ outright — a PR that still matches paths: sections/** and
would then have died on `cat report.md` instead of reporting a verdict.
Fixed in the script so both callers benefit.

Also validated the merged docs.json against Mintlify's published schema: the
three-level group nesting a tabs-structured source produces is accepted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The `guard` and `check` jobs have failed on every PR this repo has ever
opened. `.github/` was copied wholesale from corpora-py, which carries a
root `makefile`; that file did not come with it, so `make pr-guard` and
`make ci` both died on "no such file or directory" — including on the
three PRs that were merged past the red anyway.

Ports the release-pipeline targets from corpora-py's makefile, adapted to
a repo that publishes a docs site rather than a wheel:

* VERSION replaces pyproject.toml as the manifest `pr-guard` cross-checks
  a release branch against and `tag-release` turns into the tag. Seeded
  at 0.1.0 to match the release/v0.1.0 branch already on origin.
* `ci` validates docs.json and the sections registry instead of running
  ruff/mypy/pytest. Both checks are offline by construction: a
  `mint broken-links` would make the required status on every PR depend
  on a registry and a remote build.
* No `pack`, and no `package` job — there is no artifact to build.

The `check` job could not have gone green on the Makefile alone: it also
ran `./.github/actions/setup`, which provisions uv against a uv.lock and
a .python-version that this repo does not have. Both it and release.yml
now set up Python the way the section workflows already do.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Everything removed here was copied from exegia/corpora-py and describes a
Python package this repo does not contain. None of it fires on a pull
request, which is why it survived the previous commit — but publish.yml
triggers on `push: tags: v*`, and `make tag-release` pushes exactly those,
so the first real release would have raised a red PyPI job on a repo with
no wheel to publish.

* publish.yml — PyPI trusted publishing for the corpora-py wheel.
* vercel.yml — manual deploy of corpora_py.app on Vercel's Python runtime.
  This repo has no vercel.json and no .vercelignore; the site is built by
  the Mintlify GitHub App, which is the deployment check on every PR.
* .github/actions/{build-dist,publish-pypi} — used only by publish.yml.
* .github/actions/setup — provisions uv against a uv.lock and a
  .python-version that do not exist here. Nothing referenced it once the
  `check` job stopped.

Also removes `package` from the main ruleset's required status checks. The
job it names was deleted with the wheel, and a required check that no
workflow produces would have left main unmergeable the moment
`make rulesets-apply` ran — the rulesets are not applied on GitHub today,
so this was latent rather than live.

The header comments in release.yml described the tag as feeding publish.yml
and a build-sidecar.yml that was never copied; they now describe what the
tag actually does.

Finally, .github/scripts/__pycache__ was tracked and re-churned on every
local run of the section scripts. Untracked and ignored.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fix: add the Makefile the PR workflow shells out to
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant