Skip to content

docs: add spec-sync runbook for repo handoff - #170

Merged
tian-lan-landing merged 2 commits into
mainfrom
docs/spec-sync-runbook
Sep 22, 2026
Merged

tian-lan-landing merged 2 commits into
mainfrom
docs/spec-sync-runbook

Conversation

@tian-lan-landing

Copy link
Copy Markdown
Collaborator

Handoff docs. New docs/spec-sync-runbook.md covers the operational half that was only ever encoded in workflow files and Slack copy: the #ade-sdk-pipeline channel and its threading, what to do when new drift lands behind an open sync PR (merge vs close, and why), the aging nudge, the QA/release handoff after merge, the secrets a new owner must reissue, and known gaps.

CONTRIBUTING keeps the mechanism and links to it. One correction there: release-gate.sh is committed but not wired into release.yml, so the production gate is the e2e suite — the text claimed otherwise.

Mirrored in ade-typescript.

Operational guide split out from CONTRIBUTING (which keeps the mechanism):
the Slack channel carrying drift alerts and how its threading works, what to
do when new drift lands behind an open sync PR, the QA/release handoff after
merge, the secrets a new owner must reissue, and known gaps.

Also corrects CONTRIBUTING's release gate claim: release-gate.sh is committed
but not wired into release.yml, so the production gate is the e2e suite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The runbook contains inaccurate V1 verification, Slack fallback, and production Environment guidance.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 2 Low severity

Open (2)
What changed in this PR

Adds an operational spec-sync handoff runbook and corrects release-gate documentation.

Changes:

  • Documents Slack alerts, drift handling, QA/release handoff, secrets, and known gaps.
  • Links the runbook from contributor guidance.
  • Clarifies that production e2e—not release-gate.sh—currently gates releases.
File Description
docs/​spec-sync-runbook.md Adds the operational runbook.
CONTRIBUTING.md Links the runbook and corrects release-gate details.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/spec-sync-runbook.md Outdated
Comment thread docs/spec-sync-runbook.md Outdated
- V1's AI step has a shell and runs format/lint; only V2 is shell-less.
- Invented `client.v2` paths are caught by check-v2-paths in CI; scope the
  by-hand check to V1 resources.
- SLACK_SPEC_SYNC_WEBHOOK is not a general fallback — the lifecycle workflow
  (gate failures, aging, merged) passes only the bot token.
- The production key must be environment-only and branch-restricted to main,
  and must NOT have required reviewers (release.yml blocks on that job).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 22, 2026 04:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Several handoff instructions inaccurately describe token replacement and webhook notifications.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 2 Low severity

Open (2)
Resolved since last review (2)
Previously missed (1)

In code that hasn't changed since last review

Low severity Document per-run GitHub App token generation

docs/​spec-sync-runbook.md:144

A GitHub App installation token cannot be dropped into the existing secret without workflow changes: installation tokens expire after one hour and must be minted per run from App credentials. The same claim also appears in CONTRIBUTING.md, so both locations should explain the required token-generation step rather than promising a no-change replacement.

Comment thread docs/spec-sync-runbook.md
| `LANDINGAI_ADE_STAGING_APIKEY` | pr-gates `contract-tests` | Gated behind the **`spec-sync-contract`** Environment. Configure a **required reviewer** there — this job executes AI-authored code with the staging key in env. |
| `LANDINGAI_ADE_PRODUCTION_APIKEY` | `e2e-production.yml` (release gate 0) | **Environment secret on `production-e2e` only — do not also store it as a repo secret**, which every branch can read and which defeats the branch rule. Under that Environment's "Deployment branches and tags", restrict to **`main`**: that rule, not the workflow's `if`, is the real control — a `workflow_dispatch` runs the selected ref's copy of the workflow file, which could drop the `if`. Unlike the staging Environment, do **not** add required reviewers here: `release.yml` blocks on this job, so every release would pause for a manual approval. |
| `SLACK_BOT_TOKEN` | `.github/actions/slack-notify` | `xoxb-…`. Threading exists **only** on this path. Must be in `#ade-sdk-pipeline`. |
| `SLACK_SPEC_SYNC_WEBHOOK` | `spec-sync.yml` only | Incoming webhook, used only when the bot token is empty. Flat, no threading — and **not a general fallback**: `spec-sync-lifecycle.yml` (gate failures, aging nudge, PR merged) passes only the bot token, so a webhook-only setup silently loses those three messages. |
Comment thread docs/spec-sync-runbook.md
| `LANDINGAI_ADE_PYPI_TOKEN` (or `PYPI_TOKEN`) | `publish-pypi.yml`, `release-doctor.yml` | PyPI publish token. |

Not a secret but part of the handoff: the **required reviewer** on the `spec-sync-contract` Environment is a named person too (`production-e2e` deliberately has none — see its row above).
`production-e2e` Environments are named people too.
@tian-lan-landing
tian-lan-landing merged commit 1f4b62a into main Sep 22, 2026
6 checks passed
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.

2 participants