📦 deps(thirdparty): update snapshots
This commit is contained in:
@@ -7,10 +7,4 @@
|
||||
# Documentation
|
||||
*.md @sickn33
|
||||
|
||||
# AAS v1 independently frozen verifier baseline. Independent reviewer
|
||||
# attestations are content-addressed inside the protected baseline.
|
||||
/verification/aas-v1/ @sickn33
|
||||
/.github/workflows/aas-v1-baseline-check.yml @sickn33
|
||||
/.github/workflows/aas-v1-product-verifier.yml @sickn33
|
||||
/.github/workflows/aas-v1-verifier-harness.yml @sickn33
|
||||
/.github/CODEOWNERS @sickn33
|
||||
|
||||
+15
-61
@@ -13,6 +13,12 @@ It covers the **Quality Bar**, **Documentation Consistency**, and **Release Work
|
||||
|
||||
**AGENTS MUST READ AND FOLLOW THIS SECTION BEFORE MARKING ANY TASK AS COMPLETE.**
|
||||
|
||||
### Current-base instruction guard
|
||||
|
||||
After establishing the clean task base, re-read `AGENTS.md`, this guide, the repository-canonical maintainer skill, and `package.json` from that exact base. Do not rely on repository instructions inherited from a different checkout.
|
||||
|
||||
Every command, script, reviewer, or gate described as mandatory must exist on the current task base. If it does not, never import or run the retired implementation from another branch, worktree, stash, installed copy, or historical commit. Compare with `origin/main`, inspect the removal history, and use the current-base contract; stop and report only if the conflict cannot be resolved from repository history.
|
||||
|
||||
There are 5 things that usually fail/get forgotten. **DO NOT FORGET THEM:**
|
||||
|
||||
### 1. 📤 ALWAYS PUSH (Non-Negotiable)
|
||||
@@ -131,14 +137,7 @@ Before ANY commit that adds/modifies skills, run the chain:
|
||||
```bash
|
||||
npm run audit:maintainer
|
||||
```
|
||||
When you are reducing legacy `risk: unknown` debt, use this sequence instead of hand-editing large batches:
|
||||
```bash
|
||||
npm run audit:skills
|
||||
npm run sync:risk-labels -- --dry-run
|
||||
npm run sync:risk-labels
|
||||
npm run sync:repo-state
|
||||
```
|
||||
`sync:risk-labels` is intentionally conservative. It should handle only the obvious subset; the ambiguous tail still needs maintainer review.
|
||||
Risk labels are declared metadata. Validate the declared value and review ambiguous `risk: unknown` cases semantically; do not infer or rewrite risk from isolated words.
|
||||
|
||||
6. **COMMIT GENERATED FILES**:
|
||||
```bash
|
||||
@@ -156,45 +155,9 @@ Before ANY commit that adds/modifies skills, run the chain:
|
||||
|
||||
**Before merging:**
|
||||
|
||||
### Mandatory local reviewer gate for changed skills
|
||||
### Skill-content review gate
|
||||
|
||||
<!-- local-skill-reviewer-policy:v1 -->
|
||||
|
||||
For every canonical `SKILL.md` change or change to one of its tracked bundle files, the maintainer must complete this local gate before the official merge gate:
|
||||
|
||||
1. Stage only the exact changed skill and bundle blobs intended for review. The local reviewer reads the Git index; an unstaged correction is not reviewed, and unrelated paths must not be staged with it.
|
||||
2. Use a private result directory outside the repository and run:
|
||||
|
||||
```bash
|
||||
npm run review:skills:local -- review <skill-id> --merge-gate --result-dir <private-temp-dir>
|
||||
```
|
||||
|
||||
3. Inspect `triage.reviewStatus`, `triage.priority`, and `triage.reasonCodes`. For P0/P1, uncertain, or locally namespaced `manual-review-required` results, choose exactly one semantic preparation route.
|
||||
|
||||
Single-skill semantic route (alternative to batch preparation):
|
||||
|
||||
```bash
|
||||
npm run review:skills:semantic:packet -- <skill-id> --result-dir <private-temp-dir>
|
||||
```
|
||||
|
||||
Obtain the Codex judgment for that packet, then import and verify it:
|
||||
|
||||
```bash
|
||||
npm run review:skills:semantic:import -- <skill-id> --input <codex-judgment.json> --result-dir <private-temp-dir>
|
||||
npm run review:skills:semantic:verify -- <skill-id> --result-dir <private-temp-dir>
|
||||
```
|
||||
|
||||
Batch semantic route (alternative to the single-skill packet command):
|
||||
|
||||
```bash
|
||||
npm run review:skills:semantic:prepare -- --result-dir <private-temp-dir>
|
||||
```
|
||||
|
||||
For each escalated skill in that batch, obtain its Codex judgment, then run the same `semantic:import` and `semantic:verify` commands above. Never run `semantic:packet` and `semantic:prepare` for the same skill in the same result directory.
|
||||
|
||||
4. After any correction, stage the exact intended blobs again and rerun the local reviewer, `npm run validate`, `npm run validate:references`, `npm run security:docs`, and the relevant tests.
|
||||
|
||||
The local status is identified by `source: local-skill-reviewer`. It is triage and review support only: it does not replace Tessl, is not the CI status with the same name, and does not satisfy the exact-head attestation. A truthful Tessl `review` or the normal maintainer attestation bound to the full head SHA remains the official merge gate.
|
||||
For every canonical `SKILL.md` or tracked bundle-file change, run validation, reference validation, documentation security, changed-skill evidence, and relevant tests. Review semantics, provenance, declared risk, limitations, and bundled files directly. The separate `skill-review` workflow or an exact-head maintainer attestation remains authoritative; local heuristic scores and inferred risk labels are not merge gates.
|
||||
|
||||
1. **CI is green** — Validation, warning-budget enforcement, README source-credit checks, reference checks, tests, and generated artifact steps passed (see [`.github/workflows/ci.yml`](workflows/ci.yml)). If the PR changes any `SKILL.md`, the separate [`skill-review` workflow](workflows/skill-review.yml) must also be green.
|
||||
2. **Generated drift understood** — On pull requests, generator drift is informational only. Do not block a good PR solely because canonical artifacts would be regenerated. Also do not accept PRs that directly edit `CATALOG.md`, `skills_index.json`, or `data/*.json`; those files are `main`-owned.
|
||||
@@ -213,7 +176,7 @@ This happens regularly on community PRs from forks. The common symptoms are:
|
||||
|
||||
- `gh pr checks` shows `no checks reported` even though Actions runs exist.
|
||||
- `gh run list` shows `action_required` with `jobs: []` for `Skills Registry CI` or `Skill Review`.
|
||||
- `pr-policy` fails with `PR body must include the Quality Bar Checklist from the template.` even after you corrected the PR body and hit rerun.
|
||||
- the PR body does not include the optional Quality Bar Checklist.
|
||||
|
||||
Use this playbook:
|
||||
|
||||
@@ -225,19 +188,10 @@ Use this playbook:
|
||||
```bash
|
||||
npm run merge:batch -- --prs <PR_NUMBER> --reviewed-head <40-character-head-sha>
|
||||
```
|
||||
2. **Normalize the PR body** so it includes the repository template's `## Quality Bar Checklist ✅` section. If `gh pr edit` works, use it. If `gh pr edit` fails with the GraphQL `projectCards` / Projects Classic deprecation error, patch the PR body through the REST API instead:
|
||||
```bash
|
||||
gh api repos/<OWNER>/<REPO>/pulls/<PR_NUMBER> -X PATCH --input <(jq -n --rawfile body /tmp/pr_body.md '{body:$body}')
|
||||
```
|
||||
3. **Do not trust a plain rerun** to pick up the updated PR body. In practice, `gh run rerun <RUN_ID>` may re-use the original `pull_request` event payload, so `pr-policy` can keep reading the stale body and fail again.
|
||||
4. **If the rerun still sees stale metadata, close and reopen the PR** to force a fresh `pull_request` event:
|
||||
```bash
|
||||
gh pr close <PR_NUMBER> --comment "Maintainer workflow refresh: closing and reopening to retrigger pull_request checks against the updated PR body."
|
||||
gh pr reopen <PR_NUMBER>
|
||||
```
|
||||
5. **Let `merge:batch` wait for and approve newly created fork runs** after reopen. GitHub Actions materializes those runs asynchronously, so an empty first lookup is not evidence that approval is unnecessary. Do not approve them directly by run ID; the command binds every approval to the current PR, exact head SHA, allowlisted workflow, locally recomputed diff, and the workflow/check-suite generation created after the reopen.
|
||||
6. **Wait for the new checks only.** You may see older failed `pr-policy` runs in the rollup alongside newer green runs. Freshness is determined by workflow-run and check-suite IDs captured after the reopen, not by head SHA or completion time alone. Merge only after that fresh run set is fully green: `pr-policy`, `pr-evidence`, `source-validation`, `artifact-preview`, and a truthful skill-review outcome when `SKILL.md` changed. `review` means Tessl semantic review actually ran or reused a successful result for the identical skill-content fingerprint. `manual-review-required` means Tessl did not run because repository secrets or Tessl credits were unavailable and requires the exact-SHA maintainer attestation above. Never describe `manual-review-required` as a Tessl review, and never rerun Tessl merely because the PR head or base moved when the changed skill content is identical. `source-validation` enforces the frozen warning budget and README source-credit coverage for changed skills, so missing `## When to Use` sections, missing README repo credits, or other new warning drift must be fixed before merge.
|
||||
7. **If `gh pr merge` says `Base branch was modified`**, refresh the PR state and retry. This is normal when you are merging a batch and `main` moved between attempts.
|
||||
2. **Treat the checklist as guidance, not evidence.** A missing checklist emits a notice; objective path, blob, validation, reference, provenance, security, test, and exact-head review gates determine mergeability.
|
||||
3. **Let `merge:batch` approve action-required fork runs.** GitHub Actions materializes those runs asynchronously, so an empty first lookup is not evidence that approval is unnecessary. Do not approve them directly by run ID; the command binds every approval to the current PR, exact head SHA, allowlisted workflow, locally recomputed diff, and immutable PR tuple.
|
||||
4. **Wait for the required checks.** Merge only after `pr-policy`, `pr-evidence`, `source-validation`, `artifact-preview`, and a truthful skill-review outcome when `SKILL.md` changed. `review` means Tessl semantic review actually passed or reused a successful result for the identical skill-content fingerprint. `manual-review-required` means credentials or credits were unavailable, or Tessl did not produce a passing result; it requires the exact-SHA maintainer judgment above. Never describe `manual-review-required` as “Tessl passed,” and never rerun Tessl merely because the PR head or base moved when the changed skill content is identical.
|
||||
5. **If the merge endpoint says `Base branch was modified`**, refresh the PR state and retry. This is normal when you are merging a batch and `main` moved between attempts.
|
||||
|
||||
**If a PR was closed after local integration (reopen and merge):**
|
||||
|
||||
@@ -283,7 +237,7 @@ We used this flow for PRs [#220](https://github.com/sickn33/agentic-awesome-skil
|
||||
**Maintainer shortcut for batched PRs:**
|
||||
|
||||
- Use `npm run merge:batch -- --prs 450,449,446,451` to automate the ordered maintainer flow for multiple PRs. See [docs/maintainers/merge-batch.md](../docs/maintainers/merge-batch.md) for the short usage guide.
|
||||
- Pages is release-only: ordinary pushes to `main` never deploy it. Dispatch `.github/workflows/pages.yml` explicitly only at an approved publication gate. Canonical-sync merges still use `--skip-pages` and carry `[skip pages]` as a durable audit marker; required CI, the frozen AAS baseline, and CodeQL remain enforced.
|
||||
- Pages is release-only: ordinary pushes to `main` never deploy it. Dispatch `.github/workflows/pages.yml` explicitly only at an approved publication gate. Canonical-sync merges still use `--skip-pages` and carry `[skip pages]` as a durable audit marker; the four routine app-bound checks and CodeQL remain enforced. The supported Core preview uses the targeted packed smoke workflow; retired certified-v1 verifier harnesses are not part of the repository workflow.
|
||||
- The script keeps the GitHub-only squash merge rule, handles fork-run approvals and stale PR metadata refresh, waits only on fresh required checks, retries `Base branch was modified`, and runs the mandatory post-merge `sync:contributors` follow-up on `main`. The fork content allowlist applies only to external PRs; same-repository maintainer PRs may change repository-wide source while remaining subject to protected checks, trusted changed-skill evidence, exact-head review, and immutable PR identity.
|
||||
- It is intentionally not a conflict resolver. If a PR is conflicting, stop and follow the manual conflict playbook.
|
||||
|
||||
|
||||
@@ -41,6 +41,10 @@ jobs:
|
||||
|
||||
- name: Verify deterministic catalog and preview contracts
|
||||
run: |
|
||||
npm run plugin-compat:sync
|
||||
npm run index
|
||||
npm run catalog
|
||||
npm run build:aas-v1-catalog
|
||||
npm run check:aas-v1-catalog
|
||||
npm run test:aas-v1
|
||||
node --check verification/aas-preview/runner.mjs
|
||||
@@ -68,21 +72,6 @@ jobs:
|
||||
- job-id: linux-node-22
|
||||
os: ubuntu-24.04
|
||||
node: 22.23.1
|
||||
- job-id: linux-node-24
|
||||
os: ubuntu-24.04
|
||||
node: 24.18.0
|
||||
- job-id: macos-node-22
|
||||
os: macos-15-intel
|
||||
node: 22.23.1
|
||||
- job-id: macos-node-24
|
||||
os: macos-15-intel
|
||||
node: 24.18.0
|
||||
- job-id: windows-node-22
|
||||
os: windows-2025
|
||||
node: 22.23.1
|
||||
- job-id: windows-node-24
|
||||
os: windows-2025
|
||||
node: 24.18.0
|
||||
runs-on: ${{ matrix.os }}
|
||||
timeout-minutes: 25
|
||||
steps:
|
||||
@@ -169,18 +158,13 @@ jobs:
|
||||
path: ${{ runner.temp }}/aas-preview-receipts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Aggregate without weakening certified-v1 gates
|
||||
- name: Aggregate the supported preview smoke
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
root="$RUNNER_TEMP/aas-preview-receipts"
|
||||
node verification/aas-preview/aggregate.mjs \
|
||||
--receipt "$root/aas-preview-linux-node-22.json" \
|
||||
--receipt "$root/aas-preview-linux-node-24.json" \
|
||||
--receipt "$root/aas-preview-macos-node-22.json" \
|
||||
--receipt "$root/aas-preview-macos-node-24.json" \
|
||||
--receipt "$root/aas-preview-windows-node-22.json" \
|
||||
--receipt "$root/aas-preview-windows-node-24.json" \
|
||||
--workbench "$root/aas-preview-workbench.json" \
|
||||
--out "$RUNNER_TEMP/aas-agent-first-preview.json"
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
name: AAS v1 baseline freeze
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches: ["main"]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
baseline-freeze:
|
||||
name: aas-v1-baseline
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Check out candidate baseline
|
||||
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Use the frozen verifier runtime
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: 22.23.1
|
||||
cache: npm
|
||||
cache-dependency-path: verification/aas-v1/verifier/package-lock.json
|
||||
|
||||
- name: Install verifier dependencies without lifecycle scripts
|
||||
run: npm --prefix verification/aas-v1/verifier ci --ignore-scripts
|
||||
|
||||
- name: Run reference metric tests
|
||||
run: npm --prefix verification/aas-v1/verifier test
|
||||
|
||||
- name: Validate frozen schemas and corpora
|
||||
run: |
|
||||
npm --prefix verification/aas-v1/verifier run check:schemas
|
||||
npm --prefix verification/aas-v1/verifier run check:structure
|
||||
npm --prefix verification/aas-v1/verifier run check:benchmark:frozen
|
||||
npm --prefix verification/aas-v1/verifier run check:secondary:frozen
|
||||
|
||||
- name: Verify hostile fixtures and legacy snapshots
|
||||
run: |
|
||||
node verification/aas-v1/baseline/v1/hostile/verify-fixtures.mjs
|
||||
node verification/aas-v1/baseline/v1/legacy/14.6.0/validate-snapshots.mjs
|
||||
|
||||
- name: Verify ownership, freeze readiness, and content digest
|
||||
run: |
|
||||
npm --prefix verification/aas-v1/verifier run check:freeze-ready
|
||||
npm --prefix verification/aas-v1/verifier run freeze:check
|
||||
@@ -1,199 +0,0 @@
|
||||
name: AAS v1 product verifier
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "tools/bin/aas.js"
|
||||
- "tools/bin/aas-mcp.js"
|
||||
- "tools/lib/aas-v1/**"
|
||||
- "data/aas-v1/**"
|
||||
- "schemas/aas-v1/**"
|
||||
- "package.json"
|
||||
- "package-lock.json"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
candidate_commit:
|
||||
description: Full candidate commit SHA
|
||||
required: true
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: aas-v1-product-${{ github.event.pull_request.head.sha || inputs.candidate_commit }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
candidate-pack:
|
||||
name: Candidate tarball
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 15
|
||||
outputs:
|
||||
commit: ${{ steps.identity.outputs.commit }}
|
||||
verifier_commit: ${{ steps.identity.outputs.verifier_commit }}
|
||||
steps:
|
||||
- name: Resolve immutable candidate
|
||||
id: identity
|
||||
shell: bash
|
||||
env:
|
||||
PR_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
||||
INPUT_SHA: ${{ inputs.candidate_commit }}
|
||||
WORKFLOW_SHA: ${{ github.sha }}
|
||||
run: |
|
||||
sha="${PR_SHA:-$INPUT_SHA}"
|
||||
verifier_sha="${BASE_SHA:-$WORKFLOW_SHA}"
|
||||
[[ "$sha" =~ ^[0-9a-f]{40}$ ]] || exit 64
|
||||
[[ "$verifier_sha" =~ ^[0-9a-f]{40}$ ]] || exit 64
|
||||
echo "commit=$sha" >> "$GITHUB_OUTPUT"
|
||||
echo "verifier_commit=$verifier_sha" >> "$GITHUB_OUTPUT"
|
||||
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
ref: ${{ steps.identity.outputs.commit }}
|
||||
path: candidate
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: 24.18.0
|
||||
cache: npm
|
||||
cache-dependency-path: candidate/package-lock.json
|
||||
- name: Pack without lifecycle execution
|
||||
working-directory: candidate
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p "$RUNNER_TEMP/aas-candidate"
|
||||
npm pack --ignore-scripts --json --pack-destination "$RUNNER_TEMP/aas-candidate" > "$RUNNER_TEMP/aas-pack.json"
|
||||
test "$(find "$RUNNER_TEMP/aas-candidate" -maxdepth 1 -name '*.tgz' -type f | wc -l | tr -d ' ')" = 1
|
||||
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: aas-v1-candidate-${{ steps.identity.outputs.commit }}
|
||||
path: ${{ runner.temp }}/aas-candidate/*.tgz
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
verify:
|
||||
name: ${{ matrix.id }}
|
||||
needs: candidate-pack
|
||||
env:
|
||||
GIT_CONFIG_COUNT: 1
|
||||
GIT_CONFIG_KEY_0: core.autocrlf
|
||||
GIT_CONFIG_VALUE_0: "false"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- id: linux-node-22
|
||||
os: ubuntu-24.04
|
||||
node: 22.23.1
|
||||
fs_type: ext4
|
||||
fs_case: sensitive
|
||||
- id: linux-node-24
|
||||
os: ubuntu-24.04
|
||||
node: 24.18.0
|
||||
fs_type: ext4
|
||||
fs_case: sensitive
|
||||
- id: macos-node-22
|
||||
os: macos-15-intel
|
||||
node: 22.23.1
|
||||
fs_type: apfs
|
||||
fs_case: insensitive-preserving
|
||||
- id: macos-node-24
|
||||
os: macos-15-intel
|
||||
node: 24.18.0
|
||||
fs_type: apfs
|
||||
fs_case: insensitive-preserving
|
||||
- id: windows-node-22
|
||||
os: windows-2025
|
||||
node: 22.23.1
|
||||
fs_type: ntfs
|
||||
fs_case: insensitive-preserving
|
||||
- id: windows-node-24
|
||||
os: windows-2025
|
||||
node: 24.18.0
|
||||
fs_type: ntfs
|
||||
fs_case: insensitive-preserving
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: false
|
||||
timeout-minutes: 45
|
||||
steps:
|
||||
- name: Checkout protected verifier revision
|
||||
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
ref: ${{ needs.candidate-pack.outputs.verifier_commit }}
|
||||
path: trusted
|
||||
persist-credentials: false
|
||||
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
||||
with:
|
||||
name: aas-v1-candidate-${{ needs.candidate-pack.outputs.commit }}
|
||||
path: ${{ runner.temp }}/candidate
|
||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
cache: npm
|
||||
cache-dependency-path: trusted/verification/aas-v1/verifier/package-lock.json
|
||||
- name: Install verifier dependencies only
|
||||
working-directory: trusted/verification/aas-v1/verifier
|
||||
run: npm ci --ignore-scripts
|
||||
- name: Verify protected freeze before candidate execution
|
||||
working-directory: trusted/verification/aas-v1/verifier
|
||||
run: npm run freeze:check
|
||||
- name: Run black-box verifier
|
||||
shell: bash
|
||||
env:
|
||||
AAS_VERIFIER_RUNNER_LABEL: ${{ matrix.os }}
|
||||
AAS_VERIFIER_FILESYSTEM_TYPE: ${{ matrix.fs_type }}
|
||||
AAS_VERIFIER_FILESYSTEM_CASE: ${{ matrix.fs_case }}
|
||||
run: |
|
||||
tarball="$(find "$RUNNER_TEMP/candidate" -maxdepth 1 -name '*.tgz' -type f -print -quit)"
|
||||
node trusted/verification/aas-v1/verifier/bin/verify-product.mjs \
|
||||
--tarball "$tarball" \
|
||||
--candidate-commit "${{ needs.candidate-pack.outputs.commit }}" \
|
||||
--verifier-commit "${{ needs.candidate-pack.outputs.verifier_commit }}" \
|
||||
--job-id "${{ matrix.id }}" \
|
||||
--transaction-evidence "$RUNNER_TEMP/aas-transaction-evidence.json" \
|
||||
--work-root "$RUNNER_TEMP/aas-v1-work" \
|
||||
--out "$RUNNER_TEMP/aas-v1-${{ matrix.id }}.json"
|
||||
- name: Upload immutable job receipt
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
with:
|
||||
name: aas-v1-receipt-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.id }}
|
||||
path: ${{ runner.temp }}/aas-v1-${{ matrix.id }}.json
|
||||
if-no-files-found: error
|
||||
retention-days: 30
|
||||
|
||||
aggregate:
|
||||
name: Aggregate exact matrix
|
||||
if: always()
|
||||
needs: [candidate-pack, verify]
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
ref: ${{ needs.candidate-pack.outputs.verifier_commit }}
|
||||
path: trusted
|
||||
persist-credentials: false
|
||||
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
||||
with:
|
||||
pattern: aas-v1-receipt-${{ github.run_id }}-${{ github.run_attempt }}-*
|
||||
path: ${{ runner.temp }}/receipts
|
||||
merge-multiple: true
|
||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: 24.18.0
|
||||
- name: Merge and enforce all six receipts
|
||||
shell: bash
|
||||
run: |
|
||||
npm ci --ignore-scripts --prefix trusted/verification/aas-v1/verifier
|
||||
node trusted/verification/aas-v1/verifier/bin/merge-product-evidence.mjs \
|
||||
--out "$RUNNER_TEMP/aas-v1-evidence-bundle.json" \
|
||||
"$RUNNER_TEMP"/receipts/*.json
|
||||
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
||||
if: always()
|
||||
with:
|
||||
name: aas-v1-evidence-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
path: ${{ runner.temp }}/aas-v1-evidence-bundle.json
|
||||
if-no-files-found: error
|
||||
retention-days: 30
|
||||
@@ -1,58 +0,0 @@
|
||||
name: AAS v1 verifier harness
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "verification/aas-v1/**"
|
||||
- ".github/workflows/aas-v1-verifier-harness.yml"
|
||||
- ".github/workflows/aas-v1-product-verifier.yml"
|
||||
- ".github/CODEOWNERS"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
harness:
|
||||
name: ${{ matrix.id }}
|
||||
env:
|
||||
GIT_CONFIG_COUNT: 1
|
||||
GIT_CONFIG_KEY_0: core.autocrlf
|
||||
GIT_CONFIG_VALUE_0: "false"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { id: linux-node-22, os: ubuntu-24.04, node: 22.23.1 }
|
||||
- { id: linux-node-24, os: ubuntu-24.04, node: 24.18.0 }
|
||||
- { id: macos-node-22, os: macos-15-intel, node: 22.23.1 }
|
||||
- { id: macos-node-24, os: macos-15-intel, node: 24.18.0 }
|
||||
- { id: windows-node-22, os: windows-2025, node: 22.23.1 }
|
||||
- { id: windows-node-24, os: windows-2025, node: 24.18.0 }
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: false
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
cache: npm
|
||||
cache-dependency-path: verification/aas-v1/verifier/package-lock.json
|
||||
- name: Install verifier without lifecycle execution
|
||||
working-directory: verification/aas-v1/verifier
|
||||
run: npm ci --ignore-scripts
|
||||
- name: Schemas, structure, freeze and self-tests
|
||||
working-directory: verification/aas-v1/verifier
|
||||
shell: bash
|
||||
run: |
|
||||
npm run check:schemas
|
||||
npm run check:structure
|
||||
npm run freeze:check
|
||||
npm test
|
||||
- name: Platform-native observer sentinel
|
||||
working-directory: verification/aas-v1/verifier
|
||||
run: npm run test:platform -- --job-id ${{ matrix.id }}
|
||||
+5
-12
@@ -127,8 +127,7 @@ jobs:
|
||||
fi
|
||||
|
||||
if [ "${{ steps.intake.outputs.has_quality_checklist }}" != "true" ]; then
|
||||
echo "PR body must include the Quality Bar Checklist from the template."
|
||||
exit 1
|
||||
echo "::notice::PR body does not include the optional Quality Bar Checklist."
|
||||
fi
|
||||
|
||||
if [ "${{ steps.intake.outputs.has_issue_link }}" != "true" ]; then
|
||||
@@ -186,21 +185,12 @@ jobs:
|
||||
if: needs.pr-policy.outputs.requires_references == 'true'
|
||||
run: npm run validate:references
|
||||
|
||||
- name: Audit npm dependencies
|
||||
run: npm audit --audit-level=high
|
||||
|
||||
- name: Refresh ephemeral derived sources for tests
|
||||
run: npm run plugin-compat:sync && npm run index && npm run bundles:sync
|
||||
run: npm run plugin-compat:sync && npm run index && npm run bundles:sync && npm run sync:metadata && npm run catalog && npm run build:aas-v1-catalog
|
||||
|
||||
- name: Run tests
|
||||
run: npm run test
|
||||
|
||||
- name: Install web-app dependencies
|
||||
run: npm run app:install
|
||||
|
||||
- name: Run web app coverage
|
||||
run: npm run app:test:coverage
|
||||
|
||||
- name: Run docs security checks
|
||||
run: npm run security:docs
|
||||
|
||||
@@ -303,6 +293,9 @@ jobs:
|
||||
needs: [pr-policy, source-validation]
|
||||
steps:
|
||||
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
|
||||
|
||||
@@ -25,6 +25,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: "22.23.1"
|
||||
registry-url: "https://registry.npmjs.org"
|
||||
|
||||
- name: Verify release identity
|
||||
@@ -77,6 +77,14 @@ jobs:
|
||||
run: npm pack --dry-run --json
|
||||
|
||||
- name: Publish
|
||||
run: npm publish
|
||||
shell: bash
|
||||
run: |
|
||||
version="$(node -p "require('./package.json').version")"
|
||||
node -e "const v=process.argv[1]; const semver=/^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/; if (!semver.test(v)) process.exit(1)" "$version"
|
||||
if [[ "$version" == *-* ]]; then
|
||||
npm publish --tag next
|
||||
else
|
||||
npm publish --tag latest
|
||||
fi
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
name: Apply Skill Optimization Run (Paused)
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: Pull request number to apply the latest Tessl optimization to
|
||||
required: true
|
||||
type: string
|
||||
|
||||
concurrency:
|
||||
group: skill-apply-optimize-${{ inputs.pr_number }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
apply:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Explain paused auto-apply
|
||||
run: |
|
||||
echo "::error title=/apply-optimize paused::This workflow depended on deprecated Tessl Skill Review comments. Re-enable it after wiring Tessl Review Fix safely."
|
||||
exit 1
|
||||
@@ -1,56 +0,0 @@
|
||||
name: Explain Skill Optimization Apply
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
explain:
|
||||
if: >-
|
||||
github.event.issue.pull_request &&
|
||||
contains(github.event.comment.body, '/apply-optimize')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
script: |
|
||||
const trusted = new Set(['OWNER', 'MEMBER', 'COLLABORATOR']);
|
||||
const prNumber = context.payload.issue?.number;
|
||||
const association = context.payload.comment?.author_association ?? 'NONE';
|
||||
|
||||
if (!prNumber) {
|
||||
core.setFailed('No pull request number found in issue_comment payload.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!trusted.has(association)) {
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: prNumber,
|
||||
body:
|
||||
'⚠️ `/apply-optimize` can only be queued by repository maintainers ' +
|
||||
'(OWNER, MEMBER, or COLLABORATOR).',
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
await github.rest.reactions.createForIssueComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
comment_id: context.payload.comment.id,
|
||||
content: 'eyes',
|
||||
});
|
||||
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: prNumber,
|
||||
body:
|
||||
'⚠️ `/apply-optimize` is paused while this repository migrates from ' +
|
||||
'deprecated Tessl Skill Review comments to Tessl Review runs. ' +
|
||||
'Please use the `skill-review` check output for now; maintainers can ' +
|
||||
're-enable auto-fix once the `tessl review fix` output contract is wired safely.',
|
||||
});
|
||||
@@ -79,7 +79,8 @@ jobs:
|
||||
echo "result=quota" >> "$GITHUB_OUTPUT"
|
||||
echo "::warning title=Tessl quota unavailable::A maintainer must review and attest to this exact head SHA before merge."
|
||||
else
|
||||
exit "$status"
|
||||
echo "result=manual" >> "$GITHUB_OUTPUT"
|
||||
echo "::warning title=Tessl review needs maintainer judgment::Tessl did not produce a passing semantic result. A maintainer must review and attest to this exact head SHA before merge."
|
||||
fi
|
||||
env:
|
||||
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
||||
@@ -107,6 +108,8 @@ jobs:
|
||||
echo "outcome=reviewed" >> "$GITHUB_OUTPUT"
|
||||
elif [ "$TESSL_RESULT" = "quota" ]; then
|
||||
echo "outcome=quota" >> "$GITHUB_OUTPUT"
|
||||
elif [ "$TESSL_RESULT" = "manual" ]; then
|
||||
echo "outcome=manual" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "::error title=Unresolved review state::The Tessl review did not produce a trustworthy outcome."
|
||||
exit 1
|
||||
@@ -134,7 +137,7 @@ jobs:
|
||||
|
||||
manual-review-required:
|
||||
needs: [review-state, review-attempt]
|
||||
if: ${{ always() && ((needs.review-state.outputs.configured != 'true' && github.event.pull_request.head.repo.full_name != github.repository) || needs.review-attempt.outputs.outcome == 'quota') }}
|
||||
if: ${{ always() && (needs.review-state.outputs.configured != 'true' || (needs.review-attempt.result == 'success' && needs.review-attempt.outputs.outcome != 'reviewed')) }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -146,8 +149,10 @@ jobs:
|
||||
run: |
|
||||
if [ "$REVIEW_OUTCOME" = "quota" ]; then
|
||||
reason="the Tessl credit quota is unavailable"
|
||||
elif [ "$REVIEW_OUTCOME" = "manual" ]; then
|
||||
reason="Tessl did not produce a passing semantic result"
|
||||
else
|
||||
reason="repository secrets are unavailable to this fork pull request"
|
||||
reason="Tessl credentials are unavailable"
|
||||
fi
|
||||
echo "::warning title=Manual skill review required::Semantic review is unavailable because ${reason}. A maintainer must attest to the exact head SHA before merge: ${HEAD_SHA}."
|
||||
{
|
||||
@@ -156,15 +161,3 @@ jobs:
|
||||
echo "- Head SHA: \`${HEAD_SHA}\`"
|
||||
echo "- Reason: ${reason}."
|
||||
} >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
missing-review-credentials:
|
||||
needs: [review-state, review-attempt]
|
||||
if: ${{ always() && needs.review-state.outputs.configured != 'true' && github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
- name: Require Tessl token for repository branches
|
||||
run: |
|
||||
echo "::error title=Missing Tessl token::Configure TESSL_TOKEN, or keep the legacy TESSL_API_TOKEN secret until the migration is complete."
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user