Skip to content

Bump to v0.10.0 and guard public-surface drift in CI#53

Merged
pengfei-threemoonslab merged 3 commits intomainfrom
claude/elastic-pascal-7029fa
May 8, 2026
Merged

Bump to v0.10.0 and guard public-surface drift in CI#53
pengfei-threemoonslab merged 3 commits intomainfrom
claude/elastic-pascal-7029fa

Conversation

@pengfei-threemoonslab
Copy link
Copy Markdown
Contributor

Summary

  • Bumps agents-shipgate to v0.10.0 and aligns every public / agent-facing surface (pyproject, .well-known, llms.txt, contract doc, README, docs, all GitHub Actions / CircleCI / GitLab-CI examples, prompts, skills) to a single canonical package version, GitHub Action pin, and shipgate_version input.
  • Fixes packet-schema drift: llms.txt and skills/agents-shipgate/SKILL.md referenced packet-schema.v0.2.json while the contract was already at v0.3; SKILL.md also linked the broken anchor #release-evidence-packet-v01.
  • Replaces the longest restated field lists in AGENTS.md and skills/agents-shipgate/SKILL.md with links to docs/agent-contract-current.md anchors so future schema bumps update one file, not five.
  • Adds eight new drift-detection tests in tests/test_public_surface_contract.py so CI fails on stale Action pins, stale package versions, stale report/packet schema links, stale packet anchors, and forbidden display names (Agent Shipcheck / Agent Shipgate) outside explicit "do not use" lists. The existing summary.status negative test already covers "new gating signal" drift.

Type

  • Check or risk-model change
  • Input adapter change
  • CLI or GitHub Action behavior
  • Report, schema, or SARIF output
  • Documentation only

Verification

CI is authoritative for python -m ruff check ., python -m compileall -q src tests, and python -m pytest.

Additional local checks run:

  • python -m pytest -q → 677 passed
  • python -m pytest tests/test_public_surface_contract.py -v → 172 passed (was 30 pre-bump; the new parametrized tests run across PUBLIC_SURFACES and a new ACTION_PIN_FILES superset of 33 files)
  • python -m ruff check . → clean
  • grep -rn \"@v0\\.[0-9]\\+\\.[0-9]\\+\" --include='*.md' --include='*.yml' --include='*.yaml' --include='*.txt' --include='*.json' . | grep -v -E 'CHANGELOG|marketing|samples|tests' | grep -v '@v0\\.10\\.0' → empty (no remaining stale Action pins outside historic files)
  • grep -rn \"packet-schema\\.v0\\.[0-9]\" --include='*.md' --include='*.json' --include='*.txt' . | grep -v -E 'CHANGELOG|docs/packet-schema' | grep -v 'v0\\.3' → empty (no remaining stale packet-schema references)

Release-readiness notes

  • No user-code import added to default scan paths
  • No network access added to default scan paths
  • New or changed check IDs are documented in docs/checks.md (no check changes in this PR)
  • Report/schema changes are additive or documented in STABILITY.md (no schema changes; only metadata version bumps to match the already-released report-schema v0.10 / packet-schema v0.3)

Notes for reviewers

  • The v0.10.0 git tag does not yet exist. This PR bumps in-tree metadata; cut and publish the tag separately when merging. The new tests intentionally do not assert tag existence (that would block this PR). Tag existence is enforced by the release workflow at publish time.
  • marketing/linkedin-launch-post.md keeps its @v0.5.1 pin (frozen launch copy for that specific release) and is explicitly excluded from ACTION_PIN_FILES.
  • Frozen schema files (docs/{report,packet}-schema.v0.X.json) are also excluded — their $id necessarily names their own frozen version.
  • examples/github-actions/README.md:45 documents the Action output named decision as "the gating signal". The plan deliberately doesn't add a positive release_decision.decision-must-be-mentioned test because it would false-positive there; the existing summary.status negative test plus .well-known.gating_signal are the right guard.

🤖 Generated with Claude Code

pengfei-threemoonslab and others added 3 commits May 8, 2026 14:26
Aligns every public/agent-facing surface to a single canonical
package version, GitHub Action pin, and packet-schema link, and adds
parametrized tests that fail if any of these drift again.

Why: pre-bump, README, target-repo snippets, and three example
workflows pinned `@v0.10.0` against a tag that didn't exist yet —
any agent following those examples would have failed in CI on the
first run. The packet schema had also drifted (llms.txt and
SKILL.md still pointed at v0.2 while the contract was v0.3) and the
SKILL.md anchor `#release-evidence-packet-v01` linked nowhere.

What changed:
- pyproject, .well-known, llms.txt, contract doc, src/__init__,
  faq, ROADMAP, distribution, bug-report template all bump to
  v0.10.0.
- Every Action / pip / `shipgate_version:` pin in README, docs,
  prompts, GitHub-Actions/CircleCI/GitLab-CI examples now reads
  v0.10.0; the five files already at v0.10.0 are now correct.
- llms.txt and skills/agents-shipgate/SKILL.md packet schema
  references move v0.2 -> v0.3; SKILL.md anchor v01 -> v03.
- AGENTS.md (release_decision/capability/tool_surface field
  enumeration) and skills/agents-shipgate/SKILL.md (report-JSON
  megaline) now link to docs/agent-contract-current.md anchors
  instead of restating the contract field-by-field.
- tests/test_public_surface_contract.py grows eight new
  drift-detection tests (parametrized over a new ACTION_PIN_FILES
  superset of PUBLIC_SURFACES): contract-doc/test-constant
  agreement, pyproject↔well-known↔llms↔contract version sync,
  Action / pip / `shipgate_version:` pin drift, packet-schema
  freshness and anchor accuracy, and forbidden display-name
  enforcement (`Agent Shipcheck` / `Agent Shipgate` only inside
  explicit "do not use" lists). marketing/ and frozen schema files
  are excluded by design.

Tests intentionally not added: a "v0.10.0 tag exists" assertion
(would block the very PR that does the bump) and a positive
"release_decision.decision is the gating signal" check (the
existing summary.status negative test plus
.well-known.gating_signal cover this without false-positiving on
examples/github-actions/README.md, which legitimately documents
the Action output named `decision`).

Verification: pytest 677 passed, ruff clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolves conflicts in three files:

- docs/agent-contract-current.md: keeps main's new
  `agents-shipgate contract --json` verification block and
  `Runtime contract: 1` line on top of this branch's
  `Latest release: v0.10.0` bump.
- skills/agents-shipgate/SKILL.md: keeps main's new
  `Installed CLI contract` bullet pointing at the local
  `agents-shipgate contract --json` command, alongside this
  branch's consolidated `Report JSON` bullet that links the
  long field enumeration into
  docs/agent-contract-current.md instead of restating it.
- tests/test_public_surface_contract.py: takes main's broader
  `ANY_PACKET_SCHEMA_PATTERN` regex (`v\d+\.\d+`, future-proof
  past v0.x) and keeps this branch's three new patterns
  (LEGACY_PACKET_SCHEMA_PATTERN, PACKET_ANCHOR_PATTERN, plus
  the action/pip/version-input pin patterns).

Auto-merged everything else cleanly, including .well-known
(this branch's v0.10.0 bump + main's new `contract` and
`contract_version` keys).

Verification: pytest 677 passed, ruff clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
P2: ROADMAP.md self-contradiction.
v0.8.0 Release Decision Engine sat under "## Open" while the lead
paragraph already declared v0.2-v0.8 complete. Move the v0.8.0 entry
into "## Completed" (re-tensed to past), drop the "v0.8.x" prefix
from the source-provenance section that is now the active open work,
and tighten the lead paragraph to point at it.

P3: Version literals on public surfaces this PR bumped were not
guarded by the new drift tests.
The Action / pip / shipgate_version pin tests catch every pinned
version, but they don't catch plain release-version literals like
the bug-report placeholder, distribution.md's release-tag list,
faq.md's "latest released version" line, and ROADMAP.md's lead. Add
VERSION_LITERAL_TARGETS (one (path, regex) per surface, with each
regex anchored to the surrounding phrasing so historical version
mentions in the same file don't false-positive) and a parametrized
test_version_literals_match_pyproject_version that asserts each
captured literal equals pyproject.toml's version.

P1 was already resolved by the previous merge commit (8254cdb);
gh pr view 53 reports mergeStateStatus: CLEAN, mergeable: MERGEABLE.

Verification: pytest 681 passed (4 new parametrizations from
VERSION_LITERAL_TARGETS), ruff clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@pengfei-threemoonslab pengfei-threemoonslab merged commit eb61cb6 into main May 8, 2026
1 check passed
@pengfei-threemoonslab pengfei-threemoonslab deleted the claude/elastic-pascal-7029fa branch May 8, 2026 22:09
pengfei-threemoonslab added a commit that referenced this pull request May 8, 2026
Picks up: contract CLI command (#52), v0.10.0 release tag (#53),
init --agent-instructions (#54), HITL evidence provenance (#50),
agent autofix-boundary docs (#55), packet schema v0.3.

Conflict resolution: kept v0.11 report-schema references on top of
main's v0.10.0 release / packet-schema v0.3 / contract-command
additions. AGENTS.md and SKILL.md adopt main's centralized
"contract lives in agent-contract-current.md" pattern; the v0.11
provenance line lives there now. test_public_surface_contract.py
adopts main's derive-from-model approach for the current schema
constants and just adds v0.10 to the legacy-pattern list.

Also fixes a SARIF regression flagged in review: ``_location()``
chose the structured branch whenever ``source.path`` was set, so a
finding with ``path="foo.py"`` and legacy
``location="foo.py:10"`` emitted no ``region``. Hybrid / plugin
findings now fall back to ``_split_location(source.location or
source.ref)`` when ``start_line`` is absent. Adds a regression
test.

After merge: 805 passed (+3 skipped), ruff clean,
``agents-shipgate contract --json`` reports
``report_schema_version: "0.11"``.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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