mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-19 15:23:03 +08:00
Compare commits
43 Commits
fix/guard-
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33ed494adf | ||
|
|
b068069b9b | ||
|
|
e3483fda15 | ||
|
|
cb81f1b0fe | ||
|
|
7e2cdeaeb5 | ||
|
|
4470e2e670 | ||
|
|
67e63e63f9 | ||
|
|
fe7b4f2ba3 | ||
|
|
0f1775e30b | ||
|
|
12ac22e674 | ||
|
|
c032e07b1e | ||
|
|
97567a91e7 | ||
|
|
7911af4a39 | ||
|
|
386326df8e | ||
|
|
b41e6fb3d0 | ||
|
|
99e01ded7d | ||
|
|
2ba0c62d8a | ||
|
|
9abe721bfe | ||
|
|
680aeff0fb | ||
|
|
6c0fbfb6c5 | ||
|
|
0e88e6a4dd | ||
|
|
cdc92de42a | ||
|
|
25dc518e1d | ||
|
|
08807e7fd6 | ||
|
|
feeaa97511 | ||
|
|
5e8f412cb5 | ||
|
|
4d6fc194ea | ||
|
|
aae735d458 | ||
|
|
ff3eaff137 | ||
|
|
922d2d8f8b | ||
|
|
bf17737969 | ||
|
|
f92f15199c | ||
|
|
fb4b0c8dce | ||
|
|
aa634df9e5 | ||
|
|
742bc58d97 | ||
|
|
04d4d81938 | ||
|
|
99e9f118bd | ||
|
|
f010f78332 | ||
|
|
e53933de1b | ||
|
|
10313d847a | ||
|
|
aa4ae863f8 | ||
|
|
80f6c27957 | ||
|
|
044d1863d0 |
@@ -11,7 +11,7 @@
|
|||||||
{
|
{
|
||||||
"name": "ecc",
|
"name": "ecc",
|
||||||
"source": "./",
|
"source": "./",
|
||||||
"description": "The most comprehensive Claude Code plugin — 60 agents, 231 skills, 75 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
|
"description": "The most comprehensive Claude Code plugin — 60 agents, 232 skills, 75 legacy command shims, selective install profiles, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
|
||||||
"version": "2.0.0-rc.1",
|
"version": "2.0.0-rc.1",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Affaan Mustafa",
|
"name": "Affaan Mustafa",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "ecc",
|
"name": "ecc",
|
||||||
"version": "2.0.0-rc.1",
|
"version": "2.0.0-rc.1",
|
||||||
"description": "Battle-tested Claude Code plugin for engineering teams — 60 agents, 231 skills, 75 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use",
|
"description": "Battle-tested Claude Code plugin for engineering teams — 60 agents, 232 skills, 75 legacy command shims, production-ready hooks, and selective install workflows evolved through continuous real-world use",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Affaan Mustafa",
|
"name": "Affaan Mustafa",
|
||||||
"url": "https://x.com/affaanmustafa"
|
"url": "https://x.com/affaanmustafa"
|
||||||
|
|||||||
51
.github/workflows/release.yml
vendored
51
.github/workflows/release.yml
vendored
@@ -5,13 +5,16 @@ on:
|
|||||||
tags: ['v*']
|
tags: ['v*']
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: read
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
verify:
|
||||||
name: Create Release
|
name: Verify Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
already_published: ${{ steps.npm_publish_state.outputs.already_published }}
|
||||||
|
dist_tag: ${{ steps.npm_publish_state.outputs.dist_tag }}
|
||||||
|
package_file: ${{ steps.pack.outputs.package_file }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -97,6 +100,42 @@ jobs:
|
|||||||
- For migration tips and compatibility notes, see README and CHANGELOG.
|
- For migration tips and compatibility notes, see README and CHANGELOG.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
- name: Pack npm artifact
|
||||||
|
id: pack
|
||||||
|
run: |
|
||||||
|
npm pack --json > npm-pack.json
|
||||||
|
PACKAGE_FILE=$(node -e "const fs = require('fs'); const data = JSON.parse(fs.readFileSync('npm-pack.json', 'utf8')); console.log(data[0].filename)")
|
||||||
|
echo "package_file=${PACKAGE_FILE}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Upload release artifacts
|
||||||
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
|
with:
|
||||||
|
name: ecc-release-artifacts
|
||||||
|
path: |
|
||||||
|
release_body.md
|
||||||
|
${{ steps.pack.outputs.package_file }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Publish Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: verify
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Download release artifacts
|
||||||
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
|
with:
|
||||||
|
name: ecc-release-artifacts
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
|
with:
|
||||||
|
node-version: '20.x'
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
||||||
with:
|
with:
|
||||||
@@ -106,7 +145,7 @@ jobs:
|
|||||||
make_latest: ${{ contains(github.ref_name, '-') && 'false' || 'true' }}
|
make_latest: ${{ contains(github.ref_name, '-') && 'false' || 'true' }}
|
||||||
|
|
||||||
- name: Publish npm package
|
- name: Publish npm package
|
||||||
if: steps.npm_publish_state.outputs.already_published != 'true'
|
if: needs.verify.outputs.already_published != 'true'
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
run: npm publish --access public --provenance --tag "${{ steps.npm_publish_state.outputs.dist_tag }}"
|
run: npm publish "${{ needs.verify.outputs.package_file }}" --access public --provenance --tag "${{ needs.verify.outputs.dist_tag }}"
|
||||||
|
|||||||
51
.github/workflows/reusable-release.yml
vendored
51
.github/workflows/reusable-release.yml
vendored
@@ -28,13 +28,16 @@ on:
|
|||||||
default: true
|
default: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: read
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
verify:
|
||||||
name: Create Release
|
name: Verify Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
already_published: ${{ steps.npm_publish_state.outputs.already_published }}
|
||||||
|
dist_tag: ${{ steps.npm_publish_state.outputs.dist_tag }}
|
||||||
|
package_file: ${{ steps.pack.outputs.package_file }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -114,6 +117,42 @@ jobs:
|
|||||||
- Claude marketplace/plugin identifier: \`everything-claude-code@everything-claude-code\`
|
- Claude marketplace/plugin identifier: \`everything-claude-code@everything-claude-code\`
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
- name: Pack npm artifact
|
||||||
|
id: pack
|
||||||
|
run: |
|
||||||
|
npm pack --json > npm-pack.json
|
||||||
|
PACKAGE_FILE=$(node -e "const fs = require('fs'); const data = JSON.parse(fs.readFileSync('npm-pack.json', 'utf8')); console.log(data[0].filename)")
|
||||||
|
echo "package_file=${PACKAGE_FILE}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Upload release artifacts
|
||||||
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||||
|
with:
|
||||||
|
name: ecc-release-artifacts
|
||||||
|
path: |
|
||||||
|
release_body.md
|
||||||
|
${{ steps.pack.outputs.package_file }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Publish Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: verify
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Download release artifacts
|
||||||
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
|
with:
|
||||||
|
name: ecc-release-artifacts
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
|
with:
|
||||||
|
node-version: '20.x'
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
- name: Create GitHub Release
|
- name: Create GitHub Release
|
||||||
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
||||||
with:
|
with:
|
||||||
@@ -124,7 +163,7 @@ jobs:
|
|||||||
make_latest: ${{ contains(inputs.tag, '-') && 'false' || 'true' }}
|
make_latest: ${{ contains(inputs.tag, '-') && 'false' || 'true' }}
|
||||||
|
|
||||||
- name: Publish npm package
|
- name: Publish npm package
|
||||||
if: steps.npm_publish_state.outputs.already_published != 'true'
|
if: needs.verify.outputs.already_published != 'true'
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
run: npm publish --access public --provenance --tag "${{ steps.npm_publish_state.outputs.dist_tag }}"
|
run: npm publish "${{ needs.verify.outputs.package_file }}" --access public --provenance --tag "${{ needs.verify.outputs.dist_tag }}"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Everything Claude Code (ECC) — Agent Instructions
|
# Everything Claude Code (ECC) — Agent Instructions
|
||||||
|
|
||||||
This is a **production-ready AI coding plugin** providing 60 specialized agents, 231 skills, 75 commands, and automated hook workflows for software development.
|
This is a **production-ready AI coding plugin** providing 60 specialized agents, 232 skills, 75 commands, and automated hook workflows for software development.
|
||||||
|
|
||||||
**Version:** 2.0.0-rc.1
|
**Version:** 2.0.0-rc.1
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ Troubleshoot failures: check test isolation → verify mocks → fix implementat
|
|||||||
|
|
||||||
```
|
```
|
||||||
agents/ — 60 specialized subagents
|
agents/ — 60 specialized subagents
|
||||||
skills/ — 231 workflow skills and domain knowledge
|
skills/ — 232 workflow skills and domain knowledge
|
||||||
commands/ — 75 slash commands
|
commands/ — 75 slash commands
|
||||||
hooks/ — Trigger-based automations
|
hooks/ — Trigger-based automations
|
||||||
rules/ — Always-follow guidelines (common + per-language)
|
rules/ — Always-follow guidelines (common + per-language)
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ This repo is the raw code only. The guides explain everything.
|
|||||||
### v2.0.0-rc.1 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)
|
### v2.0.0-rc.1 — Surface Refresh, Operator Workflows, and ECC 2.0 Alpha (Apr 2026)
|
||||||
|
|
||||||
- **Dashboard GUI** — New Tkinter-based desktop application (`ecc_dashboard.py` or `npm run dashboard`) with dark/light theme toggle, font customization, and project logo in header and taskbar.
|
- **Dashboard GUI** — New Tkinter-based desktop application (`ecc_dashboard.py` or `npm run dashboard`) with dark/light theme toggle, font customization, and project logo in header and taskbar.
|
||||||
- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 60 agents, 231 skills, and 75 legacy command shims.
|
- **Public surface synced to the live repo** — metadata, catalog counts, plugin manifests, and install-facing docs now match the actual OSS surface: 60 agents, 232 skills, and 75 legacy command shims.
|
||||||
- **Operator and outbound workflow expansion** — `brand-voice`, `social-graph-ranker`, `connections-optimizer`, `customer-billing-ops`, `ecc-tools-cost-audit`, `google-workspace-ops`, `project-flow-ops`, and `workspace-surface-audit` round out the operator lane.
|
- **Operator and outbound workflow expansion** — `brand-voice`, `social-graph-ranker`, `connections-optimizer`, `customer-billing-ops`, `ecc-tools-cost-audit`, `google-workspace-ops`, `project-flow-ops`, and `workspace-surface-audit` round out the operator lane.
|
||||||
- **Media and launch tooling** — `manim-video`, `remotion-video-creation`, and upgraded social publishing surfaces make technical explainers and launch content part of the same system.
|
- **Media and launch tooling** — `manim-video`, `remotion-video-creation`, and upgraded social publishing surfaces make technical explainers and launch content part of the same system.
|
||||||
- **Framework and product surface growth** — `nestjs-patterns`, richer Codex/OpenCode install surfaces, and expanded cross-harness packaging keep the repo usable beyond Claude Code alone.
|
- **Framework and product surface growth** — `nestjs-patterns`, richer Codex/OpenCode install surfaces, and expanded cross-harness packaging keep the repo usable beyond Claude Code alone.
|
||||||
@@ -392,7 +392,7 @@ If you stacked methods, clean up in this order:
|
|||||||
/plugin list ecc@ecc
|
/plugin list ecc@ecc
|
||||||
```
|
```
|
||||||
|
|
||||||
**That's it!** You now have access to 60 agents, 231 skills, and 75 legacy command shims.
|
**That's it!** You now have access to 60 agents, 232 skills, and 75 legacy command shims.
|
||||||
|
|
||||||
### Dashboard GUI
|
### Dashboard GUI
|
||||||
|
|
||||||
@@ -1423,7 +1423,7 @@ The configuration is automatically detected from `.opencode/opencode.json`.
|
|||||||
|---------|-------------|----------|--------|
|
|---------|-------------|----------|--------|
|
||||||
| Agents | PASS: 60 agents | PASS: 12 agents | **Claude Code leads** |
|
| Agents | PASS: 60 agents | PASS: 12 agents | **Claude Code leads** |
|
||||||
| Commands | PASS: 75 commands | PASS: 35 commands | **Claude Code leads** |
|
| Commands | PASS: 75 commands | PASS: 35 commands | **Claude Code leads** |
|
||||||
| Skills | PASS: 231 skills | PASS: 37 skills | **Claude Code leads** |
|
| Skills | PASS: 232 skills | PASS: 37 skills | **Claude Code leads** |
|
||||||
| Hooks | PASS: 8 event types | PASS: 11 events | **OpenCode has more!** |
|
| Hooks | PASS: 8 event types | PASS: 11 events | **OpenCode has more!** |
|
||||||
| Rules | PASS: 29 rules | PASS: 13 instructions | **Claude Code leads** |
|
| Rules | PASS: 29 rules | PASS: 13 instructions | **Claude Code leads** |
|
||||||
| MCP Servers | PASS: 14 servers | PASS: Full | **Full parity** |
|
| MCP Servers | PASS: 14 servers | PASS: Full | **Full parity** |
|
||||||
@@ -1585,7 +1585,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
|
|||||||
|---------|------------|------------|-----------|----------|----------------|
|
|---------|------------|------------|-----------|----------|----------------|
|
||||||
| **Agents** | 60 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 | N/A |
|
| **Agents** | 60 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 | N/A |
|
||||||
| **Commands** | 75 | Shared | Instruction-based | 35 | 6 prompts |
|
| **Commands** | 75 | Shared | Instruction-based | 35 | 6 prompts |
|
||||||
| **Skills** | 231 | Shared | 10 (native format) | 37 | Via instructions |
|
| **Skills** | 232 | Shared | 10 (native format) | 37 | Via instructions |
|
||||||
| **Hook Events** | 8 types | 15 types | None yet | 11 types | None |
|
| **Hook Events** | 8 types | 15 types | None yet | 11 types | None |
|
||||||
| **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks | N/A |
|
| **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks | N/A |
|
||||||
| **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions | 1 always-on file |
|
| **Rules** | 34 (common + lang) | 34 (YAML frontmatter) | Instruction-based | 13 instructions | 1 always-on file |
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/"
|
|||||||
/plugin list ecc@ecc
|
/plugin list ecc@ecc
|
||||||
```
|
```
|
||||||
|
|
||||||
**完成!** 你现在可以使用 60 个代理、231 个技能和 75 个命令。
|
**完成!** 你现在可以使用 60 个代理、232 个技能和 75 个命令。
|
||||||
|
|
||||||
### multi-* 命令需要额外配置
|
### multi-* 命令需要额外配置
|
||||||
|
|
||||||
|
|||||||
@@ -24,30 +24,47 @@ As of 2026-05-18:
|
|||||||
local `docs/drafts/` directory. The May 18 sync also refreshed
|
local `docs/drafts/` directory. The May 18 sync also refreshed
|
||||||
`scripts/work-items.js sync-github` across all five tracked repos, leaving
|
`scripts/work-items.js sync-github` across all five tracked repos, leaving
|
||||||
no open or blocked local work items.
|
no open or blocked local work items.
|
||||||
|
- Owner-wide queue cleanup is also inside the requested budget:
|
||||||
|
`docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md` records the
|
||||||
|
live `gh search` sweep that closed 24 stale dependency-bot PRs and 72 stale
|
||||||
|
legacy payments/0EM roadmap issues, then closed the 9 remaining stale,
|
||||||
|
generated, conflicting, or test/noise PRs and the 5 remaining legacy,
|
||||||
|
outreach, or placeholder issues. The broader `affaan-m` owner namespace is
|
||||||
|
now at 0 open PRs and 0 open issues by live `gh search`. Archived repos
|
||||||
|
touched during closure were restored to archived state.
|
||||||
- GitHub discussions are current across those tracked repos:
|
- GitHub discussions are current across those tracked repos:
|
||||||
`affaan-m/everything-claude-code` has 58 total discussions and 0 without
|
`affaan-m/everything-claude-code` has 58 total discussions and 0 without
|
||||||
maintainer touch after May 15 maintainer updates on #73 and #1239; AgentShield,
|
maintainer touch after May 15 maintainer updates on #73 and #1239; AgentShield,
|
||||||
JARVIS, ECC Tools, and the ECC Tools website have discussions disabled or 0
|
JARVIS, ECC Tools, and the ECC Tools website have discussions disabled or 0
|
||||||
total discussions.
|
total discussions. `docs/architecture/discussion-response-playbook.md` now
|
||||||
|
supplies the ITO-59 response categories, public templates, security-escalation
|
||||||
|
path, and readback rules for future discussion batches.
|
||||||
- The current Linear roadmap contains 16 issue lanes (`ITO-44` through
|
- The current Linear roadmap contains 16 issue lanes (`ITO-44` through
|
||||||
`ITO-59`) and five milestones: Security and Access Baseline, ECC 2.0 Preview
|
`ITO-59`) and five milestones: Security and Access Baseline, ECC 2.0 Preview
|
||||||
and Publication, AgentShield Enterprise Iteration, ECC Tools Next-Level
|
and Publication, AgentShield Enterprise Iteration, ECC Tools Next-Level
|
||||||
Platform, and Legacy Audit and Salvage.
|
Platform, and Legacy Audit and Salvage.
|
||||||
- Linear live sync is current for the May 18 merge and supply-chain batch:
|
- Linear live sync is current for the May 18 merge and supply-chain batch:
|
||||||
ITO-57 has a new current-head supply-chain protection comment
|
ITO-57 has a final emergency supply-chain refresh comment
|
||||||
(`0b9931b9-1556-4ebc-a70c-f3635557625d`), and the ECC platform project has
|
(`3fe5b2b7-c4fe-401c-a317-b40d72119cb3`), and the ECC platform project has
|
||||||
a new operator progress comment (`e32e5b7a-287b-4bf4-9ed7-314389a157e1`).
|
the latest operator progress comment (`e32e5b7a-287b-4bf4-9ed7-314389a157e1`).
|
||||||
Linear project status updates are disabled in this workspace, so the project
|
Linear project status updates are disabled in this workspace, so the project
|
||||||
comment is the supported external status surface.
|
comment is the supported external status surface.
|
||||||
- The latest May 18 merge batch on `main` includes PR #1970 workflow-security
|
- The latest May 18 merge batch on `main` includes PR #1970 workflow-security
|
||||||
validator bypass fixes, PR #1971 metrics bridge cost-reporting and warning
|
validator bypass fixes, PR #1971 metrics bridge cost-reporting and warning
|
||||||
de-dup fixes, PR #1972 `uncloud` skill activation structure, and
|
de-dup fixes, PR #1972 `uncloud` skill activation structure, PR #1976
|
||||||
`3b7e0ba3` catalog/operator dashboard refresh.
|
OpenAI/AstraFlow provider response guards, ECC-Tools Wrangler OAuth billing
|
||||||
|
readback mirror evidence, the `04d4d819` defensive-deny IOC scanner hardening
|
||||||
|
recheck, `7911af4a` release OIDC publishing-scope hardening, `97567a91`
|
||||||
|
release workflow line-ending normalization, and release evidence with a
|
||||||
|
refreshed operator dashboard.
|
||||||
- `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` records the
|
- `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` records the
|
||||||
May 18 queue-zero state, current-head TanStack/Mini Shai-Hulud protection
|
May 18 queue-zero state, current-head TanStack/Mini Shai-Hulud protection
|
||||||
recheck, no-lifecycle npm install, npm audit/signature checks, AgentShield
|
recheck, no-lifecycle npm install, npm audit/signature checks, AgentShield
|
||||||
project `.claude` scan, Linear sync, work-items sync, operator dashboard
|
project `.claude` scan, Linear sync, work-items sync, operator dashboard
|
||||||
refresh, and current-head Supply-Chain Watch success for `3b7e0ba3`.
|
refresh, PR #1976 provider-guard validation, ECC-Tools Wrangler OAuth billing
|
||||||
|
readback evidence, defensive-deny IOC scanner coverage, and current-head CI
|
||||||
|
success for `97567a91`; a detached clean-worktree preview-pack smoke from
|
||||||
|
`680aeff0` passed 5/5 with digest `0ed831dbd0cf`.
|
||||||
- `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md`
|
- `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md`
|
||||||
regenerates the ITO-44 prompt-to-artifact dashboard from live platform audit
|
regenerates the ITO-44 prompt-to-artifact dashboard from live platform audit
|
||||||
evidence: PR queue, issue queue, discussion queue, local worktree gate,
|
evidence: PR queue, issue queue, discussion queue, local worktree gate,
|
||||||
@@ -76,8 +93,8 @@ As of 2026-05-18:
|
|||||||
- `npm run harness:audit -- --format json` reports 70/70 on current `main`.
|
- `npm run harness:audit -- --format json` reports 70/70 on current `main`.
|
||||||
- `npm run observability:ready` reports 21/21 readiness on current `main`,
|
- `npm run observability:ready` reports 21/21 readiness on current `main`,
|
||||||
including the GitHub/Linear/handoff/roadmap progress-sync contract.
|
including the GitHub/Linear/handoff/roadmap progress-sync contract.
|
||||||
- GitHub CI run `26009328404` completed successfully for
|
- GitHub CI run `26017368895` completed successfully for
|
||||||
`3b7e0ba30a027ffd3319c2f145c63076c296d80a`, including Validate Components,
|
`04d4d81938b20ac2bac1f0025145ab77d6a59f5f`, including Validate Components,
|
||||||
Coverage, Lint, Security Scan, and the full Node/package-manager matrix.
|
Coverage, Lint, Security Scan, and the full Node/package-manager matrix.
|
||||||
- Supply-Chain Watch run `26009825837` completed successfully for
|
- Supply-Chain Watch run `26009825837` completed successfully for
|
||||||
`3b7e0ba30a027ffd3319c2f145c63076c296d80a`, including no-lifecycle install,
|
`3b7e0ba30a027ffd3319c2f145c63076c296d80a`, including no-lifecycle install,
|
||||||
@@ -282,18 +299,66 @@ As of 2026-05-18:
|
|||||||
pass the announcement gate yet.
|
pass the announcement gate yet.
|
||||||
- ECC-Tools commit `95d0bec69dbcf364ed084e983a40d0a94d443d16`
|
- ECC-Tools commit `95d0bec69dbcf364ed084e983a40d0a94d443d16`
|
||||||
adds repeatable aggregate production KV readback with
|
adds repeatable aggregate production KV readback with
|
||||||
`npm run billing:kv-readback`: the latest run found 252
|
`npm run billing:kv-readback`: the latest API-authenticated run found 253
|
||||||
`account-billing:*` records and 252 `billing-state:*` records, but 0
|
`account-billing:*` records and 253 `billing-state:*` records, but 0
|
||||||
Marketplace-managed Pro `billing-state:*` records, so native-payments copy
|
Marketplace-managed Pro `billing-state:*` records, so native-payments copy
|
||||||
remains blocked until `--require-ready` and the official internal
|
remains blocked until `--require-ready` and the official internal
|
||||||
announcement gate pass.
|
announcement gate pass.
|
||||||
- ECC-Tools commit `285967807ea7b5eb3146bc984fb2229db67d4290`
|
- ECC-Tools commit `285967807ea7b5eb3146bc984fb2229db67d4290`
|
||||||
requires GitHub Marketplace webhook provenance on Pro billing-state records
|
requires GitHub Marketplace webhook provenance on Pro billing-state records
|
||||||
before native-payments announcement readiness can pass. The CI run
|
before native-payments announcement readiness can pass. The CI run
|
||||||
`26013559229` succeeded for the pushed head, but live readback is still
|
`26013559229` succeeded for the pushed head.
|
||||||
blocked until the Cloudflare credential in the vault is replaced with a
|
- ECC-Tools commit `42653f9140c232961280d961ed76a6142433cfa1`
|
||||||
valid token or key/email pair and a real Marketplace-managed Pro webhook
|
adds `npm run billing:kv-readback -- --wrangler` so operators can run the
|
||||||
creates billing-state provenance.
|
aggregate production KV readback through an authenticated Wrangler OAuth
|
||||||
|
session instead of requiring a separate Cloudflare API token/global key. CI
|
||||||
|
run `26016223013` succeeded, and the latest live readback found 253
|
||||||
|
`account-billing:*` records and 253 `billing-state:*` records with 194
|
||||||
|
marketplace/free states, 59 Stripe/pro states, 0 Marketplace Pro states, 0
|
||||||
|
ready-like Marketplace Pro states, and 0 parse failures. Native-payments
|
||||||
|
copy remains blocked until a real Marketplace-managed Pro webhook creates
|
||||||
|
billing-state provenance and `--require-ready` plus the official internal
|
||||||
|
announcement gate pass.
|
||||||
|
- ECC-Tools commit `632e059e51b6e1297ba118807c8b5b2adbac74ce`
|
||||||
|
adds target account billing readback with `npm run billing:kv-readback -- --account <github-login> --require-ready`.
|
||||||
|
The report redacts the account login and raw KV keys, emits only a stable
|
||||||
|
fingerprint plus sanitized readiness booleans, and now requires both
|
||||||
|
`account-billing:<login>` and `billing-state:<login>` before a target
|
||||||
|
Marketplace Pro test account can pass the native-payments announcement
|
||||||
|
readback gate. CI run `26018941515` succeeded. The 2026-05-18 live recheck
|
||||||
|
split out Linear ITO-61 for the target-account blocker.
|
||||||
|
- ECC-Tools commit `d5f60db` adds sanitized Marketplace-source provenance
|
||||||
|
counts to `npm run billing:kv-readback`, including
|
||||||
|
`marketplaceSourceRecords`, `marketplaceSourceWithWebhookEvidence`,
|
||||||
|
`marketplaceSourceWithoutWebhookEvidence`, `byMarketplacePlanName`, and
|
||||||
|
`byMarketplaceEventAction`. The 2026-05-18 live Wrangler OAuth readback now
|
||||||
|
works and found 256 account-billing records, 256 billing-state records, 197
|
||||||
|
Marketplace-source records, 59 Stripe-source records, 53 Pro records, 0
|
||||||
|
Marketplace Pro records, 4 Marketplace webhook-provenance records, all
|
||||||
|
`Open Source` purchases, and 193 Marketplace-source records without webhook
|
||||||
|
provenance. Native-payments copy remains blocked by Linear ITO-61 until a
|
||||||
|
real Marketplace-managed Pro webhook creates target account provenance and
|
||||||
|
`billing:kv-readback -- --wrangler --wrangler-bin ./node_modules/.bin/wrangler --account <github-login> --require-ready`
|
||||||
|
plus the official internal announcement gate pass.
|
||||||
|
- ECC-Tools commit `13cd3fc` normalizes billing-state key casing so
|
||||||
|
Marketplace webhook writes and announcement readbacks agree on GitHub login
|
||||||
|
case; current-head CI `26037611421` passed. The code-side readback hardening
|
||||||
|
remains green, but it does not create live Marketplace Pro state.
|
||||||
|
- ECC-Tools commit `69ca535` surfaces hosted team-learning feedback controls:
|
||||||
|
harness compatibility and team-backlog routing now show retention days,
|
||||||
|
deletion route/SLA, and opt-out route before adaptive recommendations are
|
||||||
|
routed into team-owned queues. Linear ITO-52 is Done with CI `26054455434`.
|
||||||
|
- ECC-Tools commit `e56fc1a` updates the lockfile for
|
||||||
|
`brace-expansion@5.0.6` and fixed Dependabot alert 44 for CVE-2026-45149;
|
||||||
|
GitHub API reported `state: fixed` at `2026-05-18T19:10:15Z` and current-head
|
||||||
|
CI `26054671308` passed.
|
||||||
|
- The latest ITO-61 readback retry narrowed the blocker: Wrangler OAuth now
|
||||||
|
works, the safe aggregate readback has 0 parse failures and still reports 0
|
||||||
|
Marketplace Pro records, and `billing:announcement-gate -- --preflight` is
|
||||||
|
missing the target Marketplace account plus `INTERNAL_API_SECRET`.
|
||||||
|
Native-payments copy remains blocked until the target Pro readback and live
|
||||||
|
announcement gate pass. Linear comment
|
||||||
|
`6904e4fb-bec7-4787-90e2-759f077a628c` records the redacted readback counts.
|
||||||
- Handoff `ecc-supply-chain-audit-20260513-0645.md` under
|
- Handoff `ecc-supply-chain-audit-20260513-0645.md` under
|
||||||
`~/.cluster-swarm/handoffs/`
|
`~/.cluster-swarm/handoffs/`
|
||||||
records the May 13 supply-chain sweep: no active lockfile/manifest hit for
|
records the May 13 supply-chain sweep: no active lockfile/manifest hit for
|
||||||
@@ -650,21 +715,21 @@ is not complete unless the evidence column exists and has been freshly verified.
|
|||||||
|
|
||||||
| Prompt requirement | Required artifact or gate | Current evidence | Status |
|
| Prompt requirement | Required artifact or gate | Current evidence | Status |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| Keep public PRs below 20 | Repo-family PR recheck | 0 open PRs across `everything-claude-code`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-17 after merging ECC #1961, #1963, and #1953 and closing/skipping incompatible #1962 | Complete |
|
| Keep public PRs below 20 | Repo-family PR recheck | 0 open PRs across `everything-claude-code`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-18 after merging PR #1976 and refreshing platform audit evidence | Complete |
|
||||||
| Keep public issues below 20 | Repo-family issue recheck | 0 open issues across `everything-claude-code`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-17; #1951 closed with #1953 | Complete |
|
| Keep public issues below 20 | Repo-family issue recheck | 0 open issues across `everything-claude-code`, AgentShield, JARVIS, `ECC-Tools/ECC-Tools`, and `ECC-Tools/ECC-website` on 2026-05-18 after the live platform audit refresh | Complete |
|
||||||
| Manage repository discussions | Repo-family discussion recheck | Platform audit reports 0 discussion maintainer-touch gaps and 0 answerable Q&A missing accepted answers; trunk still has 58 total discussions | Complete |
|
| Manage repository discussions | Repo-family discussion recheck plus response playbook | Platform audit reports 0 discussion maintainer-touch gaps and 0 answerable Q&A missing accepted answers; trunk still has 58 total discussions; `docs/architecture/discussion-response-playbook.md` distinguishes support, maintainer coordination, stale/concluded, release, informational, and security-sensitive response paths | Complete |
|
||||||
| Manage PR discussions | PR review/comment closure plus merge/close state | ECC #1961, #1963, and #1953 merged after maintainer validation; no open tracked PRs remain | Complete |
|
| Manage PR discussions | PR review/comment closure plus merge/close state | ECC #1976 merged after maintainer follow-up validation; no open tracked PRs remain | Complete |
|
||||||
| Salvage useful stale work | `docs/stale-pr-salvage-ledger.md` plus `docs/legacy-artifact-inventory.md` | Ledger records salvaged, superseded, skipped, and manual-review tails; #1815-#1818 added cost tracking, skill scout, frontend design guidance, code-reviewer false-positive guardrails, and the May 12 gap pass; #1687, #1609, #1563, #1564, and #1565 localization tails are attached to Linear ITO-55 for language-owner review and no automatic import remains release-blocking | Complete; repeat legacy scan before release |
|
| Salvage useful stale work | `docs/stale-pr-salvage-ledger.md` plus `docs/legacy-artifact-inventory.md` | Ledger records salvaged, superseded, skipped, and manual-review tails; #1815-#1818 added cost tracking, skill scout, frontend design guidance, code-reviewer false-positive guardrails, and the May 12 gap pass; #1687, #1609, #1563, #1564, and #1565 localization tails are attached to Linear ITO-55 for language-owner review and no automatic import remains release-blocking | Complete; repeat legacy scan before release |
|
||||||
| ECC 2.0 preview pack ready | Release docs, quickstart, publication readiness, release notes | `docs/releases/2.0.0-rc.1/` and readiness docs are in-tree; May 18 evidence records queue-zero state, #1970/#1971/#1972 merge batch, supply-chain recheck, npm no-lifecycle install/audit/signature gates, Linear sync, operator dashboard, and successful current-head Supply-Chain Watch on `3b7e0ba3` | Needs final clean-checkout release approval |
|
| ECC 2.0 preview pack ready | Release docs, quickstart, publication readiness, release notes | `docs/releases/2.0.0-rc.1/` and readiness docs are in-tree; May 18 evidence records queue-zero state, #1970/#1971/#1972/#1976 merge batch, supply-chain recheck, defensive-deny IOC scanner hardening, npm no-lifecycle install/audit/signature gates, Linear sync, refreshed operator dashboard, provider-guard validation, ECC-Tools Wrangler OAuth billing readback evidence, successful current-head CI on `04d4d819`, and detached clean-worktree preview-pack smoke digest `59bbf2630a44` | Needs final release approval |
|
||||||
| Hermes specialized skills included safely | Hermes setup/import docs and sanitized skill surface | Hermes setup and import playbook are public; secrets stay local | Needs final release review |
|
| Hermes specialized skills included safely | Hermes setup/import docs and sanitized skill surface | Hermes setup and import playbook are public; secrets stay local | Needs final release review |
|
||||||
| Naming and rename readiness | Naming matrix across package/plugin/docs/social surfaces | `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` records current package, repo, Claude plugin, Codex plugin, OpenCode, and npm availability evidence | Complete for rc.1; post-rc rename remains future work |
|
| Naming and rename readiness | Naming matrix across package/plugin/docs/social surfaces | `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` records current package, repo, Claude plugin, Codex plugin, OpenCode, and npm availability evidence | Complete for rc.1; post-rc rename remains future work |
|
||||||
| Claude and Codex plugin publication | Contact/submission path with required artifacts and status | Publication readiness, naming matrix, and May 12 dry-run evidence document plugin validation, clean-checkout Claude tag/install smoke, and Codex marketplace CLI shape | Needs explicit approval for real tag/push and marketplace submission |
|
| Claude and Codex plugin publication | Contact/submission path with required artifacts and status | Publication readiness, naming matrix, and May 12 dry-run evidence document plugin validation, clean-checkout Claude tag/install smoke, and Codex marketplace CLI shape | Needs explicit approval for real tag/push and marketplace submission |
|
||||||
| Articles, tweets, and announcements | X thread, LinkedIn copy, GitHub release copy, push checklist | Draft launch collateral exists under rc.1 release docs | Needs URL-backed refresh |
|
| Articles, tweets, and announcements | X thread, LinkedIn copy, GitHub release copy, push checklist | Draft launch collateral exists under rc.1 release docs | Needs URL-backed refresh |
|
||||||
| AgentShield enterprise iteration | Policy gates, SARIF, packs, provenance, corpus, HTML reports, exception lifecycle audit, baseline drift Action/CLI surfaces, evidence-pack redaction, harness adapter registry, enterprise research roadmap, supply-chain hardened release path, CI-safe baseline fingerprints, corpus accuracy recommendations, remediation workflow phases, env proxy hijack corpus coverage, Mini Shai-Hulud full-campaign package IOCs, CI-provenance evidence packs, plugin-cache runtime-confidence triage, evidence-pack consumer readback, fleet-level evidence-pack routing, fleet review items, checksum-backed policy export, checksum-verified policy promotion, policy promotion review items, package-manager hardening drift detection, npm age-gate guidance correction, workflow action-runtime pin refresh, package-manager hardening Action outputs, policy-promotion Action outputs, ECC-Tools hosted consumption of promotion Action outputs, ECC-Tools operator-visible promotion output values, and ECC-Tools hosted promotion judge audit traces | PRs #53, #55-#64, #67-#69, and #78-#92 landed with test evidence, ECC-Tools #76 consumes the fleet-summary output in hosted security review, #77 surfaces source evidence paths in hosted finding output, and #78 links fleet routes to harness owner review; AgentShield #91 adds `agentshield policy export` bundles for branch-protection review and downstream promotion; AgentShield #92 adds `agentshield policy promote` with digest verification, tamper rejection, explicit pack selection, dry-run review, and JSON output before writing active policy; AgentShield commit `87aec47` adds `reviewItems` for digest evidence, owner review, protected rollout PR handoff, and runtime smoke testing with green local and remote CI; AgentShield commit `28d08c7` adds package-manager hardening drift detection for plaintext registry credentials, lifecycle-script enablement, and weak pnpm/Yarn release-age cooldowns with green local and remote CI; AgentShield commit `659f569` refreshes all workflow action runtime pins to SHA-pinned checkout v6.0.2 and setup-node v6.4.0 with green remote CI and no remaining action-runtime deprecation annotation; AgentShield commit `ee585cd` corrects npm release-age guidance by flagging unsupported npm age keys and keeping enforceable cooldown findings on pnpm/Yarn with green local and remote CI; AgentShield commit `1124535` exposes package-manager hardening status/count outputs and a redacted job-summary section for registry credentials, lifecycle scripts, and release-age gates with green local and remote CI; AgentShield commit `1593925` exposes policy-promotion status/count/digest outputs plus job-summary review items for owner approval, protected rollout, and runtime smoke, and marks runtime smoke verified when the same Action job scans with the promoted policy; ECC-Tools commit `8658951` routes those policy-promotion Action outputs into hosted security review findings and Hosted Promotion Readiness scoring; ECC-Tools commit `16c537f` renders policy-promotion status, pack, review item count, action-required count, and digest in hosted security job comments/check-runs; ECC-Tools commit `05d4e82` renders hosted promotion judge request fingerprints and allowed-citation counts without raw provider output; native PDF export deferred in favor of self-contained HTML plus print-to-PDF until explicit enterprise demand appears; `docs/architecture/agentshield-enterprise-research-roadmap.md` now has baseline drift, evidence-pack bundle, redaction, adapter-registry, supply-chain hardening, hashed baseline fingerprints, corpus accuracy recommendation, remediation workflow, env proxy hijack corpus, Mini Shai-Hulud full-campaign package-table, `ci-context.json` provenance, `plugin-cache` confidence, `evidence-pack inspect` readback, `evidence-pack fleet` routing, fleet `reviewItems`, policy export, policy promotion, policy promotion `reviewItems`, package-manager hardening Action outputs, policy-promotion Action outputs, hosted consumption of promotion Action outputs, operator-visible promotion output values, and hosted promotion judge audit traces landed | Next workflow automation should deepen live operator approval/readback after Marketplace/payment gates |
|
| AgentShield enterprise iteration | Policy gates, SARIF, packs, provenance, corpus, HTML reports, exception lifecycle audit, baseline drift Action/CLI surfaces, evidence-pack redaction, harness adapter registry, enterprise research roadmap, supply-chain hardened release path, CI-safe baseline fingerprints, corpus accuracy recommendations, remediation workflow phases, env proxy hijack corpus coverage, Mini Shai-Hulud full-campaign package IOCs, CI-provenance evidence packs, plugin-cache runtime-confidence triage, evidence-pack consumer readback, fleet-level evidence-pack routing, fleet review items, fleet review ticket payloads, checksum-backed policy export, checksum-verified policy promotion, policy promotion review items, package-manager hardening drift detection, npm age-gate guidance correction, workflow action-runtime pin refresh, package-manager hardening Action outputs, policy-promotion Action outputs, ECC-Tools hosted consumption of promotion Action outputs, ECC-Tools operator-visible promotion output values, and ECC-Tools hosted promotion judge audit traces | PRs #53, #55-#64, #67-#69, and #78-#92 landed with test evidence, ECC-Tools #76 consumes the fleet-summary output in hosted security review, #77 surfaces source evidence paths in hosted finding output, and #78 links fleet routes to harness owner review; AgentShield #91 adds `agentshield policy export` bundles for branch-protection review and downstream promotion; AgentShield #92 adds `agentshield policy promote` with digest verification, tamper rejection, explicit pack selection, dry-run review, and JSON output before writing active policy; AgentShield commit `87aec47` adds `reviewItems` for digest evidence, owner review, protected rollout PR handoff, and runtime smoke testing with green local and remote CI; AgentShield commit `28d08c7` adds package-manager hardening drift detection for plaintext registry credentials, lifecycle-script enablement, and weak pnpm/Yarn release-age cooldowns with green local and remote CI; AgentShield commit `659f569` refreshes all workflow action runtime pins to SHA-pinned checkout v6.0.2 and setup-node v6.4.0 with green remote CI and no remaining action-runtime deprecation annotation; AgentShield commit `ee585cd` corrects npm release-age guidance by flagging unsupported npm age keys and keeping enforceable cooldown findings on pnpm/Yarn with green local and remote CI; AgentShield commit `1124535` exposes package-manager hardening status/count outputs and a redacted job-summary section for registry credentials, lifecycle scripts, and release-age gates with green local and remote CI; AgentShield commit `1593925` exposes policy-promotion status/count/digest outputs plus job-summary review items for owner approval, protected rollout, and runtime smoke, and marks runtime smoke verified when the same Action job scans with the promoted policy; AgentShield commit `840952a` adds Linear/operator-ready fleet review ticket payloads and expands current Mini Shai-Hulud IOC breadcrumbs with green local and remote CI; ECC-Tools commit `8658951` routes those policy-promotion Action outputs into hosted security review findings and Hosted Promotion Readiness scoring; ECC-Tools commit `16c537f` renders policy-promotion status, pack, review item count, action-required count, and digest in hosted security job comments/check-runs; ECC-Tools commit `05d4e82` renders hosted promotion judge request fingerprints and allowed-citation counts without raw provider output; native PDF export deferred in favor of self-contained HTML plus print-to-PDF until explicit enterprise demand appears; `docs/architecture/agentshield-enterprise-research-roadmap.md` now has baseline drift, evidence-pack bundle, redaction, adapter-registry, supply-chain hardening, hashed baseline fingerprints, corpus accuracy recommendation, remediation workflow, env proxy hijack corpus, Mini Shai-Hulud full-campaign package-table, `ci-context.json` provenance, `plugin-cache` confidence, `evidence-pack inspect` readback, `evidence-pack fleet` routing, fleet `reviewItems`, fleet review ticket payloads, policy export, policy promotion, policy promotion `reviewItems`, package-manager hardening Action outputs, policy-promotion Action outputs, hosted consumption of promotion Action outputs, operator-visible promotion output values, and hosted promotion judge audit traces landed | Next workflow automation should deepen live operator approval/readback after Marketplace/payment gates |
|
||||||
| ECC Tools next-level app | Billing audit, PR checks, deep analyzer, sync backlog, evaluator/RAG corpus, analysis-depth readiness, hosted execution planning, hosted CI diagnostics, hosted security evidence review, hosted harness compatibility audit, hosted reference-set evaluation, hosted AI routing/cost review, hosted team backlog routing, hosted depth-plan check-run, PR-comment hosted job dispatch, hosted job result history/check-runs, hosted result status command, status-aware depth-plan recommendations, hosted promotion readiness, hosted promotion output scoring, hosted promotion retrieval planning, hosted promotion judge contract, gated hosted promotion judge execution, hosted promotion judge audit trace, payment-announcement readiness, billing announcement preflight, aggregate production billing KV readback, Marketplace webhook provenance, AgentShield fleet-summary hosted routing, hosted finding source-evidence surfacing, harness policy-route review, policy-promotion Action-output hosted telemetry, and operator-visible promotion output values | PRs #26-#43 plus #53-#78 landed with test evidence, including AgentShield evidence-pack gap routing, canonical bundle recognition, supply-chain signature gates, PR draft follow-up Linear tracking, evidence-backed/deep-ready repository classification, the `/api/analysis/depth-plan` hosted job plan, `/api/analysis/jobs/ci-diagnostics`, `/api/analysis/jobs/security-evidence-review`, `/api/analysis/jobs/harness-compatibility-audit`, `/api/analysis/jobs/reference-set-evaluation`, `/api/analysis/jobs/ai-routing-cost-review`, `/api/analysis/jobs/team-backlog-routing`, the `ECC Tools / Hosted Depth Plan` check-run, `/ecc-tools analyze --job ...` PR-comment dispatch, non-blocking per-hosted-job result check-runs backed by 30-day result cache records, `/ecc-tools analyze --job status` cache lookup, cache-aware next-job recommendations in the depth-plan check-run, the `ECC Tools / Hosted Promotion Readiness` corpus-backed PR check-run, deterministic hosted-output scoring against cached completed job artifacts/findings, ranked retrieval/model-prompt planning, the fail-closed `hosted-promotion-judge.v1` request contract, opt-in live model-judge execution behind hosted evidence, entitlement, budget, provider, executor, strict JSON, and citation gates, hosted promotion judge request fingerprints plus allowed-citation audit trails, a fail-closed `/api/billing/readiness` `announcementGate` for native GitHub payments claims, `npm run billing:announcement-gate` plus `--preflight` as the non-secret operator verifier, hosted security findings for AgentShield fleet summaries, an `Evidence` column in hosted finding comments/check-runs, hosted harness findings that route AgentShield fleet target paths to harness owners, ECC-Tools commit `8658951` routing AgentShield policy-promotion Action outputs into hosted security review and promotion-readiness scoring, ECC-Tools commit `16c537f` rendering policy-promotion status/pack/count/digest values directly in hosted security job comments/check-runs, ECC-Tools commit `05d4e82` rendering model-judge audit traces without exposing raw provider output, ECC-Tools commit `91a441b` adding the safe billing announcement preflight path, ECC-Tools commit `eb69412` recording the initial production readback state, ECC-Tools commit `95d0bec` adding `npm run billing:kv-readback` with 252 aggregate account-billing and billing-state records but 0 Marketplace Pro billing-state records, and ECC-Tools commit `2859678` requiring webhook-derived Marketplace provenance before announcement readiness | Next work is replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate |
|
| ECC Tools next-level app | Billing audit, PR checks, deep analyzer, sync backlog, evaluator/RAG corpus, analysis-depth readiness, hosted execution planning, hosted CI diagnostics, hosted security evidence review, hosted harness compatibility audit, hosted reference-set evaluation, hosted AI routing/cost review, hosted team backlog routing, hosted depth-plan check-run, PR-comment hosted job dispatch, hosted job result history/check-runs, hosted result status command, status-aware depth-plan recommendations, hosted promotion readiness, hosted promotion output scoring, hosted promotion retrieval planning, hosted promotion judge contract, gated hosted promotion judge execution, hosted promotion judge audit trace, payment-announcement readiness, billing announcement preflight, aggregate production billing KV readback, Marketplace webhook provenance, target-account billing readback, Marketplace-source provenance counts, AgentShield fleet-summary hosted routing, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output hosted telemetry, and operator-visible promotion output values | PRs #26-#43 plus #53-#78 landed with test evidence, including AgentShield evidence-pack gap routing, canonical bundle recognition, supply-chain signature gates, PR draft follow-up Linear tracking, evidence-backed/deep-ready repository classification, the `/api/analysis/depth-plan` hosted job plan, `/api/analysis/jobs/ci-diagnostics`, `/api/analysis/jobs/security-evidence-review`, `/api/analysis/jobs/harness-compatibility-audit`, `/api/analysis/jobs/reference-set-evaluation`, `/api/analysis/jobs/ai-routing-cost-review`, `/api/analysis/jobs/team-backlog-routing`, the `ECC Tools / Hosted Depth Plan` check-run, `/ecc-tools analyze --job ...` PR-comment dispatch, non-blocking per-hosted-job result check-runs backed by 30-day result cache records, `/ecc-tools analyze --job status` cache lookup, cache-aware next-job recommendations in the depth-plan check-run, the `ECC Tools / Hosted Promotion Readiness` corpus-backed PR check-run, deterministic hosted-output scoring against cached completed job artifacts/findings, ranked retrieval/model-prompt planning, the fail-closed `hosted-promotion-judge.v1` request contract, opt-in live model-judge execution behind hosted evidence, entitlement, budget, provider, executor, strict JSON, and citation gates, hosted promotion judge request fingerprints plus allowed-citation audit trails, a fail-closed `/api/billing/readiness` `announcementGate` for native GitHub payments claims, `npm run billing:announcement-gate` plus `--preflight` as the non-secret operator verifier, hosted security findings for AgentShield fleet summaries, an `Evidence` column in hosted finding comments/check-runs, hosted harness findings that route AgentShield fleet target paths to harness owners, ECC-Tools commit `8658951` routing AgentShield policy-promotion Action outputs into hosted security review and promotion-readiness scoring, ECC-Tools commit `16c537f` rendering policy-promotion status/pack/count/digest values directly in hosted security job comments/check-runs, ECC-Tools commit `05d4e82` rendering model-judge audit traces without exposing raw provider output, ECC-Tools commit `91a441b` adding the safe billing announcement preflight path, ECC-Tools commit `eb69412` recording the initial production readback state, ECC-Tools commit `95d0bec` adding `npm run billing:kv-readback` with aggregate account-billing and billing-state records but 0 Marketplace Pro billing-state records, ECC-Tools commit `2859678` requiring webhook-derived Marketplace provenance before announcement readiness, ECC-Tools commit `42653f9` adding Wrangler OAuth readback, ECC-Tools commit `632e059` adding sanitized target-account readback that requires both target key families before `--require-ready` can pass, and ECC-Tools commit `d5f60db` adding sanitized Marketplace plan/action provenance counts; the latest 2026-05-18 live Wrangler OAuth recheck found 256 account-billing records, 256 billing-state records, 197 Marketplace-source records, 4 Marketplace webhook-provenance records, all `Open Source`, and 0 Marketplace Pro records, then updated Linear ITO-61 with the data/provisioning blocker | Next work is create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure target account plus `INTERNAL_API_SECRET`, then run `billing:kv-readback -- --wrangler --wrangler-bin ./node_modules/.bin/wrangler --account <github-login> --require-ready`, followed by the live announcement gate |
|
||||||
| GitGuardian/Dependabot/CodeRabbit-style checks | Non-blocking taxonomy, deterministic follow-up checks, and local supply-chain gates | ECC-Tools risk taxonomy check plus follow-up signals landed, including Skill Quality, Deep Analyzer Evidence, Analyzer Corpus Evidence, RAG/Evaluator Evidence, PR Review/Salvage Evidence, and AgentShield evidence-pack evidence; #1846 added npm registry signature gates; #1848 added the supply-chain incident-response playbook and `pull_request_target` cache-poisoning validator guard; #1851 added the privileged checkout credential-persistence guard; AgentShield #78, JARVIS #13, and ECC-Tools #53 applied the same hardening outside trunk | Current supply-chain gate complete; deeper hosted review features remain future |
|
| GitGuardian/Dependabot/CodeRabbit-style checks | Non-blocking taxonomy, deterministic follow-up checks, and local supply-chain gates | ECC-Tools risk taxonomy check plus follow-up signals landed, including Skill Quality, Deep Analyzer Evidence, Analyzer Corpus Evidence, RAG/Evaluator Evidence, PR Review/Salvage Evidence, and AgentShield evidence-pack evidence; #1846 added npm registry signature gates; #1848 added the supply-chain incident-response playbook and `pull_request_target` cache-poisoning validator guard; #1851 added the privileged checkout credential-persistence guard; AgentShield #78, JARVIS #13, and ECC-Tools #53 applied the same hardening outside trunk | Current supply-chain gate complete; deeper hosted review features remain future |
|
||||||
| Harness-agnostic learning system | Audit, adapter matrix, observability, traces, promotion loop | Audit/adapters/observability gates plus `docs/architecture/evaluator-rag-prototype.md`, `examples/evaluator-rag-prototype/`, and ECC-Tools PR #40 define read-only stale-salvage, billing-readiness, CI-failure-diagnosis, harness-config-quality, AgentShield policy-exception, skill-quality evidence, deep-analyzer evidence, and RAG/evaluator comparison scenarios with trace, report, playbook, verifier, and predictive-check artifacts; ECC-Tools PRs #68-#72 now turn that corpus into a deterministic PR check-run gate with cached hosted-output scoring, ranked retrieval candidates, a model prompt seed, a fail-closed hosted model-judge request contract, and opt-in live model execution behind strict hosted-evidence gates | Deterministic hosted PR check, cached output scoring, retrieval planning, judge contract, and gated model execution integrated |
|
| Harness-agnostic learning system | Audit, adapter matrix, observability, traces, promotion loop | Audit/adapters/observability gates plus `docs/architecture/evaluator-rag-prototype.md`, `examples/evaluator-rag-prototype/`, and ECC-Tools PR #40 define read-only stale-salvage, billing-readiness, CI-failure-diagnosis, harness-config-quality, AgentShield policy-exception, skill-quality evidence, deep-analyzer evidence, and RAG/evaluator comparison scenarios with trace, report, playbook, verifier, and predictive-check artifacts; ECC-Tools PRs #68-#72 now turn that corpus into a deterministic PR check-run gate with cached hosted-output scoring, ranked retrieval candidates, a model prompt seed, a fail-closed hosted model-judge request contract, and opt-in live model execution behind strict hosted-evidence gates | Deterministic hosted PR check, cached output scoring, retrieval planning, judge contract, and gated model execution integrated |
|
||||||
| Linear roadmap is detailed | Linear project status plus repo mirror | Repo mirror exists; issue creation was retried on 2026-05-12 and remains blocked by the workspace free issue limit; the May 18 sync adds queue-zero/work-items state, #1970/#1971/#1972 merge evidence, ITO-57 current-head supply-chain refresh comment `0b9931b9-1556-4ebc-a70c-f3635557625d`, ECC platform progress comment `e32e5b7a-287b-4bf4-9ed7-314389a157e1`, and generated `operator:dashboard` prompt-to-artifact audit for recurring status updates | Needs recurring status updates after each significant merge batch |
|
| Linear roadmap is detailed | Linear project status plus repo mirror | Repo mirror exists; issue creation was retried on 2026-05-12 and remains blocked by the workspace free issue limit; the May 18 sync adds queue-zero/work-items state, #1970/#1971/#1972/#1976 merge evidence, ITO-57 current-head supply-chain refresh comment `0b9931b9-1556-4ebc-a70c-f3635557625d`, ITO-57 defensive-deny scanner recheck reply `6fa15367-d994-4e53-ade3-9462477e1100`, ECC platform progress comment `e32e5b7a-287b-4bf4-9ed7-314389a157e1`, and generated `operator:dashboard` prompt-to-artifact audit for recurring status updates | Needs recurring status updates after each significant merge batch |
|
||||||
| Flow separation and progress tracking | Flow lanes with owner artifacts and update cadence | This roadmap defines lanes below and `docs/architecture/progress-sync-contract.md` makes GitHub/Linear/handoff/roadmap sync part of the readiness gate | Active |
|
| Flow separation and progress tracking | Flow lanes with owner artifacts and update cadence | This roadmap defines lanes below and `docs/architecture/progress-sync-contract.md` makes GitHub/Linear/handoff/roadmap sync part of the readiness gate | Active |
|
||||||
| Realtime Linear sync | Project comments while issue/status capacity is blocked; issues later | ECC-Tools #39 implements opt-in Linear API sync for deferred follow-up backlog items, and ECC-Tools #54 adds copy-ready PR drafts to that backlog when draft PR shells are not opened; `docs/architecture/progress-sync-contract.md` defines the local file-backed realtime boundary while issue capacity is blocked; May 18 live connector comments were posted to ITO-57 and the ECC platform project after project status updates returned disabled | Needs workspace capacity/config rollout for productized issue sync |
|
| Realtime Linear sync | Project comments while issue/status capacity is blocked; issues later | ECC-Tools #39 implements opt-in Linear API sync for deferred follow-up backlog items, and ECC-Tools #54 adds copy-ready PR drafts to that backlog when draft PR shells are not opened; `docs/architecture/progress-sync-contract.md` defines the local file-backed realtime boundary while issue capacity is blocked; May 18 live connector comments were posted to ITO-57 and the ECC platform project after project status updates returned disabled | Needs workspace capacity/config rollout for productized issue sync |
|
||||||
| Observability for self-use | Local readiness gate, traces, status snapshots, HUD/status contract, risk ledger, progress-sync contract | `npm run observability:ready` reports 21/21 | Complete for local gate |
|
| Observability for self-use | Local readiness gate, traces, status snapshots, HUD/status contract, risk ledger, progress-sync contract | `npm run observability:ready` reports 21/21 | Complete for local gate |
|
||||||
@@ -684,8 +749,8 @@ repo evidence and merge commits.
|
|||||||
| Release and publication | rc.1 release docs, publication readiness doc | Naming matrix and plugin submission/contact checklist | Before any tag |
|
| Release and publication | rc.1 release docs, publication readiness doc | Naming matrix and plugin submission/contact checklist | Before any tag |
|
||||||
| Harness OS core | Audit, adapter matrix, observability docs, `ecc2/` | HUD/session-control acceptance spec | Weekly until GA |
|
| Harness OS core | Audit, adapter matrix, observability docs, `ecc2/` | HUD/session-control acceptance spec | Weekly until GA |
|
||||||
| Evaluation and RAG | Reference-set validation, harness audit, traces, ECC-Tools corpus | Read-only evaluator/RAG prototype plus stale-salvage, billing-readiness, CI-failure-diagnosis, harness-config-quality, AgentShield policy-exception, skill-quality evidence, deep-analyzer evidence, and RAG/evaluator comparison fixtures; ECC-Tools #68 publishes the corpus as a hosted promotion readiness check-run, #69 scores cached hosted job outputs against the same corpus, #70 emits ranked retrieval candidates plus a model prompt seed, #71 adds a fail-closed hosted model-judge request contract, and #72 executes that judge only when explicitly enabled and backed by hosted retrieval citations; ECC-Tools `16c537f` surfaces policy-promotion Action output values in hosted security comments/checks; ECC-Tools `05d4e82` adds hosted model-judge audit traces with request fingerprints and allowed-citation counts | Marketplace Pro billing-state verification with webhook provenance |
|
| Evaluation and RAG | Reference-set validation, harness audit, traces, ECC-Tools corpus | Read-only evaluator/RAG prototype plus stale-salvage, billing-readiness, CI-failure-diagnosis, harness-config-quality, AgentShield policy-exception, skill-quality evidence, deep-analyzer evidence, and RAG/evaluator comparison fixtures; ECC-Tools #68 publishes the corpus as a hosted promotion readiness check-run, #69 scores cached hosted job outputs against the same corpus, #70 emits ranked retrieval candidates plus a model prompt seed, #71 adds a fail-closed hosted model-judge request contract, and #72 executes that judge only when explicitly enabled and backed by hosted retrieval citations; ECC-Tools `16c537f` surfaces policy-promotion Action output values in hosted security comments/checks; ECC-Tools `05d4e82` adds hosted model-judge audit traces with request fingerprints and allowed-citation counts | Marketplace Pro billing-state verification with webhook provenance |
|
||||||
| AgentShield enterprise | AgentShield PR evidence and roadmap notes | Fleet routing landed in #89 after evidence-pack inspect/readback shipped in #88; #90 emits fleet `reviewItems`; #91 exports checksum-backed policy bundles; #92 promotes checksum-verified policies from those bundles into active policy files; AgentShield `87aec47` adds policy promotion `reviewItems`; `28d08c7` adds package-manager hardening drift detection; `659f569` refreshes workflow action runtime pins; `ee585cd` corrects unsupported npm release-age guidance and keeps enforceable cooldown findings on pnpm/Yarn; `1124535` exposes package-manager hardening Action outputs for CI/hosted routing; `1593925` exposes policy-promotion Action outputs and runtime-smoke job-summary evidence; ECC-Tools #76 consumes fleet summaries, #77 surfaces source evidence paths in hosted findings, #78 links fleet routes to harness owners, ECC-Tools `8658951` consumes policy-promotion Action outputs, and ECC-Tools `16c537f` renders operator-visible output values | Deepen live operator approval/readback after Marketplace/payment gates |
|
| AgentShield enterprise | AgentShield PR evidence and roadmap notes | Fleet routing landed in #89 after evidence-pack inspect/readback shipped in #88; #90 emits fleet `reviewItems`; #91 exports checksum-backed policy bundles; #92 promotes checksum-verified policies from those bundles into active policy files; AgentShield `87aec47` adds policy promotion `reviewItems`; `28d08c7` adds package-manager hardening drift detection; `659f569` refreshes workflow action runtime pins; `ee585cd` corrects unsupported npm release-age guidance and keeps enforceable cooldown findings on pnpm/Yarn; `1124535` exposes package-manager hardening Action outputs for CI/hosted routing; `1593925` exposes policy-promotion Action outputs and runtime-smoke job-summary evidence; `840952a` adds fleet review ticket payloads and current Mini Shai-Hulud IOC breadcrumbs; ECC-Tools #76 consumes fleet summaries, #77 surfaces source evidence paths in hosted findings, #78 links fleet routes to harness owners, ECC-Tools `8658951` consumes policy-promotion Action outputs, and ECC-Tools `16c537f` renders operator-visible output values | Deepen live operator approval/readback after Marketplace/payment gates |
|
||||||
| ECC Tools app | ECC-Tools PR evidence, billing audit, risk taxonomy, evaluator/RAG corpus | ECC-Tools #53 published the supply-chain workflow hardening branch, #54 tracks copy-ready PR drafts in the Linear/project backlog, #55 classifies analysis-depth readiness, #56 exposes the hosted execution plan, #57 executes the first hosted CI diagnostics job, #58 executes the hosted security evidence review job, #59 executes the hosted harness compatibility audit, #60 executes the hosted reference-set evaluation, #61 executes the hosted AI routing/cost review, #62 executes hosted team backlog routing, #63 publishes the hosted depth-plan check-run, #64 dispatches hosted jobs from PR comments, #65 persists hosted result history/check-runs, #66 exposes hosted job status from PR comments, #67 makes depth-plan recommendations cache-aware, #68 publishes hosted promotion readiness from the evaluator/RAG corpus, #69 scores cached hosted job outputs against that corpus, #70 emits ranked retrieval candidates plus a model prompt seed, #71 emits the gated `hosted-promotion-judge.v1` contract without live model calls, #72 adds opt-in live model-judge execution behind hosted-evidence and strict JSON/citation gates, #73 adds a fail-closed native-payments `announcementGate` to billing readiness, #74 adds `npm run billing:announcement-gate` for operator verification, #75 tightens the billing announcement gate for live Marketplace readback, #76 routes AgentShield fleet-summary evidence into hosted security findings, #77 adds source evidence paths to hosted finding output, #78 links AgentShield fleet target paths to hosted harness owner findings, `8658951` routes AgentShield policy-promotion Action outputs into hosted security review and promotion readiness, `16c537f` renders policy-promotion status/pack/count/digest values in hosted security comments/checks, `05d4e82` renders hosted promotion judge request fingerprints plus allowed-citation audit traces, `91a441b` adds billing announcement preflight output for required readback inputs, `eb69412` records the initial production readback state, `95d0bec` adds aggregate `billing:kv-readback` evidence, and `2859678` requires Marketplace webhook provenance in billing readiness | Replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then live readback and announcement gate |
|
| ECC Tools app | ECC-Tools PR evidence, billing audit, risk taxonomy, evaluator/RAG corpus | ECC-Tools #53 published the supply-chain workflow hardening branch, #54 tracks copy-ready PR drafts in the Linear/project backlog, #55 classifies analysis-depth readiness, #56 exposes the hosted execution plan, #57 executes the first hosted CI diagnostics job, #58 executes the hosted security evidence review job, #59 executes the hosted harness compatibility audit, #60 executes the hosted reference-set evaluation, #61 executes the hosted AI routing/cost review, #62 executes hosted team backlog routing, #63 publishes the hosted depth-plan check-run, #64 dispatches hosted jobs from PR comments, #65 persists hosted result history/check-runs, #66 exposes hosted job status from PR comments, #67 makes depth-plan recommendations cache-aware, #68 publishes hosted promotion readiness from the evaluator/RAG corpus, #69 scores cached hosted job outputs against that corpus, #70 emits ranked retrieval candidates plus a model prompt seed, #71 emits the gated `hosted-promotion-judge.v1` contract without live model calls, #72 adds opt-in live model-judge execution behind hosted-evidence and strict JSON/citation gates, #73 adds a fail-closed native-payments `announcementGate` to billing readiness, #74 adds `npm run billing:announcement-gate` for operator verification, #75 tightens the billing announcement gate for live Marketplace readback, #76 routes AgentShield fleet-summary evidence into hosted security findings, #77 adds source evidence paths to hosted finding output, #78 links AgentShield fleet target paths to hosted harness owner findings, `8658951` routes AgentShield policy-promotion Action outputs into hosted security review and promotion readiness, `16c537f` renders policy-promotion status/pack/count/digest values in hosted security comments/checks, `05d4e82` renders hosted promotion judge request fingerprints plus allowed-citation audit traces, `91a441b` adds billing announcement preflight output for required readback inputs, `eb69412` records the initial production readback state, `95d0bec` adds aggregate `billing:kv-readback` evidence, `2859678` requires Marketplace webhook provenance in billing readiness, `42653f9` adds Wrangler OAuth readback with live aggregate production counts, and `632e059` adds sanitized target-account billing readback for the exact Marketplace test account | Create or verify Marketplace-managed Pro target billing-state with webhook provenance, then live target readback and announcement gate |
|
||||||
| Linear progress | Linear project status updates, `docs/architecture/progress-sync-contract.md`, generated `operator:dashboard` output, and this mirror | Status update with queue/evidence/missing gates | Every significant merge batch |
|
| Linear progress | Linear project status updates, `docs/architecture/progress-sync-contract.md`, generated `operator:dashboard` output, and this mirror | Status update with queue/evidence/missing gates | Every significant merge batch |
|
||||||
|
|
||||||
The project status update should always include:
|
The project status update should always include:
|
||||||
@@ -932,15 +997,24 @@ Acceptance:
|
|||||||
security review and Hosted Promotion Readiness scoring, and ECC-Tools
|
security review and Hosted Promotion Readiness scoring, and ECC-Tools
|
||||||
commit `16c537f` renders promotion status, pack, review item count,
|
commit `16c537f` renders promotion status, pack, review item count,
|
||||||
remaining action count, and digest in hosted security comments/check-runs.
|
remaining action count, and digest in hosted security comments/check-runs.
|
||||||
|
AgentShield commit `840952a` adds Linear/operator-ready fleet review ticket
|
||||||
|
payloads and expands current Mini Shai-Hulud IOC breadcrumbs, with green
|
||||||
|
local and remote CI. AgentShield commit `4e36aab` hardens CI package installs
|
||||||
|
after the expanded Mini Shai-Hulud refresh, with CI, Test GitHub Action,
|
||||||
|
Self-Scan, and Dependabot Update workflows green.
|
||||||
ECC-Tools commit `05d4e82` adds hosted promotion judge audit traces with
|
ECC-Tools commit `05d4e82` adds hosted promotion judge audit traces with
|
||||||
deterministic request fingerprints and allowed-citation counts, without
|
deterministic request fingerprints and allowed-citation counts, without
|
||||||
exposing raw provider output.
|
exposing raw provider output.
|
||||||
ECC-Tools commit `91a441b` adds a billing announcement preflight command
|
ECC-Tools commit `91a441b` adds a billing announcement preflight command
|
||||||
for checking Marketplace readback inputs before privileged API calls.
|
for checking Marketplace readback inputs before privileged API calls.
|
||||||
ECC-Tools commit `2859678` requires Marketplace webhook provenance in
|
ECC-Tools commit `2859678` requires Marketplace webhook provenance in
|
||||||
billing-state before native-payments announcement readiness can pass. The
|
billing-state before native-payments announcement readiness can pass.
|
||||||
next slice is live operator approval/readback after the Cloudflare
|
ECC-Tools commit `42653f9` adds Wrangler OAuth KV readback and confirms the
|
||||||
credential and Marketplace/payment gates are fixed.
|
current blocker is not Cloudflare read access; it is the absence of a
|
||||||
|
ready-like Marketplace Pro billing-state record with webhook provenance.
|
||||||
|
ECC-Tools commit `632e059` adds sanitized target-account readback, so the
|
||||||
|
final operator gate should verify the exact Marketplace test account without
|
||||||
|
printing its login or raw KV key names.
|
||||||
2. Run `npm run billing:announcement-gate -- --preflight --account
|
2. Run `npm run billing:announcement-gate -- --preflight --account
|
||||||
<github-login>`, then run the same command without `--preflight` against a
|
<github-login>`, then run the same command without `--preflight` against a
|
||||||
Marketplace-managed test account and require `announcementGate.ready ===
|
Marketplace-managed test account and require `announcementGate.ready ===
|
||||||
|
|||||||
@@ -229,7 +229,8 @@ Required safeguards:
|
|||||||
## Near-Term Implementation Order
|
## Near-Term Implementation Order
|
||||||
|
|
||||||
1. Extend the harness adapter matrix and public scorecard onramp.
|
1. Extend the harness adapter matrix and public scorecard onramp.
|
||||||
2. Add the release/name/plugin publication checklist with evidence fields.
|
2. Keep the release/name/plugin publication checklist current with fresh
|
||||||
|
final-commit evidence before rc.1 publication.
|
||||||
3. Define the HUD/status JSON contract and fixture directory.
|
3. Define the HUD/status JSON contract and fixture directory.
|
||||||
4. Start AgentShield policy schema plus SARIF fixtures.
|
4. Start AgentShield policy schema plus SARIF fixtures.
|
||||||
5. Audit ECC Tools billing and check-run surfaces.
|
5. Audit ECC Tools billing and check-run surfaces.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# AgentShield Enterprise Research Roadmap
|
# AgentShield Enterprise Research Roadmap
|
||||||
|
|
||||||
Generated: 2026-05-12; refreshed with May 16 AgentShield PR #87, #88, and #89 evidence.
|
Generated: 2026-05-12; refreshed with May 18 AgentShield fleet-ticket and
|
||||||
|
Mini Shai-Hulud IOC evidence.
|
||||||
|
|
||||||
This is a planning artifact for the next AgentShield enterprise iteration. It
|
This is a planning artifact for the next AgentShield enterprise iteration. It
|
||||||
does not modify AgentShield code. The goal is to turn the current scanner,
|
does not modify AgentShield code. The goal is to turn the current scanner,
|
||||||
@@ -116,14 +117,21 @@ AgentShield PR #89 merged as
|
|||||||
`agentshield evidence-pack fleet <dirs...> [--json]`, verifies each pack through
|
`agentshield evidence-pack fleet <dirs...> [--json]`, verifies each pack through
|
||||||
the inspect path, aggregates finding, policy, baseline, supply-chain, and
|
the inspect path, aggregates finding, policy, baseline, supply-chain, and
|
||||||
remediation totals, and assigns each pack to a deterministic fleet route.
|
remediation totals, and assigns each pack to a deterministic fleet route.
|
||||||
|
AgentShield commit `840952a7a07f820f24081c43df656d7f7295f23b` adds
|
||||||
|
Linear/operator-ready fleet review ticket payloads with priority, labels,
|
||||||
|
titles, and Markdown bodies. The same commit expands current Mini
|
||||||
|
Shai-Hulud/TanStack IOC coverage for the in-cluster Vault endpoint and
|
||||||
|
temporary lockfile breadcrumb, with local typecheck, lint, full tests,
|
||||||
|
`git diff --check`, and GitHub CI/Self-Scan/Action-test evidence.
|
||||||
|
|
||||||
The next iteration after fleet routing should not be "add more regex rules" by
|
The next iteration after fleet routing should not be "add more regex rules" by
|
||||||
default. ECC-Tools follow-up routing now consumes fleet summaries and surfaces
|
default. ECC-Tools follow-up routing now consumes fleet summaries and surfaces
|
||||||
source evidence paths in hosted findings, and the first cross-harness policy
|
source evidence paths in hosted findings, and the first cross-harness policy
|
||||||
slice now links AgentShield fleet route target paths to harness-owner review.
|
slice now links AgentShield fleet route target paths to harness-owner review.
|
||||||
AgentShield fleet output now also emits `reviewItems` with source evidence paths
|
AgentShield fleet output now also emits `reviewItems` with source evidence paths
|
||||||
and owner-ready recommendations for routed packs. The higher leverage move is
|
and owner-ready recommendations plus copy-ready ticket payloads for routed
|
||||||
durable policy export and workflow automation for routed fleet findings.
|
packs. The higher leverage move is durable operator approval/readback and
|
||||||
|
workflow automation for routed fleet findings.
|
||||||
|
|
||||||
## Enterprise Gaps
|
## Enterprise Gaps
|
||||||
|
|
||||||
|
|||||||
90
docs/architecture/discussion-response-playbook.md
Normal file
90
docs/architecture/discussion-response-playbook.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# Discussion Response Playbook
|
||||||
|
|
||||||
|
This playbook turns GitHub Discussions into the same operating queue as PRs,
|
||||||
|
issues, Linear work, and release evidence. It is an operator guide, not a
|
||||||
|
promise that every informational thread needs a public reply.
|
||||||
|
|
||||||
|
## Audit Loop
|
||||||
|
|
||||||
|
Run these checks before a release, after a major merge batch, and when Linear
|
||||||
|
ITO-59 is refreshed:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run discussion:audit -- --json
|
||||||
|
node scripts/platform-audit.js --json
|
||||||
|
```
|
||||||
|
|
||||||
|
The queue is current only when:
|
||||||
|
|
||||||
|
- discussion fetch errors are explained or fixed;
|
||||||
|
- `needsMaintainerTouch` is zero for support-like discussion categories;
|
||||||
|
- answerable Q&A discussions either have an accepted answer or a clear routing
|
||||||
|
note; and
|
||||||
|
- any product-scope thread is linked to a GitHub issue, Linear issue, roadmap
|
||||||
|
row, or explicit deferral.
|
||||||
|
|
||||||
|
Informational threads such as announcements, references, show-and-tell, or
|
||||||
|
maintainer-authored updates can remain visible without becoming response debt.
|
||||||
|
|
||||||
|
## Categories
|
||||||
|
|
||||||
|
| Category | Route | Required readback |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Product support or install confusion | Reply with the exact command/doc path; mark accepted answer for Q&A when the fix is complete | Discussion URL plus accepted-answer URL when applicable |
|
||||||
|
| Bug report | Ask for a minimal repro, version, harness, and logs; create or link a GitHub issue when reproducible | Issue URL or deferral reason |
|
||||||
|
| Feature request | Acknowledge the desired outcome and link the closest roadmap issue; do not imply commitment unless scoped | Linear/GitHub roadmap link |
|
||||||
|
| Security concern | Move exploit details and secrets to a private channel; keep the public reply short and non-operational | Private escalation note plus public safety reply |
|
||||||
|
| Release or billing question | Answer from the release URL ledger and publication-readiness gates; do not claim unpublished URLs, billing readiness, or plugin availability | Evidence artifact or blocker link |
|
||||||
|
| Show-and-tell, reference, or announcement | Leave as informational unless there is a direct question or a product-scope signal | Optional roadmap link if useful |
|
||||||
|
| Stale or concluded thread | Summarize the current state and link the durable doc/issue; avoid reviving low-signal threads | Closure note or explicit no-action rationale |
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
### Public Support
|
||||||
|
|
||||||
|
Thanks for the report. The current supported path is:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
<command>
|
||||||
|
```
|
||||||
|
|
||||||
|
The relevant doc is `<doc path or URL>`. If this does not match your setup,
|
||||||
|
please reply with the harness, OS, package manager, and the exact error text.
|
||||||
|
|
||||||
|
### Maintainer Coordination
|
||||||
|
|
||||||
|
I am routing this into `<issue or Linear key>` so it does not get lost in the
|
||||||
|
discussion queue. The next decision is `<specific decision>`. Until that lands,
|
||||||
|
the supported workaround is `<workaround or "none">`.
|
||||||
|
|
||||||
|
### Stale Or Concluded
|
||||||
|
|
||||||
|
This thread looks resolved or superseded by `<doc/issue/release>`. I am leaving
|
||||||
|
it visible for history, but it is no longer an active support queue item. New
|
||||||
|
repro details should go to `<issue/discussion path>`.
|
||||||
|
|
||||||
|
### Release Announcement
|
||||||
|
|
||||||
|
The current release status is `<rc/beta/GA state>`. Live URLs are recorded in
|
||||||
|
`docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md`. Anything marked
|
||||||
|
pending there should not be announced as shipped yet.
|
||||||
|
|
||||||
|
### Security Escalation
|
||||||
|
|
||||||
|
Thanks for flagging this. Please do not post exploit steps, tokens, customer
|
||||||
|
data, or secret values in the public thread. I am routing this through the
|
||||||
|
security response path and will keep the public thread limited to safe status
|
||||||
|
updates.
|
||||||
|
|
||||||
|
## Recording Outcomes
|
||||||
|
|
||||||
|
For each high-signal discussion, record one of these outcomes:
|
||||||
|
|
||||||
|
- replied publicly and accepted answer read back;
|
||||||
|
- linked to a GitHub issue or Linear issue;
|
||||||
|
- routed to the security response path;
|
||||||
|
- classified as informational; or
|
||||||
|
- explicitly deferred with a reason.
|
||||||
|
|
||||||
|
Mirror the summary into ITO-59 when the batch closes, and include the counts in
|
||||||
|
the next operator dashboard or publication evidence refresh.
|
||||||
63
docs/drafts/release-1.10.1-announcement.md
Normal file
63
docs/drafts/release-1.10.1-announcement.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# ECC 1.10.1 release announcement draft
|
||||||
|
|
||||||
|
ECC 1.10.1 is the follow-up stabilization release to 1.10.0.
|
||||||
|
|
||||||
|
This release is focused on install correctness, cross-surface naming clarity, Windows/PowerShell recovery, Cursor project install correctness, and Claude Code hook compatibility. It is not a feature-heavy release.
|
||||||
|
|
||||||
|
## What landed in the stabilization pass
|
||||||
|
- npm/package/release surfaces are aligned and `ecc-universal@1.10.0` is live on npm
|
||||||
|
- Windows locale/path and PowerShell install-path regressions fixed
|
||||||
|
- Bash hook process-storm regression fixed
|
||||||
|
- Claude Code 2.1.x hook schema compatibility fixed
|
||||||
|
- Cursor native project install path repaired:
|
||||||
|
- `.cursor/hooks.json` now includes the required schema/version surface
|
||||||
|
- `.cursor/mcp.json` is written in the native Cursor project location
|
||||||
|
- continuous-learning-v2 now accepts `claude-desktop` as a valid entrypoint
|
||||||
|
- Windows observe path now skips `AppInstallerPythonRedirector.exe`
|
||||||
|
- docs now distinguish plugin installs from full manual installs more clearly
|
||||||
|
|
||||||
|
## What 1.10.1 is for
|
||||||
|
- make the current install surfaces predictable
|
||||||
|
- reduce stale naming/install guidance
|
||||||
|
- close the follow-up regressions from 1.10.0
|
||||||
|
- give users one stable update point instead of piecing together fixes across issues and discussions
|
||||||
|
|
||||||
|
## Included release fixes
|
||||||
|
- `#1543` Cursor native project hook + MCP install repair
|
||||||
|
- `#1524` Claude Code v2.1.116 argv-dup mitigation in `settings.local.json`
|
||||||
|
- `#1522` continuous-learning-v2 accepts `claude-desktop` as a valid entrypoint
|
||||||
|
- `#1511` Windows observe path skips `AppInstallerPythonRedirector.exe`
|
||||||
|
- `#1546` continuous-learning-v2 plugin quick start correction
|
||||||
|
- `#1535` hero overflow follow-up
|
||||||
|
|
||||||
|
## Important naming clarification
|
||||||
|
- Claude marketplace/plugin identifier: `everything-claude-code@everything-claude-code`
|
||||||
|
- npm package: `ecc-universal`
|
||||||
|
- GitHub repo: `affaan-m/everything-claude-code`
|
||||||
|
|
||||||
|
Those are intentionally different surfaces. The plugin identifier follows Anthropic marketplace rules; the npm package remains `ecc-universal`.
|
||||||
|
|
||||||
|
## Still being monitored
|
||||||
|
This should be announced as a stabilization release, not as “all edge cases are solved.”
|
||||||
|
|
||||||
|
We are still watching for:
|
||||||
|
- OS-specific edge cases across macOS, Windows, Linux
|
||||||
|
- shell-specific behavior differences
|
||||||
|
- Cursor vs Claude plugin install-path mismatches that only appear in older or mixed installs
|
||||||
|
- third-party provider/tool-name compatibility reports that still need current-main repro
|
||||||
|
|
||||||
|
Current watch-list examples:
|
||||||
|
- `#1520` likely obsolete unless repro returns on the current installer
|
||||||
|
- `#1516` not gating unless reproduced on current `main`
|
||||||
|
- `#1484` remains a Windows umbrella/watch-list issue rather than an active release gate
|
||||||
|
|
||||||
|
## Recommended update guidance
|
||||||
|
If you hit 1.10.0 install/runtime problems:
|
||||||
|
1. update to the latest package/plugin surface
|
||||||
|
2. avoid mixing plugin install plus full manual repo copy unless the docs explicitly say to
|
||||||
|
3. if problems persist, report:
|
||||||
|
- OS + shell
|
||||||
|
- Claude Code/Cursor version
|
||||||
|
- install method used
|
||||||
|
- exact stderr/output
|
||||||
|
- whether the issue is plugin install, npm install, repo sync, or Cursor project install
|
||||||
@@ -12,6 +12,8 @@
|
|||||||
- verify `preview-pack-manifest.md` lists the public release, Hermes, adapter,
|
- verify `preview-pack-manifest.md` lists the public release, Hermes, adapter,
|
||||||
observability, publication, and announcement artifacts before running final
|
observability, publication, and announcement artifacts before running final
|
||||||
publish checks
|
publish checks
|
||||||
|
- verify `release-name-plugin-publication-checklist-2026-05-18.md` still
|
||||||
|
matches current GitHub, npm, Claude, Codex, OpenCode, and billing surfaces
|
||||||
- keep private tokens, personal docs, and raw workspace exports out of the repo
|
- keep private tokens, personal docs, and raw workspace exports out of the repo
|
||||||
|
|
||||||
## Release Surface
|
## Release Surface
|
||||||
@@ -19,6 +21,9 @@
|
|||||||
- verify package, plugin, marketplace, OpenCode, and agent metadata stays at `2.0.0-rc.1`
|
- verify package, plugin, marketplace, OpenCode, and agent metadata stays at `2.0.0-rc.1`
|
||||||
- verify `ecc2/Cargo.toml` stays at `0.1.0` for rc.1; `ecc2/` remains an alpha control-plane scaffold
|
- verify `ecc2/Cargo.toml` stays at `0.1.0` for rc.1; `ecc2/` remains an alpha control-plane scaffold
|
||||||
- complete `publication-readiness.md` with fresh evidence before any GitHub release, npm publish, plugin submission, or announcement post
|
- complete `publication-readiness.md` with fresh evidence before any GitHub release, npm publish, plugin submission, or announcement post
|
||||||
|
- rerun the release name/plugin publication checklist before creating a
|
||||||
|
GitHub prerelease, publishing npm, pushing Claude plugin tags, recording the
|
||||||
|
Codex marketplace path, or posting public copy
|
||||||
- include `publication-evidence-2026-05-17.md` and
|
- include `publication-evidence-2026-05-17.md` and
|
||||||
`operator-readiness-dashboard-2026-05-17.md` in the final evidence review,
|
`operator-readiness-dashboard-2026-05-17.md` in the final evidence review,
|
||||||
then rerun publish-facing checks from the exact release commit
|
then rerun publish-facing checks from the exact release commit
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# ECC v2.0.0-rc.1 Naming And Publication Matrix
|
# ECC v2.0.0-rc.1 Naming And Publication Matrix
|
||||||
|
|
||||||
Snapshot date: 2026-05-12.
|
Snapshot date: 2026-05-18.
|
||||||
|
|
||||||
This matrix answers the release question "ship as Everything Claude Code, ECC,
|
This matrix answers the release question "ship as Everything Claude Code, ECC,
|
||||||
or a renamed surface?" for the rc.1 lane. It is evidence for planning, not a
|
or a renamed surface?" for the rc.1 lane. It is evidence for planning, not a
|
||||||
@@ -28,26 +28,26 @@ Reason:
|
|||||||
|
|
||||||
## Current Values
|
## Current Values
|
||||||
|
|
||||||
| Surface | Current value | Evidence command | 2026-05-12 result | Release decision |
|
| Surface | Current value | Evidence command | 2026-05-18 result | Release decision |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| Product display name | `Everything Claude Code` | `rg -n "Everything Claude Code" README.md CHANGELOG.md docs/releases/2.0.0-rc.1` | Present across README, release notes, launch copy, and plugin manifests | Keep for rc.1 |
|
| Product display name | `Everything Claude Code` | `rg -n "Everything Claude Code" README.md CHANGELOG.md docs/releases/2.0.0-rc.1` | Present across README, release notes, launch copy, and plugin manifests | Keep for rc.1 |
|
||||||
| Short name | `ECC` | README/release docs | Used as the short cross-harness brand | Keep and prefer in tight copy |
|
| Short name | `ECC` | README/release docs | Used as the short cross-harness brand | Keep and prefer in tight copy |
|
||||||
| GitHub repo | `affaan-m/everything-claude-code` | `git remote get-url origin` | `https://github.com/affaan-m/everything-claude-code.git` | Keep for rc.1 |
|
| GitHub repo | `affaan-m/everything-claude-code` | `git remote get-url origin` | `https://github.com/affaan-m/everything-claude-code.git` | Keep for rc.1 |
|
||||||
| Possible short repo | `affaan-m/ecc` | `gh repo view affaan-m/ecc` | Not found with current auth | Candidate after rc.1 only |
|
| Possible short repo | `affaan-m/ecc` | `gh repo view affaan-m/ecc` | Not found with current auth | Candidate after rc.1 only |
|
||||||
| npm package | `ecc-universal` | `node -p "require('./package.json').name"` | `ecc-universal` | Keep for rc.1 |
|
| npm package | `ecc-universal` | `node -p "require('./package.json').name"` | `ecc-universal` | Keep for rc.1 |
|
||||||
| npm package version | `2.0.0-rc.1` local, `1.10.0` registry latest | `node -p "require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 is ready; registry latest remains `1.10.0` | Publish rc as `next`, not `latest` |
|
| npm package version | `2.0.0-rc.1` local, `1.10.0` registry latest | `node -p "require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 is ready; registry latest remains `1.10.0` and no `next` dist-tag exists yet | Publish rc as `next`, not `latest` |
|
||||||
| Exact npm short name | `ecc` | `npm view ecc name version description repository.url --json` | Occupied by `ecc@0.0.2`, "Elliptic curve cryptography functions." | Do not use |
|
| Exact npm short name | `ecc` | `npm view ecc name version description repository.url --json` | Occupied by `ecc@0.0.2`, "Elliptic curve cryptography functions." | Do not use |
|
||||||
| Scoped npm short name | `@affaan-m/ecc` | `npm view @affaan-m/ecc name version --json` | Registry 404 | Possible future scoped package if npm scope policy permits |
|
| Scoped npm short name | `@affaan-m/ecc` | `npm view @affaan-m/ecc name version --json` | Registry 404 | Possible future scoped package if npm scope policy permits |
|
||||||
| Former package name | `everything-claude-code` | `npm view everything-claude-code name version dist-tags --json` | Registry reports unpublished on 2026-02-07 | Do not revive for rc.1 |
|
| Former package name | `everything-claude-code` | `npm view everything-claude-code name version dist-tags --json` | Registry reports unpublished on 2026-02-07 | Do not revive for rc.1 |
|
||||||
| Claude plugin slug | `ecc` | `node -p "require('./.claude-plugin/plugin.json').name"` | `ecc` | Keep |
|
| Claude plugin slug | `ecc` | `node -p "require('./.claude-plugin/plugin.json').name"` | `ecc` | Keep |
|
||||||
| Claude plugin version | `2.0.0-rc.1` | `claude plugin validate .claude-plugin/plugin.json` | Validation passed on Claude Code `2.1.121` | Ready for release-tag gate |
|
| Claude plugin version | `2.0.0-rc.1` | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin tag .claude-plugin --dry-run` | Validation passed on Claude Code `2.1.143`; dry run would create `ecc--v2.0.0-rc.1` | Ready for release-tag gate |
|
||||||
| Claude marketplace entry | `ecc` | `.claude-plugin/marketplace.json` | Version and repo point at current rc.1 surface | Keep |
|
| Claude marketplace entry | `ecc` | `.claude-plugin/marketplace.json`; `claude plugin marketplace add --help`; Anthropic plugin marketplace docs | Version and repo point at current rc.1 surface; GitHub, git URL, remote marketplace JSON, and local path marketplace sources are supported | Keep |
|
||||||
| Codex plugin slug | `ecc` | `node -p "require('./.codex-plugin/plugin.json').name"` | `ecc` | Keep |
|
| Codex plugin slug | `ecc` | `node -p "require('./.codex-plugin/plugin.json').name"` | `ecc` | Keep |
|
||||||
| Codex plugin version | `2.0.0-rc.1` | `node tests/docs/ecc2-release-surface.test.js` | Release surface test passed | Ready for Codex marketplace/manual marketplace gate |
|
| Codex plugin version | `2.0.0-rc.1` | `node tests/plugin-manifest.test.js`; `node tests/docs/ecc2-release-surface.test.js` | Plugin manifest passed 54/54; release surface passed 21/21 on Codex CLI `0.131.0` | Ready for Codex marketplace/manual marketplace gate |
|
||||||
| Codex repo marketplace | `ecc` | `.agents/plugins/marketplace.json`; `codex plugin marketplace add --help` | Repo marketplace add supports GitHub shorthand and local roots; local temp-home add smoke passed | Use as rc.1 Codex distribution path |
|
| Codex repo marketplace | `ecc` | `.agents/plugins/marketplace.json`; `codex plugin marketplace add --help`; OpenAI Codex plugin docs | Repo marketplace add supports GitHub shorthand, Git URLs, SSH URLs, local roots, `--ref`, and `--sparse`; local and GitHub-ref temp-home add smokes passed | Use as rc.1 Codex distribution path |
|
||||||
| OpenCode package | `ecc-universal` | `node -p "require('./.opencode/package.json').name"` | `ecc-universal` | Keep |
|
| OpenCode package | `ecc-universal` | `node -p "require('./.opencode/package.json').name"` | `ecc-universal` | Keep |
|
||||||
| OpenCode build | Generated package output | `npm run build:opencode` | Passed | Ready for package dry-run gate |
|
| OpenCode build | Generated package output | `npm run build:opencode` | Passed | Ready for package dry-run gate |
|
||||||
| npm pack surface | Reduced runtime package | `npm pack --dry-run --json` | Produced `ecc-universal-2.0.0-rc.1.tgz`, 969 entries, about 5.0 MB unpacked | Needs final release-commit rerun |
|
| npm pack surface | Reduced runtime package | `NPM_CONFIG_USERCONFIG=/dev/null npm pack --dry-run --json` | Produced `ecc-universal-2.0.0-rc.1.tgz`, 2228 entries, 4,348,504 bytes packed, 13,024,929 bytes unpacked | Needs final release-commit rerun |
|
||||||
|
|
||||||
## Publication Paths
|
## Publication Paths
|
||||||
|
|
||||||
@@ -57,11 +57,26 @@ Reason:
|
|||||||
| npm | `ecc-universal` local package version is `2.0.0-rc.1`; registry latest is `1.10.0` | Publish rc with `npm publish --tag next` after final `npm pack --dry-run` and release tests | Do not publish before final release commit |
|
| npm | `ecc-universal` local package version is `2.0.0-rc.1`; registry latest is `1.10.0` | Publish rc with `npm publish --tag next` after final `npm pack --dry-run` and release tests | Do not publish before final release commit |
|
||||||
| Claude plugin | `claude plugin validate .claude-plugin/plugin.json` passed; `claude plugin tag --help` confirms the release tag flow creates `{name}--v{version}` tags and can push them | Run `claude plugin tag .claude-plugin --dry-run` from the clean release commit, then tag/push only after release approval | No plugin release tag created in this pass |
|
| Claude plugin | `claude plugin validate .claude-plugin/plugin.json` passed; `claude plugin tag --help` confirms the release tag flow creates `{name}--v{version}` tags and can push them | Run `claude plugin tag .claude-plugin --dry-run` from the clean release commit, then tag/push only after release approval | No plugin release tag created in this pass |
|
||||||
| Claude marketplace | `.claude-plugin/marketplace.json` points at `ecc` and the public repo | Verify marketplace update/install path after tag exists | External marketplace propagation not verified |
|
| Claude marketplace | `.claude-plugin/marketplace.json` points at `ecc` and the public repo | Verify marketplace update/install path after tag exists | External marketplace propagation not verified |
|
||||||
| Codex plugin | `codex plugin marketplace` supports add/upgrade/remove; `.codex-plugin/plugin.json` is present; `.agents/plugins/marketplace.json` exposes `ecc` from the repo root; temp-home local `codex plugin marketplace add` passed | Publish rc.1 docs with the repo-marketplace command, then monitor OpenAI's official Plugin Directory self-serve path | Official Plugin Directory publishing is documented as coming soon |
|
| Codex plugin | `codex plugin marketplace` supports local and Git marketplace sources; `.codex-plugin/plugin.json` is present; `.agents/plugins/marketplace.json` exposes `ecc` from the repo root; temp-home local and GitHub-ref marketplace adds passed | Publish rc.1 docs with the repo-marketplace command, then monitor OpenAI's official Plugin Directory path | Do not claim official Plugin Directory listing before OpenAI submission evidence |
|
||||||
| OpenCode package | `.opencode/package.json` builds from source and ships inside npm package | Re-run `npm run build:opencode` and package dry-run from release commit | OpenCode CLI 1.2.21 does not expose a separate plugin publication command in this pass |
|
| OpenCode package | `.opencode/package.json` builds from source and ships inside npm package | Re-run `npm run build:opencode` and package dry-run from release commit | OpenCode CLI 1.2.21 does not expose a separate plugin publication command in this pass |
|
||||||
| ECC Tools billing claim | README and launch copy mention ECC Tools / marketplace context | ECC-Tools #73 adds `/api/billing/readiness` `announcementGate`; run it against a Marketplace-managed test account before any payment announcement | Billing announcement code gate exists; live Marketplace account readback still pending |
|
| ECC Tools billing claim | README and launch copy mention ECC Tools / marketplace context | ECC-Tools #73 adds `/api/billing/readiness` `announcementGate`; run it against a Marketplace-managed test account before any payment announcement | Billing announcement code gate exists; live Marketplace account readback still pending |
|
||||||
| Social and longform copy | X thread, LinkedIn copy, article outline, GitHub release copy exist | Replace any stale URLs, then publish only after release/npm/plugin URLs work | Public URLs not final until release actions complete |
|
| Social and longform copy | X thread, LinkedIn copy, article outline, GitHub release copy exist | Replace any stale URLs, then publish only after release/npm/plugin URLs work | Public URLs not final until release actions complete |
|
||||||
|
|
||||||
|
## ITO-46 Blocker Register
|
||||||
|
|
||||||
|
| Channel | Current status | Required metadata/evidence | Owner | Blocker or follow-up |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| GitHub release | Approval-gated; no `v2.0.0-rc.1` prerelease yet | Tag, release URL, prerelease flag, final release notes, URL ledger | Release owner | Create only after final clean-checkout evidence |
|
||||||
|
| npm | `ecc-universal@2.0.0-rc.1` dry-run passed; registry latest is `1.10.0` | Pack summary, publish dry-run, `next` dist-tag readback, registry signature evidence | Package owner | Do not publish before approval and final release commit |
|
||||||
|
| Short npm name | `ecc` is occupied; `@affaan-m/ecc` returns 404 | Name availability outputs and migration plan | Release owner | Keep `ecc-universal` for rc.1; scoped rename is post-rc only |
|
||||||
|
| Claude plugin | `ecc@2.0.0-rc.1` validates; tag dry run would create `ecc--v2.0.0-rc.1` | `claude plugin validate .`, `claude plugin tag .claude-plugin --dry-run`, marketplace install/update smoke | Plugin owner | Real tag push and marketplace propagation require release approval |
|
||||||
|
| Claude marketplace | Docs and CLI support GitHub, git URL, remote marketplace JSON, and local path sources | Public repo marketplace JSON, support/contact metadata, post-tag install smoke | Plugin owner | No external official listing has been submitted in this pass |
|
||||||
|
| Codex repo marketplace | Local and GitHub-ref temp-home marketplace add smokes passed on Codex CLI `0.131.0` | `.codex-plugin/plugin.json`, `.agents/plugins/marketplace.json`, repo/personal marketplace evidence | Plugin owner | Official Plugin Directory listing requires OpenAI submission/listing evidence |
|
||||||
|
| Codex official Plugin Directory | OpenAI docs describe the curated official directory; ECC has not submitted or received listing evidence | Directory submission link or OpenAI approval path once available | Plugin owner | Track as an ITO-56/ITO-46 follow-up; do not claim an official listing |
|
||||||
|
| OpenCode package | `npm run build:opencode` passed | Built `.opencode` package metadata inside npm tarball | Package owner | No separate public plugin channel identified; follows npm |
|
||||||
|
| Billing/native payments | Announcement remains blocked by ITO-61 | Marketplace Pro target readback, webhook provenance, `INTERNAL_API_SECRET`, announcement gate | ECC Tools owner | Do not include native-payments claim in rc.1 announcement |
|
||||||
|
| Social/longform copy | Drafts exist | Final live GitHub, npm, Claude, Codex, billing URLs | Release owner | Publish only after release/package/plugin URLs exist |
|
||||||
|
|
||||||
## Rename After rc.1
|
## Rename After rc.1
|
||||||
|
|
||||||
If the project moves from "Everything Claude Code" toward "ECC" after rc.1,
|
If the project moves from "Everything Claude Code" toward "ECC" after rc.1,
|
||||||
@@ -83,7 +98,7 @@ do it as a staged migration:
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
git rev-parse HEAD
|
git rev-parse HEAD
|
||||||
7109ee08db7209c5d14809efcf832043020dfc57
|
67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b
|
||||||
|
|
||||||
node -p "require('./package.json').name + '@' + require('./package.json').version"
|
node -p "require('./package.json').name + '@' + require('./package.json').version"
|
||||||
ecc-universal@2.0.0-rc.1
|
ecc-universal@2.0.0-rc.1
|
||||||
@@ -104,19 +119,30 @@ npm view ecc-universal name version dist-tags --json
|
|||||||
registry latest is 1.10.0; no rc dist-tag exists yet.
|
registry latest is 1.10.0; no rc dist-tag exists yet.
|
||||||
|
|
||||||
claude plugin validate .claude-plugin/plugin.json
|
claude plugin validate .claude-plugin/plugin.json
|
||||||
Validation passed on Claude Code 2.1.121.
|
Validation passed on Claude Code 2.1.143.
|
||||||
|
|
||||||
|
claude plugin validate .
|
||||||
|
Validation passed with one warning: root CLAUDE.md is not loaded as plugin
|
||||||
|
context; ship plugin context through skills instead.
|
||||||
|
|
||||||
|
claude plugin tag .claude-plugin --dry-run
|
||||||
|
Would create and push tag ecc--v2.0.0-rc.1.
|
||||||
|
|
||||||
node tests/docs/ecc2-release-surface.test.js
|
node tests/docs/ecc2-release-surface.test.js
|
||||||
18 release-surface checks passed.
|
21 release-surface checks passed.
|
||||||
|
|
||||||
node tests/scripts/npm-publish-surface.test.js
|
node tests/plugin-manifest.test.js
|
||||||
2 npm publish-surface checks passed.
|
54 plugin-manifest checks passed.
|
||||||
|
|
||||||
npm run build:opencode
|
npm run build:opencode
|
||||||
Passed.
|
Passed.
|
||||||
|
|
||||||
npm pack --dry-run --json
|
npm pack --dry-run --json
|
||||||
Produced ecc-universal-2.0.0-rc.1.tgz, 969 entries, about 5.0 MB unpacked.
|
Produced ecc-universal-2.0.0-rc.1.tgz, 2228 entries, 4,348,504 bytes
|
||||||
|
packed, and 13,024,929 bytes unpacked.
|
||||||
|
|
||||||
|
npm publish --tag next --dry-run
|
||||||
|
Dry run would publish ecc-universal@2.0.0-rc.1 to npm with tag next.
|
||||||
|
|
||||||
codex plugin marketplace add --help
|
codex plugin marketplace add --help
|
||||||
Supports GitHub shorthand, HTTP(S) Git URLs, SSH URLs, local marketplace roots,
|
Supports GitHub shorthand, HTTP(S) Git URLs, SSH URLs, local marketplace roots,
|
||||||
@@ -125,4 +151,9 @@ Supports GitHub shorthand, HTTP(S) Git URLs, SSH URLs, local marketplace roots,
|
|||||||
HOME="$(mktemp -d)" codex plugin marketplace add <local-checkout>
|
HOME="$(mktemp -d)" codex plugin marketplace add <local-checkout>
|
||||||
Added marketplace ecc and recorded the installed marketplace root as
|
Added marketplace ecc and recorded the installed marketplace root as
|
||||||
<local-checkout> without touching the real Codex config.
|
<local-checkout> without touching the real Codex config.
|
||||||
|
|
||||||
|
HOME="$(mktemp -d)" codex plugin marketplace add affaan-m/everything-claude-code --ref "$(git rev-parse HEAD)"
|
||||||
|
Added marketplace ecc from the GitHub repo pinned to
|
||||||
|
67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b without touching the real Codex
|
||||||
|
config.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
This dashboard is generated by `npm run operator:dashboard`. It is an operator snapshot, not release approval.
|
This dashboard is generated by `npm run operator:dashboard`. It is an operator snapshot, not release approval.
|
||||||
|
|
||||||
Generated: 2026-05-18T04:36:06.644Z
|
Generated: 2026-05-18T20:25:22.649Z
|
||||||
Commit: c276639bc7571bb7624b5917dfdb8a7735531714
|
Commit: 4470e2e6702f17099d6feb137ba03ff00582c202
|
||||||
Status: work remaining
|
Status: work remaining
|
||||||
|
|
||||||
## Current Status
|
## Current Status
|
||||||
@@ -13,7 +13,7 @@ Status: work remaining
|
|||||||
| PR queue | Current | 0 open PRs across tracked repos |
|
| PR queue | Current | 0 open PRs across tracked repos |
|
||||||
| Issue queue | Current | 0 open issues across tracked repos |
|
| Issue queue | Current | 0 open issues across tracked repos |
|
||||||
| Discussions | Current | 0 need maintainer touch; 0 missing accepted answer |
|
| Discussions | Current | 0 need maintainer touch; 0 missing accepted answer |
|
||||||
| Local worktree | Current | 0 blocking dirty files; 1 ignored dirty entries |
|
| Local worktree | Current | 0 blocking dirty files; 0 ignored dirty entries |
|
||||||
| Dashboard generation | Current | platform audit ready: true; GitHub skipped: false |
|
| Dashboard generation | Current | platform audit ready: true; GitHub skipped: false |
|
||||||
| Publication | Not complete | release, npm, plugin, billing, and announcement gates are tracked below |
|
| Publication | Not complete | release, npm, plugin, billing, and announcement gates are tracked below |
|
||||||
|
|
||||||
@@ -21,16 +21,16 @@ Status: work remaining
|
|||||||
|
|
||||||
| Objective requirement | Artifact or gate | Status | Evidence | Gap |
|
| Objective requirement | Artifact or gate | Status | Evidence | Gap |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| Keep public PRs below 20 | scripts/platform-audit.js live GitHub sweep | current | 0 open PRs across 5 tracked repos | repeat before release |
|
| Keep public PRs below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open PRs across 5 tracked repos; 0 owner-wide open PRs after cleanup | repeat platform:audit and owner-wide gh search before release |
|
||||||
| Keep public issues below 20 | scripts/platform-audit.js live GitHub sweep | current | 0 open issues across 5 tracked repos | repeat before release |
|
| Keep public issues below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open issues across 5 tracked repos; 0 owner-wide open issues after cleanup | repeat platform:audit and owner-wide gh search before release |
|
||||||
| Respond and manage repository discussions | scripts/platform-audit.js discussion summary | current | 0 need maintainer touch; 0 answerable discussions missing accepted answer | repeat before release |
|
| Respond and manage repository discussions | scripts/platform-audit.js discussion summary | current | 0 need maintainer touch; 0 answerable discussions missing accepted answer | repeat before release |
|
||||||
| Build ITO-44 completion dashboard into a repeatable command | npm run operator:dashboard | complete | operator:dashboard package script exists | keep generated dashboard attached to publication evidence |
|
| Build ITO-44 completion dashboard into a repeatable command | npm run operator:dashboard | complete | operator:dashboard package script exists | keep generated dashboard attached to publication evidence |
|
||||||
| ECC 2.0 preview pack ready | docs/releases/2.0.0-rc.1/preview-pack-manifest.md | current | preview pack manifest and deterministic smoke gate are in-tree | repeat clean-checkout preview-pack smoke before publication |
|
| ECC 2.0 preview pack ready | docs/releases/2.0.0-rc.1/preview-pack-manifest.md | current | preview pack manifest and deterministic smoke gate are in-tree | repeat clean-checkout preview-pack smoke before publication |
|
||||||
| Include Hermes specialized skills safely | docs/HERMES-SETUP.md and skills/hermes-imports/SKILL.md | current | Hermes setup/import artifacts are covered by preview-pack smoke | repeat preview-pack smoke before release review |
|
| Include Hermes specialized skills safely | docs/HERMES-SETUP.md and skills/hermes-imports/SKILL.md | current | Hermes setup/import artifacts are covered by preview-pack smoke | repeat preview-pack smoke before release review |
|
||||||
| Prepare name-change, Claude plugin, and Codex plugin paths | naming-and-publication-matrix plus publication-readiness | in_progress | naming matrix and plugin readiness gates exist | real tag/push, marketplace submission, and final channel choice remain approval-gated |
|
| Prepare name-change, Claude plugin, and Codex plugin paths | naming-and-publication-matrix plus release-name-plugin-publication checklist plus publication-readiness | in_progress | naming matrix, release publication checklist, and plugin readiness gates exist | real tag/push, marketplace submission, and final channel choice remain approval-gated |
|
||||||
| Prepare release notes, articles, tweets, and push notifications | docs/releases/2.0.0-rc.1 social and release-copy files | in_progress | release notes, X thread, LinkedIn draft, and URL ledger are present | final live release/npm/plugin/billing URLs and publish approval still pending |
|
| Prepare release notes, articles, tweets, and push notifications | docs/releases/2.0.0-rc.1 social and release-copy files | in_progress | release notes, X thread, LinkedIn draft, and URL ledger are present | final live release/npm/plugin/billing URLs and publish approval still pending |
|
||||||
| Advance AgentShield enterprise iteration | AgentShield PR evidence plus enterprise roadmap | in_progress | AgentShield policy promotion `reviewItems` landed in `87aec47`; package-manager hardening drift detection landed in `28d08c7`; workflow action runtime pins were refreshed in `659f569`; npm age-gate guidance was corrected in `ee585cd`; package-manager hardening Action outputs landed in `1124535`; policy-promotion Action outputs and runtime-smoke job-summary evidence landed in `1593925`; ECC-Tools consumes those outputs in `8658951`, surfaces operator-readable status/pack/count/digest telemetry in `16c537f`, and renders hosted promotion judge audit traces in `05d4e82`; all are mirrored in the GA roadmap | deepen live operator approval/readback after Marketplace/payment gates |
|
| Advance AgentShield enterprise iteration | AgentShield PR evidence plus enterprise roadmap | in_progress | AgentShield policy promotion `reviewItems` landed in `87aec47`; package-manager hardening drift detection landed in `28d08c7`; workflow action runtime pins were refreshed in `659f569`; npm age-gate guidance was corrected in `ee585cd`; package-manager hardening Action outputs landed in `1124535`; policy-promotion Action outputs and runtime-smoke job-summary evidence landed in `1593925`; fleet review ticket payloads and current Mini Shai-Hulud IOC breadcrumbs landed in `840952a`; ECC-Tools consumes those outputs in `8658951`, surfaces operator-readable status/pack/count/digest telemetry in `16c537f`, and renders hosted promotion judge audit traces in `05d4e82`; all are mirrored in the GA roadmap | deepen live operator approval/readback after Marketplace/payment gates |
|
||||||
| Advance ECC Tools native payments and AI-native harness-agnostic app | ECC Tools PR evidence, billing gate, hosted analysis lanes | in_progress | billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, and provenance-aware Marketplace billing-state gates are mirrored in the GA roadmap | replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate |
|
| Advance ECC Tools native payments and AI-native harness-agnostic app | ECC Tools PR evidence, billing gate, hosted analysis lanes | in_progress | billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, target-account billing readback, provenance-aware Marketplace billing-state gates, sanitized Marketplace plan/action provenance counts, hosted team-learning feedback controls, and ECC-Tools Dependabot alert remediation are mirrored in the GA roadmap | create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate |
|
||||||
| Audit, prune, or attach legacy work | docs/stale-pr-salvage-ledger.md and legacy inventory | current | legacy salvage ledger and inventory are current; all localization tails are attached to Linear ITO-55 for manual language-owner review | repeat legacy scan before release |
|
| Audit, prune, or attach legacy work | docs/stale-pr-salvage-ledger.md and legacy inventory | current | legacy salvage ledger and inventory are current; all localization tails are attached to Linear ITO-55 for manual language-owner review | repeat legacy scan before release |
|
||||||
| Keep Linear roadmap detailed and progress tracking synchronized | Linear project mirror plus progress-sync contract | current | Linear live sync and project progress surface are current; progress-sync contract defines the file-backed work-items/status path | repeat Linear/project status update and local work-items sync after each significant merge batch |
|
| Keep Linear roadmap detailed and progress tracking synchronized | Linear project mirror plus progress-sync contract | current | Linear live sync and project progress surface are current; progress-sync contract defines the file-backed work-items/status path | repeat Linear/project status update and local work-items sync after each significant merge batch |
|
||||||
| Provide ECC 2.0 observability for self-use | observability readiness gate | complete | observability:ready command and readiness doc exist | runtime/dashboard implementation can continue after release gates |
|
| Provide ECC 2.0 observability for self-use | observability readiness gate | complete | observability:ready command and readiness doc exist | runtime/dashboard implementation can continue after release gates |
|
||||||
@@ -41,11 +41,11 @@ Status: work remaining
|
|||||||
- `naming-and-plugin-publication`: real tag/push, marketplace submission, and final channel choice remain approval-gated
|
- `naming-and-plugin-publication`: real tag/push, marketplace submission, and final channel choice remain approval-gated
|
||||||
- `release-notes-and-notifications`: final live release/npm/plugin/billing URLs and publish approval still pending
|
- `release-notes-and-notifications`: final live release/npm/plugin/billing URLs and publish approval still pending
|
||||||
- `agentshield-enterprise-iteration`: deepen live operator approval/readback after Marketplace/payment gates
|
- `agentshield-enterprise-iteration`: deepen live operator approval/readback after Marketplace/payment gates
|
||||||
- `ecc-tools-next-level`: replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate
|
- `ecc-tools-next-level`: create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate
|
||||||
|
|
||||||
## Next Work Order
|
## Next Work Order
|
||||||
|
|
||||||
1. Regenerate this dashboard from the final release commit before publication evidence is recorded.
|
1. Regenerate this dashboard from the final release commit before publication evidence is recorded.
|
||||||
2. Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.
|
2. Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.
|
||||||
3. Replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate before publishing native-payments copy.
|
3. Create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate before publishing native-payments copy.
|
||||||
4. Resume ITO-45, ITO-46, and ITO-56 only after the generated dashboard and final release gates are refreshed.
|
4. Resume ITO-45, ITO-46, and ITO-56 only after the generated dashboard and final release gates are refreshed.
|
||||||
|
|||||||
65
docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md
Normal file
65
docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Owner-Wide Queue Cleanup - 2026-05-18
|
||||||
|
|
||||||
|
This note records the live GitHub queue cleanup outside the five ECC release
|
||||||
|
repos tracked by `scripts/platform-audit.js`.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh search prs --owner affaan-m --state open --json repository,number,title,url,author,updatedAt --limit 100
|
||||||
|
gh search issues --owner affaan-m --state open --json repository,number,title,url,updatedAt --limit 100
|
||||||
|
```
|
||||||
|
|
||||||
|
## Result
|
||||||
|
|
||||||
|
- Owner-wide open PRs after cleanup: 0.
|
||||||
|
- Owner-wide open issues after cleanup: 0.
|
||||||
|
- Stale dependency-bot PRs closed: 24.
|
||||||
|
- Stale legacy payments/0EM roadmap issues closed: 72.
|
||||||
|
- Final stale/generated/manual-review PRs closed: 9.
|
||||||
|
- Final legacy/outreach/placeholder issues closed: 5.
|
||||||
|
- Archived repos temporarily unarchived for stale dependency PR closure and
|
||||||
|
restored to archived state:
|
||||||
|
`affaan-m/stoictradingAI`, `affaan-m/dprc-autotrader-v2`,
|
||||||
|
`affaan-m/polycule-secure`, and `affaan-m/pragmAItism_defAInce`.
|
||||||
|
- The final archived-repo sweep temporarily unarchived and restored
|
||||||
|
`affaan-m/dprc-autotrader-v2` and `affaan-m/stoictradingAI`.
|
||||||
|
|
||||||
|
## Final PR Disposition
|
||||||
|
|
||||||
|
- `affaan-m/dprc-autotrader-v2#5`: closed stale generated ECC bundle with
|
||||||
|
failing checks and dependency-update base.
|
||||||
|
- `affaan-m/x-algorithm-score#2`: closed stale/conflicting external feature
|
||||||
|
PR with accidental local AI-tool directories noted in the PR body.
|
||||||
|
- `affaan-m/dexploy#28`: closed stale generated ECC skill PR with requested
|
||||||
|
changes.
|
||||||
|
- `affaan-m/zenith#5`: closed stale generated ECC skill PR.
|
||||||
|
- `affaan-m/zenith#4`: closed test/noise PR whose diff only added a
|
||||||
|
non-actionable script comment.
|
||||||
|
- `affaan-m/affaan-m#1`: closed stale/conflicting third-party README-card PR.
|
||||||
|
- `affaan-m/affaanmustafa.com#1`: closed stale Cloudflare Worker-name PR with
|
||||||
|
requested changes.
|
||||||
|
- `affaan-m/0em-payments-dashboard#11`: closed stale/conflicting Cloudflare
|
||||||
|
Worker-name PR.
|
||||||
|
- `affaan-m/0em-payments-dashboard#3`: closed stale/conflicting Cloudflare
|
||||||
|
Worker-name PR.
|
||||||
|
|
||||||
|
## Final Issue Disposition
|
||||||
|
|
||||||
|
- `affaan-m/dprc-autotrader-v2#3`: closed public integration pitch as not
|
||||||
|
planned for the archived repo.
|
||||||
|
- `affaan-m/stoictradingAI#20`: closed public outreach question as not planned
|
||||||
|
for the archived repo.
|
||||||
|
- `affaan-m/dexploy#27`: closed stale internal skill-creator test issue.
|
||||||
|
- `affaan-m/dexploy#25`: preserved useful deployment/localStorage and
|
||||||
|
Cloudflare findings in Linear `ITO-62`, then closed the stale GitHub issue.
|
||||||
|
- `affaan-m/telegram-mcp-ts#1`: closed stale empty placeholder issue.
|
||||||
|
|
||||||
|
## Disposition
|
||||||
|
|
||||||
|
The closed dependency PRs were stale generated version bumps and should be
|
||||||
|
regenerated from current bases if still needed. The closed generated ECC bundle
|
||||||
|
PRs should be regenerated from the current ECC Tools flow if those repositories
|
||||||
|
become active again. The closed legacy payments/0EM issues were old planning
|
||||||
|
items superseded by the ECC Tools native-payments, hosted analysis,
|
||||||
|
billing-readback, and Linear/project roadmap lanes.
|
||||||
@@ -15,7 +15,7 @@ surfaces, or posting announcements.
|
|||||||
| `docs/architecture/cross-harness.md` | Shared substrate model for Claude Code, Codex, OpenCode, Cursor, Gemini, Hermes, and terminal-only use | Names portability boundaries and does not claim unsupported native parity |
|
| `docs/architecture/cross-harness.md` | Shared substrate model for Claude Code, Codex, OpenCode, Cursor, Gemini, Hermes, and terminal-only use | Names portability boundaries and does not claim unsupported native parity |
|
||||||
| `docs/architecture/harness-adapter-compliance.md` | Adapter matrix and scorecard | Verified by `npm run harness:adapters -- --check` |
|
| `docs/architecture/harness-adapter-compliance.md` | Adapter matrix and scorecard | Verified by `npm run harness:adapters -- --check` |
|
||||||
| `docs/architecture/observability-readiness.md` | Local operator-readiness gate | Verified by `npm run observability:ready` |
|
| `docs/architecture/observability-readiness.md` | Local operator-readiness gate | Verified by `npm run observability:ready` |
|
||||||
| `docs/architecture/progress-sync-contract.md` | GitHub, Linear, handoff, roadmap, and work-item sync boundary | Checked by `node scripts/platform-audit.js --format json --allow-untracked docs/drafts/` |
|
| `docs/architecture/progress-sync-contract.md` | GitHub, Linear, handoff, roadmap, and work-item sync boundary | Checked by `node scripts/platform-audit.js --json` |
|
||||||
| `scripts/preview-pack-smoke.js` | Deterministic preview-pack smoke gate | Verified by `npm run preview-pack:smoke` |
|
| `scripts/preview-pack-smoke.js` | Deterministic preview-pack smoke gate | Verified by `npm run preview-pack:smoke` |
|
||||||
| `docs/releases/2.0.0-rc.1/release-notes.md` | GitHub release copy source | Must be refreshed with final live release/package/plugin URLs before publication |
|
| `docs/releases/2.0.0-rc.1/release-notes.md` | GitHub release copy source | Must be refreshed with final live release/package/plugin URLs before publication |
|
||||||
| `docs/releases/2.0.0-rc.1/quickstart.md` | Clone-to-first-workflow path | Covers clone, install, verify, first skill, and harness switch |
|
| `docs/releases/2.0.0-rc.1/quickstart.md` | Clone-to-first-workflow path | Covers clone, install, verify, first skill, and harness switch |
|
||||||
@@ -24,11 +24,12 @@ surfaces, or posting announcements.
|
|||||||
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-15.md` | Current May 15 queue, roadmap, security, supply-chain watch, no-lifecycle CI install hardening, AgentShield #86 evidence-pack provenance, ECC Tools billing-gate, Actions cache purge, and `ecc2` test evidence through PR #1941 | Must be superseded by a final clean-checkout evidence file before real publication |
|
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-15.md` | Current May 15 queue, roadmap, security, supply-chain watch, no-lifecycle CI install hardening, AgentShield #86 evidence-pack provenance, ECC Tools billing-gate, Actions cache purge, and `ecc2` test evidence through PR #1941 | Must be superseded by a final clean-checkout evidence file before real publication |
|
||||||
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-16.md` | Current May 16/17 queue cleanup, recsys skill merge, GateGuard triage, PR #1947 supply-chain protection, AgentShield #87 plugin-cache confidence evidence, AgentShield #88 evidence-pack inspect/readback, AgentShield #89 evidence-pack fleet routing, AgentShield #90 fleet review items, AgentShield #91 policy export, AgentShield #92 policy promotion, ECC-Tools #76 fleet-summary consumption, ECC-Tools #77 hosted finding evidence paths, ECC-Tools #78 harness policy-route linking, dashboard refresh, and combined Node/Rust/release-surface gate evidence through the May 16 mirror | Must still be repeated from a strict clean checkout before real publication |
|
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-16.md` | Current May 16/17 queue cleanup, recsys skill merge, GateGuard triage, PR #1947 supply-chain protection, AgentShield #87 plugin-cache confidence evidence, AgentShield #88 evidence-pack inspect/readback, AgentShield #89 evidence-pack fleet routing, AgentShield #90 fleet review items, AgentShield #91 policy export, AgentShield #92 policy promotion, ECC-Tools #76 fleet-summary consumption, ECC-Tools #77 hosted finding evidence paths, ECC-Tools #78 harness policy-route linking, dashboard refresh, and combined Node/Rust/release-surface gate evidence through the May 16 mirror | Must still be repeated from a strict clean checkout before real publication |
|
||||||
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-17.md` | May 17 queue-zero state, Japanese localization merge, Dependabot TypeScript and Node type merges, post-merge ja-JP lint repair, Mini Shai-Hulud/TanStack protection recheck, npm audit/signature checks, legacy and Linear progress routing, deterministic preview-pack smoke, operator dashboard refresh, Linear sync, and GitHub CI evidence for `27dc2918` | Superseded by the May 18 evidence snapshot; repeat from a strict clean checkout before real publication |
|
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-17.md` | May 17 queue-zero state, Japanese localization merge, Dependabot TypeScript and Node type merges, post-merge ja-JP lint repair, Mini Shai-Hulud/TanStack protection recheck, npm audit/signature checks, legacy and Linear progress routing, deterministic preview-pack smoke, operator dashboard refresh, Linear sync, and GitHub CI evidence for `27dc2918` | Superseded by the May 18 evidence snapshot; repeat from a strict clean checkout before real publication |
|
||||||
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` | Current May 18 queue-zero state, #1970/#1971/#1972 merge batch, current-head Mini Shai-Hulud/TanStack protection recheck, no-lifecycle install, npm audit/signature checks, AgentShield project `.claude` scan, work-items sync, Linear sync, operator dashboard refresh, and Supply-Chain Watch success for `3b7e0ba3` | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication |
|
| `docs/releases/2.0.0-rc.1/publication-evidence-2026-05-18.md` | Current May 18 queue-zero state, #1970/#1971/#1972 merge batch, #1978 review/closure, current-head Mini Shai-Hulud/TanStack protection recheck, no-lifecycle install, npm audit/signature checks, AgentShield `840952a` enterprise/IOC evidence mirror, work-items sync, Linear sync, operator dashboard refresh, latest current-head CI/security scan success for `4470e2e6`, and ITO-46 naming/plugin publication closure | Current strongest readiness snapshot; must still be repeated from a strict clean checkout before real publication |
|
||||||
| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-17.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 18 generated dashboard |
|
| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-17.md` | Previous prompt-to-artifact operator dashboard | Superseded by the May 18 generated dashboard |
|
||||||
| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and publication, plugin, billing, AgentShield, ECC Tools, legacy, and Linear productization gaps still open |
|
| `docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Current prompt-to-artifact operator dashboard | Shows PR/issue/discussion/platform/supply-chain gates current and publication, plugin, billing, AgentShield, ECC Tools, legacy, and Linear productization gaps still open |
|
||||||
| `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md` | Live URL and approval-gated URL ledger for release copy | Must be regenerated from the final release commit before public announcements |
|
| `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md` | Live URL and approval-gated URL ledger for release copy | Must be regenerated from the final release commit before public announcements |
|
||||||
| `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` | Naming, slug, and publication-path decision record | Keeps `Everything Claude Code / ECC`, npm `ecc-universal`, and plugin slug `ecc` for rc.1 |
|
| `docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md` | Naming, slug, and publication-path decision record | Keeps `Everything Claude Code / ECC`, npm `ecc-universal`, and plugin slug `ecc` for rc.1 |
|
||||||
|
| `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md` | Release name, package, Claude plugin, Codex plugin, and publication-order checklist | Freezes rc.1 identity and requires final commit evidence before release, npm, plugin, billing, or announcement actions |
|
||||||
| `docs/releases/2.0.0-rc.1/x-thread.md` | X launch draft | Must replace placeholders with live URLs after release/package/plugin publication |
|
| `docs/releases/2.0.0-rc.1/x-thread.md` | X launch draft | Must replace placeholders with live URLs after release/package/plugin publication |
|
||||||
| `docs/releases/2.0.0-rc.1/linkedin-post.md` | LinkedIn launch draft | Must replace placeholders with live URLs after release/package/plugin publication |
|
| `docs/releases/2.0.0-rc.1/linkedin-post.md` | LinkedIn launch draft | Must replace placeholders with live URLs after release/package/plugin publication |
|
||||||
| `docs/releases/2.0.0-rc.1/article-outline.md` | Longform launch outline | Must stay release-candidate framed until GA evidence exists |
|
| `docs/releases/2.0.0-rc.1/article-outline.md` | Longform launch outline | Must stay release-candidate framed until GA evidence exists |
|
||||||
@@ -72,7 +73,7 @@ Run these from the exact release commit before publication:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
git status --short --branch
|
git status --short --branch
|
||||||
node scripts/platform-audit.js --format json --allow-untracked docs/drafts/
|
node scripts/platform-audit.js --json
|
||||||
npm run preview-pack:smoke
|
npm run preview-pack:smoke
|
||||||
npm run harness:adapters -- --check
|
npm run harness:adapters -- --check
|
||||||
npm run harness:audit -- --format json
|
npm run harness:audit -- --format json
|
||||||
@@ -91,6 +92,8 @@ The preview pack is assembled, but publication is still blocked until these live
|
|||||||
surfaces exist and are recorded in a final evidence file:
|
surfaces exist and are recorded in a final evidence file:
|
||||||
|
|
||||||
- final release URL ledger regenerated from the intended release commit;
|
- final release URL ledger regenerated from the intended release commit;
|
||||||
|
- final release name/plugin publication checklist rerun from the intended
|
||||||
|
release commit;
|
||||||
- GitHub prerelease `v2.0.0-rc.1`;
|
- GitHub prerelease `v2.0.0-rc.1`;
|
||||||
- npm `ecc-universal@2.0.0-rc.1` on the `next` dist-tag;
|
- npm `ecc-universal@2.0.0-rc.1` on the `next` dist-tag;
|
||||||
- Claude plugin tag / marketplace propagation for `ecc@ecc`;
|
- Claude plugin tag / marketplace propagation for `ecc@ecc`;
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ npm publication, plugin tag, marketplace submission, or announcement post.
|
|||||||
|
|
||||||
| Field | Evidence |
|
| Field | Evidence |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Upstream main | `81fca2cea6f1399c52c8faa70f9a17e42f0bd447` |
|
| Upstream main | `4470e2e6702f17099d6feb137ba03ff00582c202` |
|
||||||
| Git remote | `https://github.com/affaan-m/everything-claude-code.git` |
|
| Git remote | `https://github.com/affaan-m/everything-claude-code.git` |
|
||||||
| Evidence scope | Current `main` after PR #1970 workflow-security validator bypass fixes, PR #1971 metrics bridge cost-reporting fixes, PR #1972 `uncloud` skill merge, PR #1973 stale script cleanup, issue #1974 cost-reporting verification/closure, catalog/operator dashboard refresh, Mini Shai-Hulud/TanStack protection recheck, current-head CI/security scan, work-items sync, and Linear progress sync |
|
| Evidence scope | Current `main` after PR #1970 workflow-security validator bypass fixes, PR #1971 metrics bridge cost-reporting fixes, PR #1972 `uncloud` skill merge, PR #1973 stale script cleanup, issue #1974 cost-reporting verification/closure, PR #1976 OpenAI/AstraFlow provider response guards, PR #1978 review/closure, catalog/operator dashboard refresh, ECC-Tools Wrangler OAuth billing readback mirror, AgentShield `840952a` fleet-ticket and Mini Shai-Hulud IOC evidence mirror, Mini Shai-Hulud/TanStack protection recheck, defensive-deny IOC scanner hardening, release name/plugin publication checklist, readiness/smoke gate enforcement for that checklist, release OIDC publishing-scope hardening, workflow line-ending normalization, current-head CI/security scan, work-items sync, Linear progress sync, the ITO-46 publication-path dry-run refresh, ITO-46 Linear closure, and the post-closure operator dashboard refresh |
|
||||||
| Local status caveat | `git status --short --branch` showed `## main...origin/main` plus unrelated untracked `docs/drafts/`; generated evidence files are committed after the source snapshot they describe |
|
| Local status caveat | `git status --short --branch` was clean at dashboard generation time; generated evidence files are committed after the source snapshot they describe |
|
||||||
|
|
||||||
The actual release operator should repeat all publish-facing checks from the
|
The actual release operator should repeat all publish-facing checks from the
|
||||||
final release commit with a strictly clean checkout before publishing.
|
final release commit with a strictly clean checkout before publishing.
|
||||||
@@ -24,7 +24,7 @@ final release commit with a strictly clean checkout before publishing.
|
|||||||
| Discussion audit | `npm run discussion:audit -- --json` | Ready; 58 sampled discussions in `affaan-m/everything-claude-code`, 0 needing maintainer touch, 0 answerable discussions missing accepted answer, and 0 fetch errors |
|
| Discussion audit | `npm run discussion:audit -- --json` | Ready; 58 sampled discussions in `affaan-m/everything-claude-code`, 0 needing maintainer touch, 0 answerable discussions missing accepted answer, and 0 fetch errors |
|
||||||
| Platform audit | `node scripts/platform-audit.js --json --allow-untracked docs/drafts/` | Ready; tracked repos report 0 open PRs, 0 open issues, 0 discussion maintainer-touch gaps, 0 answerable Q&A missing accepted answers, and 0 blocking dirty files |
|
| Platform audit | `node scripts/platform-audit.js --json --allow-untracked docs/drafts/` | Ready; tracked repos report 0 open PRs, 0 open issues, 0 discussion maintainer-touch gaps, 0 answerable Q&A missing accepted answers, and 0 blocking dirty files |
|
||||||
| Work-items sync | `node scripts/work-items.js sync-github --repo <tracked-repo>` for five tracked repos; `node scripts/status.js --json`; `node scripts/work-items.js list --json` | All five tracked repos synced with 0 open PRs/issues and no changed work items; local status reports 0 open, 0 blocked, and 0 closed work items |
|
| Work-items sync | `node scripts/work-items.js sync-github --repo <tracked-repo>` for five tracked repos; `node scripts/status.js --json`; `node scripts/work-items.js list --json` | All five tracked repos synced with 0 open PRs/issues and no changed work items; local status reports 0 open, 0 blocked, and 0 closed work items |
|
||||||
| Operator dashboard | `node scripts/operator-readiness-dashboard.js --markdown --allow-untracked docs/drafts/ --write docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Generated current dashboard for `81fca2cea6f1399c52c8faa70f9a17e42f0bd447`; dashboard ready true, publication ready false because release, npm, plugin, billing, and announcement gates are approval-gated |
|
| Operator dashboard | `npm run operator:dashboard -- --markdown --write docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md` | Regenerated at `4470e2e6702f17099d6feb137ba03ff00582c202`; dashboard ready true, publication ready false because release, npm, plugin, billing, and announcement gates are approval-gated; 0 PRs, 0 issues, and 0 discussion gaps remain across tracked repos; AgentShield enterprise evidence includes `840952a`; ECC Tools native-payments gate now names the narrowed ITO-61 blocker: create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and `INTERNAL_API_SECRET`, then rerun target readback and the live announcement gate |
|
||||||
|
|
||||||
Tracked repositories in the platform audit and work-items sync were:
|
Tracked repositories in the platform audit and work-items sync were:
|
||||||
|
|
||||||
@@ -44,7 +44,19 @@ Tracked repositories in the platform audit and work-items sync were:
|
|||||||
| PR #1973 | Merged stale `skills/strategic-compact/suggest-compact.sh` removal after confirming the active hook is `scripts/hooks/suggest-compact.js`; remote main includes `812d4d06` |
|
| PR #1973 | Merged stale `skills/strategic-compact/suggest-compact.sh` removal after confirming the active hook is `scripts/hooks/suggest-compact.js`; remote main includes `812d4d06` |
|
||||||
| Issue #1974 | Closed after verifying current `origin/main` already reads the latest cumulative metrics bridge cost row and focused cost/metrics tests pass |
|
| Issue #1974 | Closed after verifying current `origin/main` already reads the latest cumulative metrics bridge cost row and focused cost/metrics tests pass |
|
||||||
| Catalog/operator refresh | Pushed `81fca2ce` to refresh generated catalog count, URL ledger, and operator dashboard state after #1973/#1974 |
|
| Catalog/operator refresh | Pushed `81fca2ce` to refresh generated catalog count, URL ledger, and operator dashboard state after #1973/#1974 |
|
||||||
|
| PR #1976 | Merged provider response hardening for OpenAI-compatible and AstraFlow providers; main includes `eb0d8939` follow-up guards for empty/filtered provider choices, missing OpenAI `response.usage`, shared filtered-response error text, and credential-less provider construction validation |
|
||||||
|
| Provider guard validation | `uv run --extra dev pytest -q tests/test_provider_tools.py tests/test_astraflow_provider.py`, `uv run --extra dev pytest -q`, `node tests/run-all.js`, and `git diff --check` passed before merging #1976 follow-up into main: 11 provider-focused Python tests, 76 full Python tests, 2509 Node tests, and clean whitespace checks |
|
||||||
|
| Defensive-deny IOC scanner hardening | Pushed `04d4d819` so explicit Claude `permissions.deny` IOC entries are treated as defensive controls while the same IOC still fails in hooks, tasks, scripts, locks, and payload files; local `npm test` passed 2511/2511 and current-head CI `26017368895` passed 37/37 |
|
||||||
|
| Release name/plugin publication checklist | Pushed `6c0fbfb6` to add `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md`; the artifact freezes rc.1 as Everything Claude Code / ECC, keeps npm `ecc-universal`, keeps Claude/Codex plugin slug `ecc`, cites current Anthropic/OpenAI plugin publication paths, and blocks rename/npm publish/plugin tag/submission/billing/social actions until final release evidence exists; GitHub Actions CI `26034898420` passed |
|
||||||
|
| Dashboard and preview-pack checklist enforcement | Added `680aeff0` so `scripts/operator-readiness-dashboard.js` and `scripts/preview-pack-smoke.js` require the release-name/plugin publication checklist; local dashboard and smoke tests passed and preview-pack smoke now enforces 26 required artifacts |
|
||||||
|
| AgentShield enterprise evidence mirror | Added `2ba0c62d` and refreshed the dashboard generator/GA roadmap/AgentShield enterprise roadmap so the ECC release evidence names AgentShield `840952a` fleet review ticket payloads and current Mini Shai-Hulud IOC breadcrumb coverage |
|
||||||
|
| PR #1978 | Closed broad/failing outside Excel harness PR after review; recorded a corrected split path for a future smaller Excel harness proposal, install-target/tooling PR, plugin-runtime PR, and translation-automation PR |
|
||||||
|
| Announcement draft tracking | Added `docs/drafts/release-1.10.1-announcement.md` so the stabilization announcement draft is tracked instead of remaining as release-blocking untracked local state |
|
||||||
|
| Clean-worktree preview-pack smoke | Detached worktree at `680aeff0fb9a8598858e3105ba4742973ef386ab`; `node scripts/preview-pack-smoke.js --root <worktree> --format json` passed 5/5 with digest `0ed831dbd0cf`; 26 required artifacts, final verification commands, Hermes public sanitization boundary, and approval-gated publication blockers were all preserved |
|
||||||
| Public queues | Rechecked after the merge and issue-closure batch; 0 PRs, 0 issues, and 0 discussion gaps remain across tracked repos |
|
| Public queues | Rechecked after the merge and issue-closure batch; 0 PRs, 0 issues, and 0 discussion gaps remain across tracked repos |
|
||||||
|
| Release OIDC publishing scope | Pushed `7911af4a` to keep the release workflow's trusted-publishing path scoped to release publication instead of broadening OIDC permissions across unrelated jobs; local workflow security validation passed |
|
||||||
|
| Release workflow normalization | Pushed `97567a91` to normalize release workflow line endings after the OIDC hardening slice; current-head CI `26050727969` passed for `97567a91e79e1ee4c291eb78f5f9c30c2046ac94` |
|
||||||
|
| Operator readiness evidence refresh | Pushed `0f1775e3`, `fe7b4f2b`, and `67e63e63` to refresh blocker evidence, regenerate the operator dashboard, and align publication readiness to the latest CI/security evidence; pushed `4470e2e6` to close ITO-46 publication-path evidence, then regenerated the dashboard at `4470e2e6702f17099d6feb137ba03ff00582c202`; current-head CI `26057806361` passed for `4470e2e6702f17099d6feb137ba03ff00582c202` |
|
||||||
|
|
||||||
## Supply-Chain And Security Evidence
|
## Supply-Chain And Security Evidence
|
||||||
|
|
||||||
@@ -52,23 +64,46 @@ Tracked repositories in the platform audit and work-items sync were:
|
|||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| Repo IOC scan | `npm run security:ioc-scan` | Passed; 198 files inspected |
|
| Repo IOC scan | `npm run security:ioc-scan` | Passed; 198 files inspected |
|
||||||
| Home persistence IOC scan | `node scripts/ci/scan-supply-chain-iocs.js --home --json` | Passed; 200 files inspected; `findings: []` |
|
| Home persistence IOC scan | `node scripts/ci/scan-supply-chain-iocs.js --home --json` | Passed; 200 files inspected; `findings: []` |
|
||||||
|
| ECC workspace IOC recheck | `node scripts/ci/scan-supply-chain-iocs.js --root <local ECC root> --home --json` | Passed; 1212 files inspected; `findings: []`; exact local path is kept out of public release evidence |
|
||||||
| Narrow active persistence sweep | Targeted search over user-level Claude, VS Code, LaunchAgent/systemd, local-bin, `/tmp`, and `/private/tmp` campaign paths | Existing active targets: 2; no campaign marker hits |
|
| Narrow active persistence sweep | Targeted search over user-level Claude, VS Code, LaunchAgent/systemd, local-bin, `/tmp`, and `/private/tmp` campaign paths | Existing active targets: 2; no campaign marker hits |
|
||||||
| Scanner fixture tests | `node tests/ci/scan-supply-chain-iocs.test.js` | 18 passed, 0 failed |
|
| Scanner fixture tests | `node tests/ci/scan-supply-chain-iocs.test.js` | 20 passed, 0 failed, including defensive Claude deny-wall pass and hook-with-same-IOC fail-closed coverage |
|
||||||
| Advisory source refresh | `node scripts/ci/supply-chain-advisory-sources.js --refresh --json` | Ready with 9 sources; live refresh produced 1 OpenAI URL warning from Node fetch while primary TanStack, GitHub advisory, StepSecurity, Wiz, Socket, npm, and CISA sources returned OK |
|
| Advisory source refresh | `node scripts/ci/supply-chain-advisory-sources.js --refresh --json` | Ready with 9 sources; live refresh produced 1 OpenAI URL warning from Node fetch while primary TanStack, GitHub advisory, StepSecurity, Wiz, Socket, npm, and CISA sources returned OK |
|
||||||
| No-lifecycle install | `npm ci --ignore-scripts` | Completed cleanly; 213 packages installed, 0 vulnerabilities |
|
| No-lifecycle install | `npm ci --ignore-scripts` | Completed cleanly; 213 packages installed, 0 vulnerabilities |
|
||||||
| npm audit | `npm audit --audit-level=high` | 0 vulnerabilities |
|
| npm audit | `npm audit --audit-level=high` | 0 vulnerabilities |
|
||||||
| npm signatures | `npm audit signatures` | 213 verified registry signatures; 17 verified attestations |
|
| npm signatures | `npm audit signatures` | 213 verified registry signatures; 17 verified attestations |
|
||||||
| Workflow security | `node scripts/ci/validate-workflow-security.js` | Validated 8 workflow files |
|
| Workflow security | `node scripts/ci/validate-workflow-security.js` | Validated 8 workflow files after the release OIDC publishing-scope hardening |
|
||||||
| AgentShield project scan | `npx --no-install ecc-agentshield scan --format json` | Grade A / 99; 0 critical, 0 high, 0 medium; 6 low docs-example skill telemetry/governance findings |
|
| AgentShield project scan | `npx --no-install ecc-agentshield scan --format json` | Grade A / 99; 0 critical, 0 high, 0 medium; 6 low docs-example skill telemetry/governance findings |
|
||||||
| Current-head CI security scan | `gh run view 26011460500 --repo affaan-m/everything-claude-code --json status,conclusion,jobs,url` | Completed successfully for `81fca2cea6f1399c52c8faa70f9a17e42f0bd447`; 37/37 CI jobs passed, including lint, workflow/component validation, coverage, cross-platform package-manager tests, npm audit, and supply-chain IOC scan |
|
| Current-head CI security scan | `gh run view 26057806361 --repo affaan-m/everything-claude-code --json status,conclusion,headSha,jobs,url` | Completed successfully for `4470e2e6702f17099d6feb137ba03ff00582c202`; 37/37 CI jobs passed, including lint, workflow/component validation, coverage, cross-platform package-manager tests, npm audit, and supply-chain IOC scan |
|
||||||
| Latest Supply-Chain Watch | `gh run view 26010432490 --repo affaan-m/everything-claude-code --json status,conclusion,headSha,url` | Completed successfully for `25ac57ac40e9fc5a0606e76e6339e72c79748c99`; rerun from the final release commit before publication |
|
| Latest Supply-Chain Watch | `gh run view 26010432490 --repo affaan-m/everything-claude-code --json status,conclusion,headSha,url` | Completed successfully for `25ac57ac40e9fc5a0606e76e6339e72c79748c99`; rerun from the final release commit before publication |
|
||||||
|
|
||||||
|
## ITO-46 Publication Path Refresh
|
||||||
|
|
||||||
|
| Gate | Command | Result |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Clean publication-path baseline | `git status --short --branch`; `git rev-parse HEAD`; `git remote get-url origin` | Clean `main` at `67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b`; remote `https://github.com/affaan-m/everything-claude-code.git` |
|
||||||
|
| Package/plugin identity readback | `node -p "JSON.stringify({pkg, claude, codex, opencode}, null, 2)"` | `ecc-universal@2.0.0-rc.1`; Claude plugin `ecc@2.0.0-rc.1`; Codex plugin `ecc@2.0.0-rc.1`; OpenCode package `ecc-universal@2.0.0-rc.1` |
|
||||||
|
| Name availability | `npm view ecc name version description repository.url --json`; `npm view @affaan-m/ecc name version --json`; `npm view ecc-universal name version dist-tags --json` | `ecc` is occupied by unrelated `ecc@0.0.2`; `@affaan-m/ecc` returns 404; `ecc-universal` registry latest remains `1.10.0` with no `next` dist-tag |
|
||||||
|
| Plugin manifest tests | `node tests/plugin-manifest.test.js` | 54 passed, 0 failed |
|
||||||
|
| Release surface tests | `node tests/docs/ecc2-release-surface.test.js` | 21 passed, 0 failed |
|
||||||
|
| Claude plugin validation | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin validate .`; `claude plugin tag .claude-plugin --dry-run` | Claude Code `2.1.143`; manifest validation passed; full plugin validation passed with one expected root `CLAUDE.md` context warning; tag dry run would create `ecc--v2.0.0-rc.1` |
|
||||||
|
| Claude marketplace source help | `claude plugin marketplace add --help`; `claude plugin marketplace update --help` | Marketplace add supports URL, local path, GitHub repo, `--scope`, and `--sparse`; update supports targeted or all-marketplace refresh |
|
||||||
|
| Codex marketplace help | `codex plugin marketplace add --help` | Codex CLI `0.131.0`; marketplace add supports local paths, `owner/repo[@ref]`, HTTPS Git URL, SSH Git URL, `--ref`, and `--sparse` |
|
||||||
|
| Codex local marketplace smoke | `HOME="$(mktemp -d)" codex plugin marketplace add ./` | Added marketplace `ecc` from the local checkout without touching the real Codex config |
|
||||||
|
| Codex GitHub-ref marketplace smoke | `HOME="$(mktemp -d)" codex plugin marketplace add affaan-m/everything-claude-code --ref "$(git rev-parse HEAD)"` | Added marketplace `ecc` from the public GitHub repo pinned to `67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b` without touching the real Codex config |
|
||||||
|
| npm package dry-run | `NPM_CONFIG_USERCONFIG=/dev/null npm pack --dry-run --json`; `NPM_CONFIG_USERCONFIG=/dev/null npm publish --tag next --dry-run` | Pack produced `ecc-universal-2.0.0-rc.1.tgz`, 2228 files, 4,348,504 bytes packed, 13,024,929 bytes unpacked, shasum `29d6a17029d80f5cb1df068880ba86c55a5d60f1`; publish dry-run would publish `ecc-universal@2.0.0-rc.1` with tag `next` |
|
||||||
|
| OpenCode package build | `npm run build:opencode` | Passed |
|
||||||
|
| Preview pack smoke | `npm run preview-pack:smoke` | Ready yes; digest `0ed831dbd0cf`; 5 passed, 0 failed |
|
||||||
|
| Official docs check | Anthropic `https://code.claude.com/docs/en/plugins` and `https://code.claude.com/docs/en/plugin-marketplaces`; OpenAI `https://developers.openai.com/codex/plugins/build` | Anthropic documents self-hosted marketplace sources; OpenAI documents repo/personal marketplaces and the official Plugin Directory. ECC has not created a real release tag, official listing, or npm publication in this pass |
|
||||||
|
| ITO-46 closure | Linear ITO-46 comment `9ef92056-ab23-4eed-bfdb-932dddc2b056`; Linear issue status `Done`; GitHub Actions `26057806361` | Publication-path docs now record every channel, name conflicts, package/plugin dry-run commands, and blocker register; Codex repo-marketplace distribution is verified but official Plugin Directory listing is not claimed before OpenAI submission/listing evidence |
|
||||||
|
|
||||||
## Linear Progress Sync
|
## Linear Progress Sync
|
||||||
|
|
||||||
| Surface | Evidence |
|
| Surface | Evidence |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| ITO-57 issue comment | `0b9931b9-1556-4ebc-a70c-f3635557625d` records May 18 queue counts, #1970/#1971/#1972 merge evidence, supply-chain verification, current-head watch URL, deferred gates, and next slices |
|
| ITO-57 issue comments | `0b9931b9-1556-4ebc-a70c-f3635557625d` records May 18 queue counts, #1970/#1971/#1972/#1976 merge evidence, supply-chain verification, current-head CI URL, deferred gates, and next slices; reply `6fa15367-d994-4e53-ade3-9462477e1100` records the expanded TanStack/Mini Shai-Hulud recheck, defensive-deny scanner fix, current-head CI `26017368895`, and post-push platform audit; comment `3fe5b2b7-c4fe-401c-a317-b40d72119cb3` records the final emergency refresh against `97567a91`, AgentShield `4e36aab`, clean ECC/Ito/Documents workspace IOC scans, absent dead-man/persistence artifacts, and package-manager/Claude deny-wall posture; comment `43837404-c01c-4aaa-b5e2-1e784c136d69` records ECC-Tools `brace-expansion` alert 44 fixed in `e56fc1a` with CI `26054671308` and Dependabot API `state: fixed` |
|
||||||
| ECC platform project comment | `e32e5b7a-287b-4bf4-9ed7-314389a157e1` records the same current public queue, security, and remaining-gate state at the project level |
|
| ITO-52 issue status | `f2e5a208-de91-4a3a-960b-5362d12aa5a4` records ECC-Tools `69ca535` team-learning feedback controls, local verification, and CI `26054455434`; Linear ITO-52 is Done |
|
||||||
|
| ITO-61 issue status | `6904e4fb-bec7-4787-90e2-759f077a628c` records the narrowed native-payments readback blocker: Wrangler OAuth now works, aggregate readback is clean, but there is still no Marketplace-managed Pro target billing-state with webhook provenance and the local announcement preflight is missing the target account plus `INTERNAL_API_SECRET` |
|
||||||
|
| ECC platform project comment | `e32e5b7a-287b-4bf4-9ed7-314389a157e1` records the earlier current public queue, security, #1976, and remaining-gate state at the project level; follow-up ITO-44 comments `a01eeef3-c69b-48c0-8804-a4682acfc1ef` and `6b0885cc-c4e9-40db-899b-f7b88b4aa046` record ITO-52 completion and the fixed ECC-Tools Dependabot alert |
|
||||||
| Project status update caveat | Linear returned "Project status updates are not enabled for this workspace"; project comment was used as the supported status surface |
|
| Project status update caveat | Linear returned "Project status updates are not enabled for this workspace"; project comment was used as the supported status surface |
|
||||||
|
|
||||||
## Current Publication Blockers
|
## Current Publication Blockers
|
||||||
@@ -81,18 +116,35 @@ Tracked repositories in the platform audit and work-items sync were:
|
|||||||
Plugin Directory publishing remains blocked on OpenAI's self-serve publishing
|
Plugin Directory publishing remains blocked on OpenAI's self-serve publishing
|
||||||
surface.
|
surface.
|
||||||
- ECC Tools billing/native-payments copy remains blocked until a Marketplace
|
- ECC Tools billing/native-payments copy remains blocked until a Marketplace
|
||||||
purchase/webhook path writes production `account-billing:*` and
|
Pro purchase/webhook path writes ready production `billing-state:*`
|
||||||
`billing-state:*` records, then `npm run billing:announcement-gate --
|
provenance for the target Marketplace test account, then
|
||||||
--account <github-login>` returns an announcement-ready gate.
|
`npm run billing:kv-readback -- --account <github-login> --require-ready`
|
||||||
|
with working Cloudflare API auth or repaired Wrangler OAuth, followed by
|
||||||
|
`npm run billing:announcement-gate -- --account <github-login>`, return
|
||||||
|
announcement-ready gates. The latest Wrangler OAuth aggregate readback found
|
||||||
|
256 `account-billing:*` records, 256 `billing-state:*` records, 197
|
||||||
|
Marketplace-source records, 59 Stripe-source records, 53 Pro records, 4
|
||||||
|
Marketplace webhook-provenance records, all `Open Source`, 0 Marketplace Pro
|
||||||
|
states, 0 ready-like Marketplace Pro states, and 0 parse failures. ECC-Tools
|
||||||
|
commit `632e059` adds the follow-up target-account readback mode, redacts
|
||||||
|
the account login and raw KV key names, and requires both target key families
|
||||||
|
before `--require-ready` can pass. ECC-Tools commit `13cd3fc` normalizes
|
||||||
|
billing-state key casing. The latest ITO-61 retry fails because no
|
||||||
|
Marketplace-managed Pro state exists and the announcement preflight is
|
||||||
|
missing the target account plus `INTERNAL_API_SECRET`; Linear ITO-61 tracks
|
||||||
|
the exact target-account acceptance criteria.
|
||||||
- Release notes, X, LinkedIn, GitHub release, and longform copy still need final
|
- Release notes, X, LinkedIn, GitHub release, and longform copy still need final
|
||||||
live URLs after release/package/plugin URLs exist.
|
live URLs after release/package/plugin URLs exist.
|
||||||
- The local checkout still has unrelated untracked `docs/drafts/`, so a strict
|
- The local checkout is clean after the dashboard/evidence refresh, but a
|
||||||
clean-checkout release pass remains required before real publication.
|
strict clean-checkout release pass remains required before real publication.
|
||||||
|
|
||||||
## Result
|
## Result
|
||||||
|
|
||||||
The tracked public PR queue, issue queue, discussion queue, local work-items
|
The tracked public PR queue, issue queue, discussion queue, local work-items
|
||||||
bridge, and Mini Shai-Hulud/TanStack protection loop are current on
|
bridge, release-name/plugin publication gate, and Mini Shai-Hulud/TanStack
|
||||||
May 18, 2026 for `81fca2ce`. This improves publication readiness but does not
|
protection loop are current on May 18, 2026 for current `main` through
|
||||||
replace the approval-gated release, package, plugin, billing, and announcement
|
`97567a91`, with follow-up ECC Tools billing-gate hardening in `632e059`
|
||||||
steps in `publication-readiness.md`.
|
and AgentShield enterprise/security hardening through `4e36aab`.
|
||||||
|
This improves publication readiness but does not replace the approval-gated
|
||||||
|
release, package, plugin, billing, and announcement steps in
|
||||||
|
`publication-readiness.md`.
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ URLs from the exact commit being released.
|
|||||||
|
|
||||||
For the current rc.1 naming decision and package/plugin publication path, see
|
For the current rc.1 naming decision and package/plugin publication path, see
|
||||||
[`naming-and-publication-matrix.md`](naming-and-publication-matrix.md).
|
[`naming-and-publication-matrix.md`](naming-and-publication-matrix.md).
|
||||||
|
For the May 18 release name, package, Claude plugin, Codex plugin, and
|
||||||
|
publication-order gate, see
|
||||||
|
[`release-name-plugin-publication-checklist-2026-05-18.md`](release-name-plugin-publication-checklist-2026-05-18.md).
|
||||||
For the assembled rc.1 preview pack boundary, see
|
For the assembled rc.1 preview pack boundary, see
|
||||||
[`preview-pack-manifest.md`](preview-pack-manifest.md).
|
[`preview-pack-manifest.md`](preview-pack-manifest.md).
|
||||||
For the May 12 dry-run evidence pass, see
|
For the May 12 dry-run evidence pass, see
|
||||||
@@ -36,10 +39,13 @@ routing, deterministic preview-pack smoke gate, and current operator dashboard
|
|||||||
refresh, see
|
refresh, see
|
||||||
[`publication-evidence-2026-05-17.md`](publication-evidence-2026-05-17.md).
|
[`publication-evidence-2026-05-17.md`](publication-evidence-2026-05-17.md).
|
||||||
For the May 18 current-head queue, workflow-security/metrics/uncloud merge
|
For the May 18 current-head queue, workflow-security/metrics/uncloud merge
|
||||||
batch, Mini Shai-Hulud/TanStack local and home protection recheck, npm
|
batch, PR #1978 review/closure, Mini Shai-Hulud/TanStack local and home
|
||||||
no-lifecycle install/audit/signature gates, AgentShield project scan,
|
protection recheck, npm no-lifecycle install/audit/signature gates,
|
||||||
work-items sync, Linear progress comments, operator dashboard refresh, and
|
AgentShield project scan, AgentShield `840952a` enterprise/IOC evidence mirror,
|
||||||
current-head Supply-Chain Watch, see
|
release OIDC publishing-scope hardening, workflow normalization, later
|
||||||
|
dashboard/publication-readiness refreshes through `67e63e63`, work-items sync,
|
||||||
|
Linear progress comments, ITO-46 closure, operator dashboard refresh, and
|
||||||
|
current-head CI/security scan success for `4470e2e6`, see
|
||||||
[`publication-evidence-2026-05-18.md`](publication-evidence-2026-05-18.md).
|
[`publication-evidence-2026-05-18.md`](publication-evidence-2026-05-18.md).
|
||||||
For the operator-facing prompt-to-artifact readiness dashboard from the same
|
For the operator-facing prompt-to-artifact readiness dashboard from the same
|
||||||
May 16 pass, see
|
May 16 pass, see
|
||||||
@@ -64,7 +70,7 @@ For the May 18 live/pending release URL ledger, see
|
|||||||
| Claude plugin slug | `ecc` / `ecc@ecc` install path | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json` | `node tests/hooks/hooks.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
| Claude plugin slug | `ecc` / `ecc@ecc` install path | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json` | `node tests/hooks/hooks.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
||||||
| Claude plugin manifest | `2.0.0-rc.1`, no unsupported `agents` or explicit `hooks` fields | `.claude-plugin/plugin.json`, `.claude-plugin/PLUGIN_SCHEMA_NOTES.md` | `claude plugin validate .claude-plugin/plugin.json` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
| Claude plugin manifest | `2.0.0-rc.1`, no unsupported `agents` or explicit `hooks` fields | `.claude-plugin/plugin.json`, `.claude-plugin/PLUGIN_SCHEMA_NOTES.md` | `claude plugin validate .claude-plugin/plugin.json` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
||||||
| Codex plugin manifest | `2.0.0-rc.1` with shared skill source | `.codex-plugin/plugin.json` | `node tests/docs/ecc2-release-surface.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
| Codex plugin manifest | `2.0.0-rc.1` with shared skill source | `.codex-plugin/plugin.json` | `node tests/docs/ecc2-release-surface.test.js` | `publication-evidence-2026-05-12.md` | Plugin owner | Evidence recorded |
|
||||||
| Codex repo marketplace | `ecc@2.0.0-rc.1` exposed through `.agents/plugins/marketplace.json` | `.agents/plugins/marketplace.json`, `.codex-plugin/README.md` | `HOME="$(mktemp -d)" codex plugin marketplace add <local-checkout>` | `publication-evidence-2026-05-15.md` | Plugin owner | Repo-marketplace path verified; official Plugin Directory publishing coming soon |
|
| Codex repo marketplace | `ecc@2.0.0-rc.1` exposed through `.agents/plugins/marketplace.json` | `.agents/plugins/marketplace.json`, `.codex-plugin/README.md` | `HOME="$(mktemp -d)" codex plugin marketplace add <local-checkout>` | `publication-evidence-2026-05-15.md` | Plugin owner | Repo-marketplace path verified; do not claim official Plugin Directory listing before OpenAI submission evidence |
|
||||||
| OpenCode package | `ecc-universal` plugin module | `.opencode/package.json`, `.opencode/index.ts` | `npm run build:opencode` | `publication-evidence-2026-05-12.md` | Package owner | Evidence recorded |
|
| OpenCode package | `ecc-universal` plugin module | `.opencode/package.json`, `.opencode/index.ts` | `npm run build:opencode` | `publication-evidence-2026-05-12.md` | Package owner | Evidence recorded |
|
||||||
| Agent metadata | `2.0.0-rc.1` | `agent.yaml`, `.agents/plugins/marketplace.json` | `node tests/scripts/catalog.test.js` | `publication-evidence-2026-05-12.md` | Release owner | Evidence recorded |
|
| Agent metadata | `2.0.0-rc.1` | `agent.yaml`, `.agents/plugins/marketplace.json` | `node tests/scripts/catalog.test.js` | `publication-evidence-2026-05-12.md` | Release owner | Evidence recorded |
|
||||||
| Migration copy | rc.1 upgrade path, not GA claim | `release-notes.md`, `quickstart.md`, `HERMES-SETUP.md` | `npx markdownlint-cli '**/*.md' --ignore node_modules` | `publication-evidence-2026-05-13.md` | Docs owner | Evidence recorded |
|
| Migration copy | rc.1 upgrade path, not GA claim | `release-notes.md`, `quickstart.md`, `HERMES-SETUP.md` | `npx markdownlint-cli '**/*.md' --ignore node_modules` | `publication-evidence-2026-05-13.md` | Docs owner | Evidence recorded |
|
||||||
@@ -76,7 +82,7 @@ For the May 18 live/pending release URL ledger, see
|
|||||||
| GitHub release | Tag exists, release notes use final URLs, assets attached if needed | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | `Blocker: release not found on 2026-05-12` | Release owner | Pending approval |
|
| GitHub release | Tag exists, release notes use final URLs, assets attached if needed | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | `Blocker: release not found on 2026-05-12` | Release owner | Pending approval |
|
||||||
| npm package | `npm pack --dry-run` has expected files, version matches, rc goes to `next` | `npm pack --dry-run` and `npm publish --tag next --dry-run` where supported | `Blocker: actual publish requires approval; dry run passed with next tag` | Package owner | Dry-run passed |
|
| npm package | `npm pack --dry-run` has expected files, version matches, rc goes to `next` | `npm pack --dry-run` and `npm publish --tag next --dry-run` where supported | `Blocker: actual publish requires approval; dry run passed with next tag` | Package owner | Dry-run passed |
|
||||||
| Claude plugin | Manifest validates, marketplace JSON points to public repo, install docs match slug | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin tag .claude-plugin --dry-run`; isolated temp-home install smoke | `Blocker: real tag creation/push requires approval` | Plugin owner | Clean-checkout dry-run and install smoke recorded |
|
| Claude plugin | Manifest validates, marketplace JSON points to public repo, install docs match slug | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin tag .claude-plugin --dry-run`; isolated temp-home install smoke | `Blocker: real tag creation/push requires approval` | Plugin owner | Clean-checkout dry-run and install smoke recorded |
|
||||||
| Codex plugin | Manifest version matches package and docs, repo marketplace points at the plugin root, and OpenAI's current official Plugin Directory status is recorded | `node tests/docs/ecc2-release-surface.test.js`; `node tests/plugin-manifest.test.js`; `codex plugin marketplace add --help`; temp-home `codex plugin marketplace add <local-checkout>` | `Blocker: official Plugin Directory publishing and self-serve management are documented as coming soon` | Plugin owner | Repo-marketplace distribution verified; official directory pending |
|
| Codex plugin | Manifest version matches package and docs, repo marketplace points at the plugin root, and OpenAI's current official Plugin Directory status is recorded | `node tests/docs/ecc2-release-surface.test.js`; `node tests/plugin-manifest.test.js`; `codex plugin marketplace add --help`; temp-home `codex plugin marketplace add <local-checkout>` | `Blocker: official Plugin Directory listing requires OpenAI submission/listing evidence` | Plugin owner | Repo-marketplace distribution verified; official directory pending |
|
||||||
| OpenCode package | Build output is regenerated from source and package metadata is current | `npm run build:opencode` | `Blocker: none for local build; public distribution still follows npm/plugin release` | Package owner | Evidence recorded |
|
| OpenCode package | Build output is regenerated from source and package metadata is current | `npm run build:opencode` | `Blocker: none for local build; public distribution still follows npm/plugin release` | Package owner | Evidence recorded |
|
||||||
| ECC Tools billing reference | Any billing claim links to verified Marketplace/App state | `env -u GITHUB_TOKEN gh repo view ECC-Tools/ECC-Tools --json nameWithOwner,isPrivate,viewerPermission` plus internal `/api/billing/readiness?accountLogin=<marketplace-test-account>` readback | `Blocker: ECC-Tools #73 added announcementGate; live Marketplace test-account readback must return announcementGate.ready === true before payment announcement` | ECC Tools owner | Code gate recorded; live billing readback pending |
|
| ECC Tools billing reference | Any billing claim links to verified Marketplace/App state | `env -u GITHUB_TOKEN gh repo view ECC-Tools/ECC-Tools --json nameWithOwner,isPrivate,viewerPermission` plus internal `/api/billing/readiness?accountLogin=<marketplace-test-account>` readback | `Blocker: ECC-Tools #73 added announcementGate; live Marketplace test-account readback must return announcementGate.ready === true before payment announcement` | ECC Tools owner | Code gate recorded; live billing readback pending |
|
||||||
| Announcement copy | X, LinkedIn, GitHub release, and longform copy point to live URLs | placeholder-marker scan and `release-url-ledger-2026-05-18.md` | `Blocker: final live release/npm/plugin/billing URLs do not exist yet; live and pending URLs are separated in the May 18 ledger` | Release owner | URL ledger recorded; final URLs pending |
|
| Announcement copy | X, LinkedIn, GitHub release, and longform copy point to live URLs | placeholder-marker scan and `release-url-ledger-2026-05-18.md` | `Blocker: final live release/npm/plugin/billing URLs do not exist yet; live and pending URLs are separated in the May 18 ledger` | Release owner | URL ledger recorded; final URLs pending |
|
||||||
@@ -88,23 +94,24 @@ Record the exact commit SHA and command output before any publication action:
|
|||||||
|
|
||||||
| Evidence | Command | Required result | Recorded output |
|
| Evidence | Command | Required result | Recorded output |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| Clean release branch | `git status --short --branch` | On intended release commit; no unrelated files | Pending final strict clean-checkout release pass; `publication-evidence-2026-05-17.md` records current `main` with unrelated untracked `docs/drafts/` |
|
| Clean release branch | `git status --short --branch` | On intended release commit; no unrelated files | `4470e2e6`: `## main...origin/main`; repeat from the exact final publication commit before release |
|
||||||
| Preview-pack smoke | `npm run preview-pack:smoke` | Preview pack artifacts, Hermes boundary, final verification command list, and publication blockers pass | `publication-evidence-2026-05-17.md`: ready yes, digest `dfb1ed014607`, 5 passed, 0 failed; repeat in a final strict clean-checkout release pass |
|
| Preview-pack smoke | `npm run preview-pack:smoke` | Preview pack artifacts, Hermes boundary, final verification command list, and publication blockers pass | `publication-evidence-2026-05-18.md`: ready yes, digest `0ed831dbd0cf`, 5 passed, 0 failed; repeat in the final strict clean-checkout release pass |
|
||||||
| Harness audit | `npm run harness:audit -- --format json` | 70/70 passing | `publication-evidence-2026-05-17.md`: 70/70 |
|
| Harness audit | `npm run harness:audit -- --format json` | 70/70 passing | `99e01ded`: 70/70, 0 top actions |
|
||||||
| Adapter scorecard | `npm run harness:adapters -- --check` | PASS | `publication-evidence-2026-05-16.md`: PASS, 11 adapters |
|
| Adapter scorecard | `npm run harness:adapters -- --check` | PASS | `99e01ded`: PASS, 11 adapters |
|
||||||
| Observability readiness | `npm run observability:ready` | 21/21 passing | `publication-evidence-2026-05-17.md`: 21/21, ready yes |
|
| Observability readiness | `npm run observability:ready` | 21/21 passing | `publication-evidence-2026-05-18.md`: 21/21, ready yes |
|
||||||
| Release safety gate | `npm run observability:ready -- --format json` | Release Safety category passing with publication readiness, supply-chain, workflow security, package surface, and release-surface evidence | `publication-evidence-2026-05-13-post-hardening.md`: Release Safety 3/3 |
|
| Release safety gate | `npm run observability:ready -- --format json` | Release Safety category passing with publication readiness, supply-chain, workflow security, package surface, and release-surface evidence | May 18 evidence keeps release safety passing; repeat the JSON gate from the exact final release commit |
|
||||||
| Supply-chain verification | `npm audit --json`; `npm audit signatures`; `cd ecc2 && cargo audit -q`; Dependabot alerts; GitGuardian Security Checks | 0 vulnerabilities/alerts, registry signatures verified, GitGuardian clean | `publication-evidence-2026-05-18.md`: npm registry signatures and attestations verified, 0 high-or-higher npm vulnerabilities, repo/home IOC scans clean, current-head Supply-Chain Watch passed |
|
| Supply-chain verification | `npm audit --json`; `npm audit signatures`; `cd ecc2 && cargo audit -q`; Dependabot alerts; GitGuardian Security Checks | 0 vulnerabilities/alerts, registry signatures verified, GitGuardian clean | `publication-evidence-2026-05-18.md` plus CI `26057806361`: npm registry signatures and attestations verified in the evidence pass, 0 high-or-higher npm vulnerabilities, repo/home IOC scans clean, supply-chain IOC scan passed |
|
||||||
| Root suite | `node tests/run-all.js` | 0 failures | `publication-evidence-2026-05-17.md`: `npm test` passed 2487/2487, 0 failed |
|
| Root suite | `node tests/run-all.js` | 0 failures | `99e01ded`: local `node tests/run-all.js` passed 2512/2512; current-head CI `26057806361` passed the full OS/runtime/package-manager matrix for `4470e2e6` |
|
||||||
| Markdown lint | `npx markdownlint-cli '**/*.md' --ignore node_modules` | 0 failures | `publication-evidence-2026-05-17.md`: passed after ja-JP autonomous-loop anchor repair |
|
| Markdown lint | `npx markdownlint-cli '**/*.md' --ignore node_modules` | 0 failures | CI `26057806361`: markdownlint passed on current head; rerun after any release-copy edits |
|
||||||
| Package surface | `node tests/scripts/npm-publish-surface.test.js` | 0 failures; no Python bytecode in npm tarball | `2/2` passed in May 12 evidence pass |
|
| Package surface | `node tests/scripts/npm-publish-surface.test.js` | 0 failures; no Python bytecode in npm tarball | `2/2` passed in May 12 evidence pass |
|
||||||
| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | `publication-evidence-2026-05-16.md`: 20/20 passed |
|
| Release surface | `node tests/docs/ecc2-release-surface.test.js` | 0 failures | May 18 evidence refresh: 21/21 passed after public-path sanitization, during the `0f1775e3` operator-readiness refresh, and again in the ITO-46 dry-run pass before `4470e2e6` |
|
||||||
| Optional Rust surface | `cd ecc2 && cargo test` | 0 failures or explicit deferral | `publication-evidence-2026-05-16.md`: 462/462 passed, existing warnings only |
|
| Optional Rust surface | `cd ecc2 && cargo test` | 0 failures or explicit deferral | `publication-evidence-2026-05-16.md`: 462/462 passed, existing warnings only |
|
||||||
| Queue baseline | `gh pr list` / `gh issue list` across trunk, AgentShield, JARVIS, ECC Tools, and ECC website | Under 20 open PRs and under 20 open issues | `publication-evidence-2026-05-17.md`: platform audit ready, 0 open PRs and 0 open issues across checked repos |
|
| Queue baseline | `node scripts/platform-audit.js --json` across trunk, AgentShield, JARVIS, ECC Tools, and ECC website | Under 20 open PRs and under 20 open issues | `4470e2e6`: platform audit ready, 0 open PRs, 0 open issues, 0 conflicting PRs, and 0 blocking dirty files in the regenerated dashboard snapshot |
|
||||||
| Discussion baseline | `node scripts/discussion-audit.js --json` | No unmanaged active discussion queue and no answerable Q&A missing an accepted answer | `publication-evidence-2026-05-15.md`: 58 trunk discussions, 0 without maintainer touch; other tracked repos disabled or 0 |
|
| Discussion baseline | `node scripts/platform-audit.js --json` and `node scripts/discussion-audit.js --json` | No unmanaged active discussion queue and no answerable Q&A missing an accepted answer | `4470e2e6`: platform audit sampled 58 trunk discussions, 0 needing maintainer touch, 0 answerable discussions missing accepted answer; `docs/architecture/discussion-response-playbook.md` records response templates and security escalation rules |
|
||||||
| Linear roadmap | Linear project and issue readback | Detailed roadmap exists with release, security, AgentShield, ECC Tools, legacy, and observability lanes | `publication-evidence-2026-05-15.md`: project and 16 issue lanes recorded |
|
| Linear roadmap | Linear project and issue readback | Detailed roadmap exists with release, security, AgentShield, ECC Tools, legacy, and observability lanes | May 18 Linear comments include ITO-57 `3fe5b2b7-c4fe-401c-a317-b40d72119cb3` and ITO-44 `fb4a4f33-6c2d-421a-bbdb-63cfad3e3ee4`; earlier evidence records the project and 16 issue lanes |
|
||||||
| Operator readiness dashboard | `npm run operator:dashboard -- --json --allow-untracked docs/drafts/` | Current queue state mapped to macro-goal deliverables and incomplete gaps | `publication-evidence-2026-05-18.md`: generated from `3b7e0ba3`, platform ready true, dashboard ready true, 0 open PRs, 0 open issues, 0 discussion gaps; regenerated May 18 dashboard now also tracks the URL ledger |
|
| Operator readiness dashboard | `npm run operator:dashboard -- --json` | Current queue state mapped to macro-goal deliverables and incomplete gaps | `4470e2e6`: regenerated May 18 dashboard from current main; platform audit ready true, 0 open PRs, 0 open issues, 0 discussion gaps, 0 dirty files, and publication gates still approval-gated |
|
||||||
| Release URL ledger | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md` plus placeholder-marker scan | Live links and approval-gated links are separated before announcement copy is posted | Ledger records public repo/docs/CI/supply-chain/npm/OpenAI Codex documentation URLs and blocks GitHub release/npm/plugin/billing/social URLs until approval-gated checks pass |
|
| Release URL ledger | `docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md` plus placeholder-marker scan | Live links and approval-gated links are separated before announcement copy is posted | Ledger records public repo/docs/CI/supply-chain/npm/OpenAI Codex documentation URLs and blocks GitHub release/npm/plugin/billing/social URLs until approval-gated checks pass |
|
||||||
|
| Release name and plugin publication checklist | `docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md` | Name/package/plugin values are frozen, final-release commands are listed, and Claude/Codex publication paths cite current official docs | Checklist keeps `Everything Claude Code / ECC`, `ecc-universal`, and plugin slug `ecc` for rc.1; no rename, npm publish, plugin tag, official listing, billing claim, or announcement before final evidence |
|
||||||
|
|
||||||
## Do Not Publish If
|
## Do Not Publish If
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
# ECC v2.0.0-rc.1 Release Name And Plugin Publication Checklist
|
||||||
|
|
||||||
|
Snapshot date: 2026-05-18.
|
||||||
|
|
||||||
|
This checklist is the operator gate for release naming, package publication,
|
||||||
|
and Claude/Codex plugin distribution. It is not a publication action by itself.
|
||||||
|
Run it from the exact release commit before creating tags, publishing npm,
|
||||||
|
submitting marketplace forms, or posting announcements.
|
||||||
|
|
||||||
|
## Fixed rc.1 Decision
|
||||||
|
|
||||||
|
Ship `v2.0.0-rc.1` as **Everything Claude Code (ECC)**.
|
||||||
|
|
||||||
|
- Keep the GitHub repo at `affaan-m/everything-claude-code`.
|
||||||
|
- Keep the npm package as `ecc-universal`.
|
||||||
|
- Keep Claude and Codex plugin slugs as `ecc`.
|
||||||
|
- Publish the npm prerelease on the `next` dist-tag, not `latest`.
|
||||||
|
- Do not rename to `affaan-m/ecc`, `ecc`, or `@affaan-m/ecc` before rc.1.
|
||||||
|
|
||||||
|
Reasons:
|
||||||
|
|
||||||
|
- `ecc-universal` is the current working install and package surface.
|
||||||
|
- `ecc` on npm is occupied by an unrelated elliptic-curve package.
|
||||||
|
- `@affaan-m/ecc` is unclaimed on npm, but would require a migration plan.
|
||||||
|
- `affaan-m/ecc` is not available to the current GitHub auth context.
|
||||||
|
- Claude and Codex already expose the desired short namespace as `ecc`.
|
||||||
|
|
||||||
|
## Current Surface Evidence
|
||||||
|
|
||||||
|
| Surface | Current value | Evidence command | 2026-05-18 result | Release action |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| Git commit | `67e63e63f9bfd074bd6a21bf6bac71f3dfefa58b` | `git rev-parse HEAD` | Recorded from clean `main` before this ITO-46 evidence refresh | Re-run from final release commit |
|
||||||
|
| GitHub repo | `affaan-m/everything-claude-code` | `git remote get-url origin` | `https://github.com/affaan-m/everything-claude-code.git` | Keep for rc.1 |
|
||||||
|
| Possible short repo | `affaan-m/ecc` | `gh repo view affaan-m/ecc --json nameWithOwner,url,isPrivate` | GraphQL could not resolve repository | Do not depend on it for rc.1 |
|
||||||
|
| npm package | `ecc-universal@2.0.0-rc.1` local, `1.10.0` registry latest | `node -p "require('./package.json').name + '@' + require('./package.json').version"` and `npm view ecc-universal name version dist-tags --json` | Local rc.1 ready; registry still latest `1.10.0` | Publish rc.1 with `--tag next` after approval |
|
||||||
|
| Exact npm short name | `ecc` | `npm view ecc name version description repository.url --json` | Occupied by unrelated `ecc@0.0.2` | Do not use |
|
||||||
|
| Scoped npm short name | `@affaan-m/ecc` | `npm view @affaan-m/ecc name version --json` | 404 | Candidate only after migration plan |
|
||||||
|
| Claude plugin | `ecc@2.0.0-rc.1` | `claude plugin validate .claude-plugin/plugin.json`; `claude plugin validate .`; `claude plugin tag .claude-plugin --dry-run` | Validation passed on Claude Code `2.1.143`; full plugin validation has one expected root `CLAUDE.md` context warning; dry run would create `ecc--v2.0.0-rc.1` | Run dry-run tag again from the final commit, then tag/push only after approval |
|
||||||
|
| Claude marketplace | `.claude-plugin/marketplace.json` | `claude plugin marketplace add --help`; Anthropic plugin marketplace docs | GitHub repo, git URL, remote marketplace JSON, and local path marketplace sources are supported | Verify post-tag marketplace install/update path after final evidence |
|
||||||
|
| Codex plugin | `ecc@2.0.0-rc.1` | `node tests/plugin-manifest.test.js`; `codex plugin marketplace add --help`; OpenAI Codex plugin docs | Plugin manifest passed 54/54; local and GitHub-ref repo marketplace smokes passed on Codex CLI `0.131.0` | Use repo marketplace for rc.1; do not claim official directory listing until OpenAI publishing path is available |
|
||||||
|
| OpenCode package | `ecc-universal@2.0.0-rc.1` | `node -p "require('./.opencode/package.json').name + '@' + require('./.opencode/package.json').version"` | Matches rc.1 package identity | Follow npm package publication |
|
||||||
|
| Billing claim | Pending ECC Tools readiness | ECC Tools billing gate and Marketplace account readback | Code-side gate exists; live Marketplace account readback still pending | Do not announce native payments |
|
||||||
|
|
||||||
|
## Required Gate
|
||||||
|
|
||||||
|
Run these checks from the final release commit and paste the exact output into
|
||||||
|
a fresh `publication-evidence-YYYY-MM-DD.md` file before release actions:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git status --short --branch
|
||||||
|
git rev-parse HEAD
|
||||||
|
git remote get-url origin
|
||||||
|
npm view ecc name version description repository.url --json
|
||||||
|
npm view @affaan-m/ecc name version --json
|
||||||
|
npm view ecc-universal name version dist-tags --json
|
||||||
|
node tests/plugin-manifest.test.js
|
||||||
|
node tests/docs/ecc2-release-surface.test.js
|
||||||
|
claude plugin validate .claude-plugin/plugin.json
|
||||||
|
claude plugin tag .claude-plugin --dry-run
|
||||||
|
codex plugin marketplace add --help
|
||||||
|
HOME="$(mktemp -d)" codex plugin marketplace add ./
|
||||||
|
HOME="$(mktemp -d)" codex plugin marketplace add affaan-m/everything-claude-code --ref "$(git rev-parse HEAD)"
|
||||||
|
npm pack --dry-run --json
|
||||||
|
npm publish --tag next --dry-run
|
||||||
|
npm run build:opencode
|
||||||
|
npm run preview-pack:smoke
|
||||||
|
```
|
||||||
|
|
||||||
|
If a command is unavailable on the release machine, record the exact error and
|
||||||
|
keep the related publication action blocked.
|
||||||
|
|
||||||
|
## Publication Order
|
||||||
|
|
||||||
|
| Step | Action | Required evidence | Stop condition |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | Freeze name and version | Package, Claude plugin, Codex plugin, OpenCode package, `VERSION`, and release docs all say `2.0.0-rc.1` | Any `preview`/`rc.1` mismatch |
|
||||||
|
| 2 | Verify clean release branch | `git status --short --branch` shows only the intended release commit and no unrelated drift | Any unexplained dirty file |
|
||||||
|
| 3 | Verify package and plugin manifests | `node tests/plugin-manifest.test.js` and `node tests/docs/ecc2-release-surface.test.js` pass | Manifest or release-surface failure |
|
||||||
|
| 4 | Dry-run package surface | `npm pack --dry-run --json`; `npm publish --tag next --dry-run` | Missing files, wrong dist-tag, or publish dry-run failure |
|
||||||
|
| 5 | Dry-run Claude distribution | `claude plugin validate`; `claude plugin tag .claude-plugin --dry-run`; marketplace source/help evidence | Validation, tag, or install-smoke failure |
|
||||||
|
| 6 | Verify Codex repo marketplace | `codex plugin marketplace add --help`; temp-home local and GitHub-ref repo marketplace add smoke; OpenAI official directory status recorded | Missing repo marketplace or unverified official-directory status |
|
||||||
|
| 7 | Verify OpenCode package | `npm run build:opencode` | Build failure |
|
||||||
|
| 8 | Regenerate release URL ledger | Live and approval-gated URLs separated in `release-url-ledger-YYYY-MM-DD.md` | Placeholder, private URL, or announcement URL drift |
|
||||||
|
| 9 | Create GitHub prerelease | `gh release view v2.0.0-rc.1 --json tagName,url,isPrerelease` | Missing URL or wrong prerelease flag |
|
||||||
|
| 10 | Publish npm rc | `npm view ecc-universal version dist-tags --json` shows rc.1 on `next` | rc.1 lands on `latest` or registry output is unclear |
|
||||||
|
| 11 | Publish/plugin-submit | Claude official submission and Codex repo marketplace evidence recorded | Form not submitted, listing not visible, or docs status changed |
|
||||||
|
| 12 | Announce | X, LinkedIn, GitHub release, and longform copy use final live URLs | Any final URL is still pending |
|
||||||
|
|
||||||
|
## Do Not Proceed
|
||||||
|
|
||||||
|
- Do not publish npm before `npm pack --dry-run --json` is captured from the
|
||||||
|
final release commit.
|
||||||
|
- Do not create or push Claude plugin tags before `claude plugin tag
|
||||||
|
.claude-plugin --dry-run` passes from the final release commit.
|
||||||
|
- Do not claim an official Codex Plugin Directory listing unless OpenAI
|
||||||
|
documents a public submission path or confirms the plugin has been listed.
|
||||||
|
- Do not announce billing, Marketplace, or native payments until ECC Tools live
|
||||||
|
Marketplace account readback returns ready.
|
||||||
|
- Do not rename the repo or package until rc.1 is published and a migration
|
||||||
|
guide maps old names to new names.
|
||||||
|
- Do not post social copy while any release, npm, plugin, or billing URL is
|
||||||
|
still approval-gated.
|
||||||
|
|
||||||
|
## External Distribution Sources
|
||||||
|
|
||||||
|
- Anthropic Claude Code plugin docs: `https://code.claude.com/docs/en/plugins`
|
||||||
|
- Anthropic Claude Code marketplace docs:
|
||||||
|
`https://code.claude.com/docs/en/plugin-marketplaces`
|
||||||
|
- OpenAI Codex plugin docs:
|
||||||
|
`https://developers.openai.com/codex/plugins/build#add-a-marketplace-from-the-cli`
|
||||||
|
|
||||||
|
As of this snapshot, Anthropic documents self-hosted marketplace distribution
|
||||||
|
through GitHub, git URL, remote marketplace JSON, and local path sources.
|
||||||
|
OpenAI documents repo/personal marketplace distribution for Codex and describes
|
||||||
|
an official Plugin Directory, but ECC has not submitted or received an official
|
||||||
|
directory listing in this pass.
|
||||||
@@ -108,6 +108,24 @@ porting.
|
|||||||
| #1682/#1701 | Strategic compact hook-path fixes were merged directly or superseded by current docs fixes. |
|
| #1682/#1701 | Strategic compact hook-path fixes were merged directly or superseded by current docs fixes. |
|
||||||
| JARVIS #4/#5/#6 | Stale failing dependency-only PRs; future dependency state should be regenerated by Dependabot. |
|
| JARVIS #4/#5/#6 | Stale failing dependency-only PRs; future dependency state should be regenerated by Dependabot. |
|
||||||
|
|
||||||
|
## 2026-05-18 Owner-Wide Queue Cleanup
|
||||||
|
|
||||||
|
The ECC release repos were already clean, but an owner-wide `gh search` sweep
|
||||||
|
found stale queues in older public/private projects. The cleanup closed 24
|
||||||
|
stale dependency-bot PRs and 72 stale legacy payments/0EM roadmap issues,
|
||||||
|
then closed the final 9 stale/generated/conflicting/test PRs and 5
|
||||||
|
legacy/outreach/placeholder issues. The `affaan-m` owner namespace is now at 0
|
||||||
|
open PRs and 0 open issues by live `gh search`. The detailed before/after
|
||||||
|
evidence and final queue disposition are recorded in
|
||||||
|
`docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md`.
|
||||||
|
|
||||||
|
| Scope | Disposition |
|
||||||
|
| --- | --- |
|
||||||
|
| Dependabot PRs in `stoictradingAI`, `Behavioral_RL`, `dprc-autotrader-v2`, `x-algorithm-score`, `polycule-secure`, and `pragmAItism_defAInce` | Skipped as stale generated dependency bumps; regenerate from current base if still needed. |
|
||||||
|
| Legacy issues in `payments0-api`, `payments0-sdk`, `agent-payments-gateway`, `0EM_Frontend`, `0em-payments-dashboard`, and `yield-optimizer` | Superseded by ECC Tools native-payments, hosted analysis, billing-readback, and Linear/project roadmap lanes. |
|
||||||
|
| Archived repos touched for PR closure | `stoictradingAI`, `dprc-autotrader-v2`, `polycule-secure`, and `pragmAItism_defAInce` were restored to archived state after stale PR closure. |
|
||||||
|
| Final PR/issue sweep | Closed the remaining generated ECC bundles, stale Cloudflare rename PRs, stale README-card PR, test/noise PR, public outreach issues, and empty placeholder issue. Preserved `dexploy#25` findings in Linear `ITO-62` before closure. |
|
||||||
|
|
||||||
## Skipped
|
## Skipped
|
||||||
|
|
||||||
| Source PR | Reason |
|
| Source PR | Reason |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Everything Claude Code (ECC) — 智能体指令
|
# Everything Claude Code (ECC) — 智能体指令
|
||||||
|
|
||||||
这是一个**生产就绪的 AI 编码插件**,提供 60 个专业代理、231 项技能、75 条命令以及自动化钩子工作流,用于软件开发。
|
这是一个**生产就绪的 AI 编码插件**,提供 60 个专业代理、232 项技能、75 条命令以及自动化钩子工作流,用于软件开发。
|
||||||
|
|
||||||
**版本:** 2.0.0-rc.1
|
**版本:** 2.0.0-rc.1
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
agents/ — 60 个专业子代理
|
agents/ — 60 个专业子代理
|
||||||
skills/ — 231 个工作流技能和领域知识
|
skills/ — 232 个工作流技能和领域知识
|
||||||
commands/ — 75 个斜杠命令
|
commands/ — 75 个斜杠命令
|
||||||
hooks/ — 基于触发的自动化
|
hooks/ — 基于触发的自动化
|
||||||
rules/ — 始终遵循的指导方针(通用 + 每种语言)
|
rules/ — 始终遵循的指导方针(通用 + 每种语言)
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ Copy-Item -Recurse rules/typescript "$HOME/.claude/rules/"
|
|||||||
/plugin list ecc@ecc
|
/plugin list ecc@ecc
|
||||||
```
|
```
|
||||||
|
|
||||||
**搞定!** 你现在可以使用 60 个智能体、231 项技能和 75 个命令了。
|
**搞定!** 你现在可以使用 60 个智能体、232 项技能和 75 个命令了。
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
@@ -1138,7 +1138,7 @@ opencode
|
|||||||
|---------|-------------|----------|--------|
|
|---------|-------------|----------|--------|
|
||||||
| 智能体 | PASS: 60 个 | PASS: 12 个 | **Claude Code 领先** |
|
| 智能体 | PASS: 60 个 | PASS: 12 个 | **Claude Code 领先** |
|
||||||
| 命令 | PASS: 75 个 | PASS: 35 个 | **Claude Code 领先** |
|
| 命令 | PASS: 75 个 | PASS: 35 个 | **Claude Code 领先** |
|
||||||
| 技能 | PASS: 231 项 | PASS: 37 项 | **Claude Code 领先** |
|
| 技能 | PASS: 232 项 | PASS: 37 项 | **Claude Code 领先** |
|
||||||
| 钩子 | PASS: 8 种事件类型 | PASS: 11 种事件 | **OpenCode 更多!** |
|
| 钩子 | PASS: 8 种事件类型 | PASS: 11 种事件 | **OpenCode 更多!** |
|
||||||
| 规则 | PASS: 29 条 | PASS: 13 条指令 | **Claude Code 领先** |
|
| 规则 | PASS: 29 条 | PASS: 13 条指令 | **Claude Code 领先** |
|
||||||
| MCP 服务器 | PASS: 14 个 | PASS: 完整 | **完全对等** |
|
| MCP 服务器 | PASS: 14 个 | PASS: 完整 | **完全对等** |
|
||||||
@@ -1246,7 +1246,7 @@ ECC 是**第一个最大化利用每个主要 AI 编码工具的插件**。以
|
|||||||
|---------|------------|------------|-----------|----------|
|
|---------|------------|------------|-----------|----------|
|
||||||
| **智能体** | 60 | 共享 (AGENTS.md) | 共享 (AGENTS.md) | 12 |
|
| **智能体** | 60 | 共享 (AGENTS.md) | 共享 (AGENTS.md) | 12 |
|
||||||
| **命令** | 75 | 共享 | 基于指令 | 35 |
|
| **命令** | 75 | 共享 | 基于指令 | 35 |
|
||||||
| **技能** | 231 | 共享 | 10 (原生格式) | 37 |
|
| **技能** | 232 | 共享 | 10 (原生格式) | 37 |
|
||||||
| **钩子事件** | 8 种类型 | 15 种类型 | 暂无 | 11 种类型 |
|
| **钩子事件** | 8 种类型 | 15 种类型 | 暂无 | 11 种类型 |
|
||||||
| **钩子脚本** | 20+ 个脚本 | 16 个脚本 (DRY 适配器) | N/A | 插件钩子 |
|
| **钩子脚本** | 20+ 个脚本 | 16 个脚本 (DRY 适配器) | N/A | 插件钩子 |
|
||||||
| **规则** | 34 (通用 + 语言) | 34 (YAML 前页) | 基于指令 | 13 条指令 |
|
| **规则** | 34 (通用 + 语言) | 34 (YAML 前页) | 基于指令 | 13 条指令 |
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const globals = require('globals');
|
|||||||
|
|
||||||
module.exports = [
|
module.exports = [
|
||||||
{
|
{
|
||||||
ignores: ['.opencode/dist/**', '.cursor/**', 'node_modules/**']
|
ignores: ['.opencode/dist/**', '.cursor/**', 'node_modules/**', '.venv/**', 'venv/**', 'coverage/**']
|
||||||
},
|
},
|
||||||
js.configs.recommended,
|
js.configs.recommended,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -449,6 +449,7 @@
|
|||||||
"kind": "skills",
|
"kind": "skills",
|
||||||
"description": "Media generation, technical explainers, and AI-assisted editing skills.",
|
"description": "Media generation, technical explainers, and AI-assisted editing skills.",
|
||||||
"paths": [
|
"paths": [
|
||||||
|
"skills/blender-motion-state-inspection",
|
||||||
"skills/fal-ai-media",
|
"skills/fal-ai-media",
|
||||||
"skills/manim-video",
|
"skills/manim-video",
|
||||||
"skills/remotion-video-creation",
|
"skills/remotion-video-creation",
|
||||||
|
|||||||
@@ -122,6 +122,7 @@
|
|||||||
"skills/automation-audit-ops/",
|
"skills/automation-audit-ops/",
|
||||||
"skills/autonomous-loops/",
|
"skills/autonomous-loops/",
|
||||||
"skills/backend-patterns/",
|
"skills/backend-patterns/",
|
||||||
|
"skills/blender-motion-state-inspection/",
|
||||||
"skills/blueprint/",
|
"skills/blueprint/",
|
||||||
"skills/brand-voice/",
|
"skills/brand-voice/",
|
||||||
"skills/carrier-relationship-management/",
|
"skills/carrier-relationship-management/",
|
||||||
|
|||||||
@@ -114,7 +114,31 @@ function isDangerousInvisibleCodePoint(codePoint) {
|
|||||||
(codePoint >= 0x202A && codePoint <= 0x202E) ||
|
(codePoint >= 0x202A && codePoint <= 0x202E) ||
|
||||||
(codePoint >= 0x2066 && codePoint <= 0x2069) ||
|
(codePoint >= 0x2066 && codePoint <= 0x2069) ||
|
||||||
(codePoint >= 0xFE00 && codePoint <= 0xFE0F) ||
|
(codePoint >= 0xFE00 && codePoint <= 0xFE0F) ||
|
||||||
(codePoint >= 0xE0100 && codePoint <= 0xE01EF)
|
(codePoint >= 0xE0100 && codePoint <= 0xE01EF) ||
|
||||||
|
// Unicode Tag block (U+E0000–U+E007F). Tag characters were proposed
|
||||||
|
// for language tagging in Unicode 3.1 and have been deprecated since
|
||||||
|
// Unicode 5.1, so no legitimate text uses them. They are the canonical
|
||||||
|
// vector for "ASCII smuggling" / "Tag smuggling" prompt injection:
|
||||||
|
// an attacker hides instructions inside ASCII-looking strings (PR
|
||||||
|
// bodies, SKILL.md, frontmatter), the LLM consumes the tag bytes,
|
||||||
|
// and the human reviewer sees nothing.
|
||||||
|
(codePoint >= 0xE0000 && codePoint <= 0xE007F) ||
|
||||||
|
// U+180E MONGOLIAN VOWEL SEPARATOR — formerly classified as a space
|
||||||
|
// separator, reclassified as a format control in Unicode 6.3; renders
|
||||||
|
// as zero-width and routinely abused for homograph / smuggling.
|
||||||
|
codePoint === 0x180E ||
|
||||||
|
// U+115F / U+1160 HANGUL CHOSEONG/JUNGSEONG FILLER — zero-width fillers
|
||||||
|
// used in Korean text shaping; abused as invisible characters.
|
||||||
|
codePoint === 0x115F ||
|
||||||
|
codePoint === 0x1160 ||
|
||||||
|
// U+2061–U+2064 invisible math operators (FUNCTION APPLICATION,
|
||||||
|
// INVISIBLE TIMES, INVISIBLE SEPARATOR, INVISIBLE PLUS). Zero-width
|
||||||
|
// and not used outside math typesetting; legitimate Markdown / source
|
||||||
|
// does not contain them.
|
||||||
|
(codePoint >= 0x2061 && codePoint <= 0x2064) ||
|
||||||
|
// U+3164 HANGUL FILLER — zero-width filler reportedly used in Discord
|
||||||
|
// / Twitter smuggling attacks; not used in legitimate Korean text.
|
||||||
|
codePoint === 0x3164
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -580,12 +580,51 @@ function addFinding(findings, severity, filePath, line, indicator, message) {
|
|||||||
findings.push({ severity, filePath, line, indicator, message });
|
findings.push({ severity, filePath, line, indicator, message });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isClaudeSettingsFile(filePath) {
|
||||||
|
const normalized = normalizedPath(filePath);
|
||||||
|
return /\/\.claude\/settings(?:\.local)?\.json$/.test(normalized);
|
||||||
|
}
|
||||||
|
|
||||||
|
function claudePermissionDenyRanges(filePath, text) {
|
||||||
|
if (!isClaudeSettingsFile(filePath)) return [];
|
||||||
|
|
||||||
|
let parsed;
|
||||||
|
try {
|
||||||
|
parsed = JSON.parse(text);
|
||||||
|
} catch {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const denyEntries = parsed?.permissions?.deny;
|
||||||
|
if (!Array.isArray(denyEntries)) return [];
|
||||||
|
|
||||||
|
const ranges = [];
|
||||||
|
for (const entry of denyEntries) {
|
||||||
|
if (typeof entry !== 'string' || entry.length === 0) continue;
|
||||||
|
|
||||||
|
for (const needle of [...new Set([JSON.stringify(entry), entry])]) {
|
||||||
|
let index = text.indexOf(needle);
|
||||||
|
while (index !== -1) {
|
||||||
|
ranges.push([index, index + needle.length]);
|
||||||
|
index = text.indexOf(needle, index + needle.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ranges;
|
||||||
|
}
|
||||||
|
|
||||||
|
function indexInRanges(index, ranges) {
|
||||||
|
return ranges.some(([start, end]) => index >= start && index < end);
|
||||||
|
}
|
||||||
|
|
||||||
function scanFile(filePath, rootDir, findings) {
|
function scanFile(filePath, rootDir, findings) {
|
||||||
const base = path.basename(filePath);
|
const base = path.basename(filePath);
|
||||||
const relativePath = path.relative(rootDir, filePath) || filePath;
|
const relativePath = path.relative(rootDir, filePath) || filePath;
|
||||||
const text = readText(filePath);
|
const text = readText(filePath);
|
||||||
const lowerText = normalizeForMatch(text);
|
const lowerText = normalizeForMatch(text);
|
||||||
const hashFinding = MALICIOUS_FILE_HASHES[sha256File(filePath)];
|
const hashFinding = MALICIOUS_FILE_HASHES[sha256File(filePath)];
|
||||||
|
const defensiveClaudeDenyRanges = claudePermissionDenyRanges(filePath, text);
|
||||||
|
|
||||||
if (hashFinding) {
|
if (hashFinding) {
|
||||||
addFinding(
|
addFinding(
|
||||||
@@ -621,8 +660,10 @@ function scanFile(filePath, rootDir, findings) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const indicator of CRITICAL_TEXT_INDICATORS) {
|
for (const indicator of CRITICAL_TEXT_INDICATORS) {
|
||||||
const index = lowerText.indexOf(normalizeForMatch(indicator));
|
const normalizedIndicator = normalizeForMatch(indicator);
|
||||||
if (index !== -1) {
|
let index = lowerText.indexOf(normalizedIndicator);
|
||||||
|
while (index !== -1) {
|
||||||
|
if (!indexInRanges(index, defensiveClaudeDenyRanges)) {
|
||||||
addFinding(
|
addFinding(
|
||||||
findings,
|
findings,
|
||||||
'critical',
|
'critical',
|
||||||
@@ -631,6 +672,10 @@ function scanFile(filePath, rootDir, findings) {
|
|||||||
indicator,
|
indicator,
|
||||||
'Known active supply-chain IOC is present',
|
'Known active supply-chain IOC is present',
|
||||||
);
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
index = lowerText.indexOf(normalizedIndicator, index + normalizedIndicator.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ const NPM_AUDIT_PATTERN = /\bnpm\s+audit\b(?!\s+signatures\b)/;
|
|||||||
const NPM_AUDIT_SIGNATURES_PATTERN = /\bnpm\s+audit\s+signatures\b/;
|
const NPM_AUDIT_SIGNATURES_PATTERN = /\bnpm\s+audit\s+signatures\b/;
|
||||||
const ACTIONS_CACHE_PATTERN = /uses:\s*['"]?actions\/cache@/m;
|
const ACTIONS_CACHE_PATTERN = /uses:\s*['"]?actions\/cache@/m;
|
||||||
const ID_TOKEN_WRITE_PATTERN = /^\s*id-token:\s*write\b/m;
|
const ID_TOKEN_WRITE_PATTERN = /^\s*id-token:\s*write\b/m;
|
||||||
|
const TOP_LEVEL_JOBS_PATTERN = /^jobs:\s*$/m;
|
||||||
const UNSAFE_INSTALL_PATTERNS = [
|
const UNSAFE_INSTALL_PATTERNS = [
|
||||||
{
|
{
|
||||||
pattern: /\bnpm\s+ci\b(?![^\n]*--ignore-scripts)/g,
|
pattern: /\bnpm\s+ci\b(?![^\n]*--ignore-scripts)/g,
|
||||||
@@ -121,6 +122,8 @@ function extractCheckoutSteps(source) {
|
|||||||
function findViolations(filePath, source) {
|
function findViolations(filePath, source) {
|
||||||
const violations = [];
|
const violations = [];
|
||||||
const checkoutSteps = extractCheckoutSteps(source);
|
const checkoutSteps = extractCheckoutSteps(source);
|
||||||
|
const jobsIndex = source.search(TOP_LEVEL_JOBS_PATTERN);
|
||||||
|
const workflowHeader = jobsIndex >= 0 ? source.slice(0, jobsIndex) : source;
|
||||||
|
|
||||||
for (const rule of RULES) {
|
for (const rule of RULES) {
|
||||||
if (!rule.eventPattern.test(source)) {
|
if (!rule.eventPattern.test(source)) {
|
||||||
@@ -175,6 +178,16 @@ function findViolations(filePath, source) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ID_TOKEN_WRITE_PATTERN.test(workflowHeader)) {
|
||||||
|
violations.push({
|
||||||
|
filePath,
|
||||||
|
event: 'workflow-scoped id-token',
|
||||||
|
description: 'id-token: write must be scoped to a publish-only job, not the entire workflow',
|
||||||
|
expression: 'top-level id-token: write',
|
||||||
|
line: getLineNumber(source, source.search(ID_TOKEN_WRITE_PATTERN)),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
for (const installRule of UNSAFE_INSTALL_PATTERNS) {
|
for (const installRule of UNSAFE_INSTALL_PATTERNS) {
|
||||||
for (const match of source.matchAll(installRule.pattern)) {
|
for (const match of source.matchAll(installRule.pattern)) {
|
||||||
violations.push({
|
violations.push({
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ const DEFAULT_BACKOFF_MS = 30 * 1000;
|
|||||||
const MAX_BACKOFF_MS = 10 * 60 * 1000;
|
const MAX_BACKOFF_MS = 10 * 60 * 1000;
|
||||||
// The preflight HTTP probe only checks reachability; it does not have access to
|
// The preflight HTTP probe only checks reachability; it does not have access to
|
||||||
// Claude Code's stored OAuth bearer token. Treat auth-gated responses as
|
// Claude Code's stored OAuth bearer token. Treat auth-gated responses as
|
||||||
// reachable so the real MCP client can attempt the authenticated call.
|
// reachable so the real MCP client can attempt the authenticated call. A
|
||||||
const HEALTHY_HTTP_CODES = new Set([200, 201, 202, 204, 301, 302, 303, 304, 307, 308, 400, 401, 403, 405]);
|
// Streamable HTTP MCP server can also return 406 to a bare GET that omits
|
||||||
|
// Accept: text/event-stream; that still proves the endpoint is alive.
|
||||||
|
const HEALTHY_HTTP_CODES = new Set([200, 201, 202, 204, 301, 302, 303, 304, 307, 308, 400, 401, 403, 405, 406]);
|
||||||
const RECONNECT_STATUS_CODES = new Set([401, 403, 429, 503]);
|
const RECONNECT_STATUS_CODES = new Set([401, 403, 429, 503]);
|
||||||
const FAILURE_PATTERNS = [
|
const FAILURE_PATTERNS = [
|
||||||
{ code: 401, pattern: /\b401\b|unauthori[sz]ed|auth(?:entication)?\s+(?:failed|expired|invalid)/i },
|
{ code: 401, pattern: /\b401\b|unauthori[sz]ed|auth(?:entication)?\s+(?:failed|expired|invalid)/i },
|
||||||
|
|||||||
@@ -335,13 +335,34 @@ function agentShieldEnterpriseGap(roadmap) {
|
|||||||
function agentShieldEnterpriseEvidence(roadmap) {
|
function agentShieldEnterpriseEvidence(roadmap) {
|
||||||
if (roadmap.includes('hosted promotion judge audit traces')
|
if (roadmap.includes('hosted promotion judge audit traces')
|
||||||
|| roadmap.includes('operator-visible promotion output values')) {
|
|| roadmap.includes('operator-visible promotion output values')) {
|
||||||
return 'AgentShield policy promotion `reviewItems` landed in `87aec47`; package-manager hardening drift detection landed in `28d08c7`; workflow action runtime pins were refreshed in `659f569`; npm age-gate guidance was corrected in `ee585cd`; package-manager hardening Action outputs landed in `1124535`; policy-promotion Action outputs and runtime-smoke job-summary evidence landed in `1593925`; ECC-Tools consumes those outputs in `8658951`, surfaces operator-readable status/pack/count/digest telemetry in `16c537f`, and renders hosted promotion judge audit traces in `05d4e82`; all are mirrored in the GA roadmap';
|
return 'AgentShield policy promotion `reviewItems` landed in `87aec47`; package-manager hardening drift detection landed in `28d08c7`; workflow action runtime pins were refreshed in `659f569`; npm age-gate guidance was corrected in `ee585cd`; package-manager hardening Action outputs landed in `1124535`; policy-promotion Action outputs and runtime-smoke job-summary evidence landed in `1593925`; fleet review ticket payloads and current Mini Shai-Hulud IOC breadcrumbs landed in `840952a`; ECC-Tools consumes those outputs in `8658951`, surfaces operator-readable status/pack/count/digest telemetry in `16c537f`, and renders hosted promotion judge audit traces in `05d4e82`; all are mirrored in the GA roadmap';
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'AgentShield enterprise PR evidence is mirrored in the GA roadmap';
|
return 'AgentShield enterprise PR evidence is mirrored in the GA roadmap';
|
||||||
}
|
}
|
||||||
|
|
||||||
function eccToolsNextLevelEvidence(roadmap) {
|
function eccToolsNextLevelEvidence(roadmap) {
|
||||||
|
if (roadmap.includes('69ca535')
|
||||||
|
|| roadmap.includes('team feedback controls')
|
||||||
|
|| roadmap.includes('e56fc1a')) {
|
||||||
|
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, target-account billing readback, provenance-aware Marketplace billing-state gates, sanitized Marketplace plan/action provenance counts, hosted team-learning feedback controls, and ECC-Tools Dependabot alert remediation are mirrored in the GA roadmap';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('d5f60db')
|
||||||
|
|| roadmap.includes('Marketplace-source provenance counts')) {
|
||||||
|
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, target-account billing readback, provenance-aware Marketplace billing-state gates, and sanitized Marketplace plan/action provenance counts are mirrored in the GA roadmap';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('target account billing readback')
|
||||||
|
|| roadmap.includes('632e059')) {
|
||||||
|
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, target-account billing readback, and provenance-aware Marketplace billing-state gates are mirrored in the GA roadmap';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('Wrangler OAuth readback')
|
||||||
|
|| roadmap.includes('42653f9')) {
|
||||||
|
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, Wrangler OAuth readback, and provenance-aware Marketplace billing-state gates are mirrored in the GA roadmap';
|
||||||
|
}
|
||||||
|
|
||||||
if (roadmap.includes('Marketplace webhook provenance')
|
if (roadmap.includes('Marketplace webhook provenance')
|
||||||
|| roadmap.includes('2859678')) {
|
|| roadmap.includes('2859678')) {
|
||||||
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, and provenance-aware Marketplace billing-state gates are mirrored in the GA roadmap';
|
return 'billing announcement gate, hosted analysis lanes, AgentShield fleet-summary consumption, hosted finding evidence paths, harness-route policy linking, policy-promotion Action-output telemetry, operator-visible promotion output details, hosted promotion judge audit traces, billing announcement preflight, aggregate production billing KV readback, and provenance-aware Marketplace billing-state gates are mirrored in the GA roadmap';
|
||||||
@@ -366,6 +387,31 @@ function eccToolsNextLevelEvidence(roadmap) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function eccToolsNextLevelGap(roadmap) {
|
function eccToolsNextLevelGap(roadmap) {
|
||||||
|
if (roadmap.includes('1Password CLI authorization timed out')
|
||||||
|
|| roadmap.includes('Cloudflare API auth returned `Authentication error [code: 10000]`')) {
|
||||||
|
return 'authorize Cloudflare API or 1Password CLI access, configure the target Marketplace Pro account and INTERNAL_API_SECRET, create or replay Marketplace Pro webhook state, then rerun target readback and the live announcement gate';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('Wrangler OAuth now works')
|
||||||
|
|| roadmap.includes('6904e4fb-bec7-4787-90e2-759f077a628c')) {
|
||||||
|
return 'create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('d5f60db')
|
||||||
|
|| roadmap.includes('Marketplace-source provenance counts')) {
|
||||||
|
return 'create or verify Marketplace-managed Pro target billing-state with webhook provenance, then run `billing:kv-readback -- --wrangler --wrangler-bin ./node_modules/.bin/wrangler --account <github-login> --require-ready`, followed by the live announcement gate';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('target account billing readback')
|
||||||
|
|| roadmap.includes('632e059')) {
|
||||||
|
return 'create or verify Marketplace-managed Pro target billing-state with webhook provenance, then run `billing:kv-readback -- --account <github-login> --require-ready` with working Cloudflare API auth or repaired Wrangler OAuth, followed by the live announcement gate';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roadmap.includes('Wrangler OAuth readback')
|
||||||
|
|| roadmap.includes('42653f9')) {
|
||||||
|
return 'create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` with working Cloudflare API auth or repaired Wrangler OAuth, followed by the live announcement gate';
|
||||||
|
}
|
||||||
|
|
||||||
if (roadmap.includes('Marketplace webhook provenance')
|
if (roadmap.includes('Marketplace webhook provenance')
|
||||||
|| roadmap.includes('2859678')) {
|
|| roadmap.includes('2859678')) {
|
||||||
return 'replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate';
|
return 'replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate';
|
||||||
@@ -482,6 +528,17 @@ function buildRequirement(id, requirement, artifact, status, evidence, gap) {
|
|||||||
return { id, requirement, artifact, status, evidence, gap };
|
return { id, requirement, artifact, status, evidence, gap };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function extractLabeledCount(text, label) {
|
||||||
|
const pattern = new RegExp(`${label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}:\\s*(\\d+)`, 'i');
|
||||||
|
const match = text.match(pattern);
|
||||||
|
if (!match) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsed = Number.parseInt(match[1], 10);
|
||||||
|
return Number.isFinite(parsed) ? parsed : null;
|
||||||
|
}
|
||||||
|
|
||||||
function isCurrentOrComplete(status) {
|
function isCurrentOrComplete(status) {
|
||||||
return status === 'current' || status === 'complete';
|
return status === 'current' || status === 'complete';
|
||||||
}
|
}
|
||||||
@@ -490,7 +547,9 @@ function buildRequirements(rootDir, platformReport) {
|
|||||||
const roadmap = readText(rootDir, 'docs/ECC-2.0-GA-ROADMAP.md');
|
const roadmap = readText(rootDir, 'docs/ECC-2.0-GA-ROADMAP.md');
|
||||||
const publicationReadiness = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-readiness.md');
|
const publicationReadiness = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-readiness.md');
|
||||||
const namingMatrix = readText(rootDir, 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md');
|
const namingMatrix = readText(rootDir, 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md');
|
||||||
|
const releasePublicationChecklist = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md');
|
||||||
const releaseUrlLedger = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md');
|
const releaseUrlLedger = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md');
|
||||||
|
const ownerQueueCleanup = readText(rootDir, 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md');
|
||||||
const previewManifest = readText(rootDir, 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md');
|
const previewManifest = readText(rootDir, 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md');
|
||||||
const previewPackSmoke = readText(rootDir, 'scripts/preview-pack-smoke.js');
|
const previewPackSmoke = readText(rootDir, 'scripts/preview-pack-smoke.js');
|
||||||
const progressSync = readText(rootDir, 'docs/architecture/progress-sync-contract.md');
|
const progressSync = readText(rootDir, 'docs/architecture/progress-sync-contract.md');
|
||||||
@@ -520,9 +579,22 @@ function buildRequirements(rootDir, platformReport) {
|
|||||||
&& fileExists(rootDir, 'skills/hermes-imports/SKILL.md');
|
&& fileExists(rootDir, 'skills/hermes-imports/SKILL.md');
|
||||||
|
|
||||||
const githubLive = !platformReport.github.skipped && platformReport.github.totals.errors === 0;
|
const githubLive = !platformReport.github.skipped && platformReport.github.totals.errors === 0;
|
||||||
const queuesCurrent = githubLive
|
const ownerWideOpenPrs = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open PRs after cleanup');
|
||||||
&& platformReport.github.totals.openPrs <= platformReport.thresholds.maxOpenPrs
|
const ownerWideOpenIssues = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open issues after cleanup');
|
||||||
|
const trackedPrQueueCurrent = githubLive
|
||||||
|
&& platformReport.github.totals.openPrs <= platformReport.thresholds.maxOpenPrs;
|
||||||
|
const trackedIssueQueueCurrent = githubLive
|
||||||
&& platformReport.github.totals.openIssues <= platformReport.thresholds.maxOpenIssues;
|
&& platformReport.github.totals.openIssues <= platformReport.thresholds.maxOpenIssues;
|
||||||
|
const ownerPrQueueCurrent = ownerWideOpenPrs === null
|
||||||
|
|| ownerWideOpenPrs <= platformReport.thresholds.maxOpenPrs;
|
||||||
|
const ownerIssueQueueCurrent = ownerWideOpenIssues === null
|
||||||
|
|| ownerWideOpenIssues <= platformReport.thresholds.maxOpenIssues;
|
||||||
|
const ownerPrEvidence = ownerWideOpenPrs === null
|
||||||
|
? ''
|
||||||
|
: `; ${ownerWideOpenPrs} owner-wide open PRs after cleanup`;
|
||||||
|
const ownerIssueEvidence = ownerWideOpenIssues === null
|
||||||
|
? ''
|
||||||
|
: `; ${ownerWideOpenIssues} owner-wide open issues after cleanup`;
|
||||||
const discussionsCurrent = githubLive
|
const discussionsCurrent = githubLive
|
||||||
&& platformReport.github.totals.discussionsNeedingMaintainerTouch === 0
|
&& platformReport.github.totals.discussionsNeedingMaintainerTouch === 0
|
||||||
&& platformReport.github.totals.discussionsMissingAcceptedAnswer === 0;
|
&& platformReport.github.totals.discussionsMissingAcceptedAnswer === 0;
|
||||||
@@ -531,22 +603,30 @@ function buildRequirements(rootDir, platformReport) {
|
|||||||
buildRequirement(
|
buildRequirement(
|
||||||
'public-pr-budget',
|
'public-pr-budget',
|
||||||
'Keep public PRs below 20',
|
'Keep public PRs below 20',
|
||||||
'scripts/platform-audit.js live GitHub sweep',
|
ownerWideOpenPrs === null
|
||||||
queuesCurrent ? 'current' : 'in_progress',
|
? 'scripts/platform-audit.js live GitHub sweep'
|
||||||
|
: 'scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger',
|
||||||
|
trackedPrQueueCurrent && ownerPrQueueCurrent ? 'current' : 'in_progress',
|
||||||
githubLive
|
githubLive
|
||||||
? `${platformReport.github.totals.openPrs} open PRs across ${platformReport.github.repos.length} tracked repos`
|
? `${platformReport.github.totals.openPrs} open PRs across ${platformReport.github.repos.length} tracked repos${ownerPrEvidence}`
|
||||||
: 'live GitHub queue readback was skipped or failed',
|
: 'live GitHub queue readback was skipped or failed',
|
||||||
queuesCurrent ? 'repeat before release' : 'run live platform:audit and drain PR queue'
|
trackedPrQueueCurrent && ownerPrQueueCurrent
|
||||||
|
? 'repeat platform:audit and owner-wide gh search before release'
|
||||||
|
: 'run live platform:audit and owner-wide gh search, then drain PR queue'
|
||||||
),
|
),
|
||||||
buildRequirement(
|
buildRequirement(
|
||||||
'public-issue-budget',
|
'public-issue-budget',
|
||||||
'Keep public issues below 20',
|
'Keep public issues below 20',
|
||||||
'scripts/platform-audit.js live GitHub sweep',
|
ownerWideOpenIssues === null
|
||||||
queuesCurrent ? 'current' : 'in_progress',
|
? 'scripts/platform-audit.js live GitHub sweep'
|
||||||
|
: 'scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger',
|
||||||
|
trackedIssueQueueCurrent && ownerIssueQueueCurrent ? 'current' : 'in_progress',
|
||||||
githubLive
|
githubLive
|
||||||
? `${platformReport.github.totals.openIssues} open issues across ${platformReport.github.repos.length} tracked repos`
|
? `${platformReport.github.totals.openIssues} open issues across ${platformReport.github.repos.length} tracked repos${ownerIssueEvidence}`
|
||||||
: 'live GitHub queue readback was skipped or failed',
|
: 'live GitHub queue readback was skipped or failed',
|
||||||
queuesCurrent ? 'repeat before release' : 'run live platform:audit and drain issue queue'
|
trackedIssueQueueCurrent && ownerIssueQueueCurrent
|
||||||
|
? 'repeat platform:audit and owner-wide gh search before release'
|
||||||
|
: 'run live platform:audit and owner-wide gh search, then drain issue queue'
|
||||||
),
|
),
|
||||||
buildRequirement(
|
buildRequirement(
|
||||||
'repository-discussions',
|
'repository-discussions',
|
||||||
@@ -602,12 +682,19 @@ function buildRequirements(rootDir, platformReport) {
|
|||||||
buildRequirement(
|
buildRequirement(
|
||||||
'naming-and-plugin-publication',
|
'naming-and-plugin-publication',
|
||||||
'Prepare name-change, Claude plugin, and Codex plugin paths',
|
'Prepare name-change, Claude plugin, and Codex plugin paths',
|
||||||
'naming-and-publication-matrix plus publication-readiness',
|
'naming-and-publication-matrix plus release-name-plugin-publication checklist plus publication-readiness',
|
||||||
includesAll(namingMatrix, ['Claude plugin', 'Codex plugin', 'npm package', 'Publication Paths'])
|
includesAll(namingMatrix, ['Claude plugin', 'Codex plugin', 'npm package', 'Publication Paths'])
|
||||||
|
&& includesAll(releasePublicationChecklist, [
|
||||||
|
'Everything Claude Code (ECC)',
|
||||||
|
'ecc-universal',
|
||||||
|
'claude plugin tag .claude-plugin --dry-run',
|
||||||
|
'codex plugin marketplace add',
|
||||||
|
'Do not rename the repo or package until rc.1 is published'
|
||||||
|
])
|
||||||
&& includesAll(publicationReadiness, ['Claude plugin', 'Codex plugin'])
|
&& includesAll(publicationReadiness, ['Claude plugin', 'Codex plugin'])
|
||||||
? 'in_progress'
|
? 'in_progress'
|
||||||
: 'not_complete',
|
: 'not_complete',
|
||||||
'naming matrix and plugin readiness gates exist',
|
'naming matrix, release publication checklist, and plugin readiness gates exist',
|
||||||
'real tag/push, marketplace submission, and final channel choice remain approval-gated'
|
'real tag/push, marketplace submission, and final channel choice remain approval-gated'
|
||||||
),
|
),
|
||||||
buildRequirement(
|
buildRequirement(
|
||||||
@@ -740,7 +827,7 @@ function buildReport(options) {
|
|||||||
next_work_order: [
|
next_work_order: [
|
||||||
'Regenerate this dashboard from the final release commit before publication evidence is recorded.',
|
'Regenerate this dashboard from the final release commit before publication evidence is recorded.',
|
||||||
'Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.',
|
'Repeat ITO-57 Linear/project status sync after the next significant merge batch or advisory-source refresh.',
|
||||||
'Replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate before publishing native-payments copy.',
|
'Create or verify Marketplace-managed Pro target billing-state with webhook provenance, configure the target account and INTERNAL_API_SECRET, then rerun target readback and the live announcement gate before publishing native-payments copy.',
|
||||||
'Resume ITO-45, ITO-46, and ITO-56 only after the generated dashboard and final release gates are refreshed.',
|
'Resume ITO-45, ITO-46, and ITO-56 only after the generated dashboard and final release gates are refreshed.',
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const REQUIRED_ARTIFACTS = [
|
|||||||
`${RELEASE_DIR}/operator-readiness-dashboard-2026-05-18.md`,
|
`${RELEASE_DIR}/operator-readiness-dashboard-2026-05-18.md`,
|
||||||
`${RELEASE_DIR}/release-url-ledger-2026-05-18.md`,
|
`${RELEASE_DIR}/release-url-ledger-2026-05-18.md`,
|
||||||
`${RELEASE_DIR}/naming-and-publication-matrix.md`,
|
`${RELEASE_DIR}/naming-and-publication-matrix.md`,
|
||||||
|
`${RELEASE_DIR}/release-name-plugin-publication-checklist-2026-05-18.md`,
|
||||||
`${RELEASE_DIR}/x-thread.md`,
|
`${RELEASE_DIR}/x-thread.md`,
|
||||||
`${RELEASE_DIR}/linkedin-post.md`,
|
`${RELEASE_DIR}/linkedin-post.md`,
|
||||||
`${RELEASE_DIR}/article-outline.md`,
|
`${RELEASE_DIR}/article-outline.md`,
|
||||||
@@ -39,7 +40,7 @@ const REQUIRED_ARTIFACTS = [
|
|||||||
|
|
||||||
const REQUIRED_VERIFICATION_COMMANDS = [
|
const REQUIRED_VERIFICATION_COMMANDS = [
|
||||||
'git status --short --branch',
|
'git status --short --branch',
|
||||||
'node scripts/platform-audit.js --format json --allow-untracked docs/drafts/',
|
'node scripts/platform-audit.js --json',
|
||||||
'npm run preview-pack:smoke',
|
'npm run preview-pack:smoke',
|
||||||
'npm run harness:adapters -- --check',
|
'npm run harness:adapters -- --check',
|
||||||
'npm run harness:audit -- --format json',
|
'npm run harness:audit -- --format json',
|
||||||
|
|||||||
164
skills/blender-motion-state-inspection/SKILL.md
Normal file
164
skills/blender-motion-state-inspection/SKILL.md
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
---
|
||||||
|
name: blender-motion-state-inspection
|
||||||
|
description: Use this skill when inspecting Blender characters, rigs, poses, animation retargeting, ground contact, facing direction, or model-vs-motion alignment where screenshots alone are not enough.
|
||||||
|
origin: ECC
|
||||||
|
tools: Read, Write, Edit, Bash, Grep, Glob
|
||||||
|
---
|
||||||
|
|
||||||
|
# Blender Motion State Inspection
|
||||||
|
|
||||||
|
## When to Use
|
||||||
|
|
||||||
|
- A Blender character looks twisted, mirrored, flattened, offset, or foot-sliding in an animation.
|
||||||
|
- A user asks whether an imported avatar, armature, or retargeted motion matches an expected pose.
|
||||||
|
- You need to compare rendered evidence with structured facts such as bones, bounding boxes, contacts, and facing vectors.
|
||||||
|
- A workflow depends on deciding whether a model is a character, prop, proxy mesh, control rig, or broken import.
|
||||||
|
|
||||||
|
## Core Principle
|
||||||
|
|
||||||
|
Do not judge animated 3D assets only from screenshots. Screenshots are review evidence, but they hide axis conventions, bone names, object scale, local transforms, parented meshes, material slots, and frame-by-frame contact state.
|
||||||
|
|
||||||
|
First extract structured Blender state, then use viewport screenshots or renders to confirm what the facts imply.
|
||||||
|
|
||||||
|
## How It Works
|
||||||
|
|
||||||
|
1. Establish the clean scene and asset baseline before judging motion.
|
||||||
|
2. Extract structured facts from Blender using an exporter or Blender Python run inside Blender's own interpreter.
|
||||||
|
3. Sample the frames most likely to expose contact, orientation, scale, and retargeting errors.
|
||||||
|
4. Compare the measured facts against the user's expected pose, direction, ground plane, and render goal.
|
||||||
|
5. Return a concise report that separates confirmed facts, likely causes, and required fixes.
|
||||||
|
|
||||||
|
## Inspection Workflow
|
||||||
|
|
||||||
|
1. Inventory the scene.
|
||||||
|
- List meshes, armatures, empties, cameras, lights, modifiers, parent relationships, and hidden objects.
|
||||||
|
- Separate character meshes from helper/proxy geometry before judging the avatar.
|
||||||
|
- Record object-space and world-space bounding boxes.
|
||||||
|
|
||||||
|
2. Identify the skeleton.
|
||||||
|
- Capture armature names, pose bones, bone heads/tails, roll, parent chains, constraints, and rest-pose axes.
|
||||||
|
- Map semantic bones such as hips, spine, neck, head, shoulders, elbows, hands, thighs, knees, ankles, and feet.
|
||||||
|
- Flag missing left/right pairs and unusual naming schemes.
|
||||||
|
|
||||||
|
3. Determine forward, up, and side axes.
|
||||||
|
- Use the pelvis, spine, shoulders, hips, head, and feet together; do not rely on a single mesh normal.
|
||||||
|
- Compare local armature axes with world axes and imported file conventions such as glTF Y-up vs Blender Z-up.
|
||||||
|
- Mark likely mirrored or backwards imports when face/head/feet direction conflicts with root motion.
|
||||||
|
|
||||||
|
4. Sample animation frames.
|
||||||
|
- Inspect first, middle, contact, airborne, and extreme frames.
|
||||||
|
- Record root location, root heading, pelvis height, torso lean, limb directions, foot clearance, and mesh bounds.
|
||||||
|
- For long or fast motion, sample more densely around flips, landings, turns, collisions, and floor contacts.
|
||||||
|
|
||||||
|
5. Check model integrity before retargeting blame.
|
||||||
|
- Confirm the clean baseline shape before applying animation.
|
||||||
|
- Preserve original mesh, materials, armature, and skinning unless the user explicitly asks for repair.
|
||||||
|
- Treat unexplained sphere-like blobs, giant proxy meshes, or crushed bodies as import/selection issues until proven otherwise.
|
||||||
|
|
||||||
|
6. Diagnose contact and motion issues.
|
||||||
|
- Ground penetration: compare lowest foot or shoe vertices with floor height per frame.
|
||||||
|
- Foot sliding: compare foot world positions across planted frames.
|
||||||
|
- Leg crossover: compare left/right thigh, knee, ankle, and foot side ordering.
|
||||||
|
- Twist damage: compare bone swing direction separately from roll/twist around the limb axis.
|
||||||
|
- Scale drift: compare animated mesh bounds against the clean baseline bounds.
|
||||||
|
|
||||||
|
7. Report facts before opinions.
|
||||||
|
- Include frame numbers, object names, bone names, world coordinates, and thresholds.
|
||||||
|
- Separate confirmed failures from visual suspicions.
|
||||||
|
- Attach screenshots only after the structured state explains what to look for.
|
||||||
|
|
||||||
|
## Recommended Report Shape
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Blender Motion Inspection
|
||||||
|
|
||||||
|
### Scene Inventory
|
||||||
|
- Character candidates:
|
||||||
|
- Armatures:
|
||||||
|
- Helper/proxy objects:
|
||||||
|
- Cameras/lights:
|
||||||
|
|
||||||
|
### Orientation
|
||||||
|
- World up:
|
||||||
|
- Character forward:
|
||||||
|
- Root heading:
|
||||||
|
- Mirrored/backwards risk:
|
||||||
|
|
||||||
|
### Baseline Integrity
|
||||||
|
- Clean mesh bounds:
|
||||||
|
- Animated mesh bounds:
|
||||||
|
- Materials/skin preserved:
|
||||||
|
- Suspicious non-character meshes:
|
||||||
|
|
||||||
|
### Frame Findings
|
||||||
|
| Frame | Finding | Evidence |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | Clean baseline pose | hips/spine/feet aligned |
|
||||||
|
| 96 | Foot penetrates floor | left_foot min_z = -0.04 |
|
||||||
|
|
||||||
|
### Verdict
|
||||||
|
- Pass/fail:
|
||||||
|
- Required fix:
|
||||||
|
- Render readiness:
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Walk Cycle With Foot Sliding
|
||||||
|
|
||||||
|
Scenario: a retargeted character appears to skate during a walk cycle, but the front camera angle makes the foot contact hard to judge.
|
||||||
|
|
||||||
|
Apply the workflow:
|
||||||
|
- Inventory the scene: character mesh `HeroBody`, armature `HeroRig`, ground plane `Floor`, no hidden proxy meshes.
|
||||||
|
- Identify the skeleton: semantic feet are `foot.L` and `foot.R`; hips are `pelvis`; root bone is `root`.
|
||||||
|
- Sample animation frames: inspect frames 1, 18, 24, 30, 42, and 48 around planted-foot moments.
|
||||||
|
- Diagnose contact and motion issues: compare world-space foot locations during planted frames.
|
||||||
|
|
||||||
|
Extracted facts:
|
||||||
|
|
||||||
|
| Frame | Fact | Evidence |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 18 | Left foot is planted | `foot.L min_z = 0.004`, toe and heel both near floor |
|
||||||
|
| 24 | Left foot slides while planted | `foot.L x = 0.21 -> 0.28` over six frames |
|
||||||
|
| 30 | Pelvis keeps moving forward | `pelvis y = 1.14 -> 1.31` |
|
||||||
|
|
||||||
|
Verdict: fail for render readiness. The motion needs foot-lock cleanup or retargeting constraint review; the body mesh does not need proportion changes.
|
||||||
|
|
||||||
|
### Backwards Imported Character
|
||||||
|
|
||||||
|
Scenario: a character looks correct in a still frame, but the animation moves opposite the expected travel direction.
|
||||||
|
|
||||||
|
Apply the workflow:
|
||||||
|
- Determine forward, up, and side axes: compare head, chest, feet, and root motion.
|
||||||
|
- Sample animation frames: inspect frame 1 and the midpoint of the travel path.
|
||||||
|
- Report facts before opinions: include the root heading and model-facing direction separately.
|
||||||
|
|
||||||
|
Extracted facts:
|
||||||
|
|
||||||
|
| Frame | Fact | Evidence |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | Character face points toward world `-Y` | head/chest vector from `neck` to `head` resolves to `-Y` |
|
||||||
|
| 72 | Root motion travels toward world `+Y` | `root y = 0.0 -> 2.8` |
|
||||||
|
| 72 | Feet remain visually forward-facing opposite travel | toe bones point `-Y` while displacement is `+Y` |
|
||||||
|
|
||||||
|
Verdict: likely backwards import or retargeting forward-axis mismatch. Fix the import/retarget axis mapping before editing animation curves.
|
||||||
|
|
||||||
|
## Practical Thresholds
|
||||||
|
|
||||||
|
- Assume Blender's default meter-scale units unless the scene unit scale says otherwise.
|
||||||
|
- Treat ground penetration above 1-2 cm as visible unless the floor is soft or intentionally stylized.
|
||||||
|
- Treat a sudden scale change above 5% as a likely rig, constraint, or transform inheritance problem.
|
||||||
|
- Treat left/right ankle side-order flips during airborne inverted motion as leg crossover risk even if it recovers later.
|
||||||
|
- Treat root heading jumps above 30 degrees per frame as suspicious unless the source motion includes a snap turn.
|
||||||
|
|
||||||
|
## Anti-Patterns
|
||||||
|
|
||||||
|
- Do not modify body proportions to force pose matching unless the task is explicitly mesh repair.
|
||||||
|
- Do not bake away the clean baseline before recording it.
|
||||||
|
- Do not use one rendered camera angle as proof that a pose is correct.
|
||||||
|
- Do not delete helper objects until you have recorded why they are not part of the character.
|
||||||
|
- Do not assume an avatar faces +Y, -Y, +X, or -X without checking head, feet, torso, and root motion together.
|
||||||
|
|
||||||
|
## Tooling Notes
|
||||||
|
|
||||||
|
If a Blender state exporter is available, prefer JSON that includes meshes, armatures, pose bones, materials, contacts, bounding boxes, and sampled animation frames. If no exporter exists, run a small Blender Python script through Blender itself, for example `blender --background scene.blend --python collect_motion_state.py`, because `bpy` is not available in a normal system Python interpreter.
|
||||||
@@ -251,6 +251,45 @@ function run() {
|
|||||||
});
|
});
|
||||||
})) passed++; else failed++;
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('ignores explicit Claude Code deny-wall IOC entries', () => {
|
||||||
|
withFixture({
|
||||||
|
'home/.claude/settings.local.json': JSON.stringify({
|
||||||
|
permissions: {
|
||||||
|
deny: [
|
||||||
|
'Bash(*filev2.getsession.org*)',
|
||||||
|
'Bash(*router_runtime.js*)',
|
||||||
|
'Bash(*gh-token-monitor*)',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}, null, 2),
|
||||||
|
}, rootDir => {
|
||||||
|
const homeDir = path.join(rootDir, 'home');
|
||||||
|
const result = scanSupplyChainIocs({ rootDir, home: true, homeDir });
|
||||||
|
assert.deepStrictEqual(result.findings, []);
|
||||||
|
});
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('still rejects Claude Code hooks when matching IOCs also appear in deny entries', () => {
|
||||||
|
withFixture({
|
||||||
|
'home/.claude/settings.local.json': JSON.stringify({
|
||||||
|
permissions: {
|
||||||
|
deny: [
|
||||||
|
'Bash(*router_runtime.js*)',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
hooks: {
|
||||||
|
PostToolUse: [{
|
||||||
|
hooks: [{ command: 'node ~/.claude/router_runtime.js' }],
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
}, null, 2),
|
||||||
|
}, rootDir => {
|
||||||
|
const homeDir = path.join(rootDir, 'home');
|
||||||
|
const result = scanSupplyChainIocs({ rootDir, home: true, homeDir });
|
||||||
|
assert.ok(result.findings.some(finding => finding.indicator === 'router_runtime.js'));
|
||||||
|
});
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
if (test('rejects current dead-drop and import-time payload markers', () => {
|
if (test('rejects current dead-drop and import-time payload markers', () => {
|
||||||
withFixture({
|
withFixture({
|
||||||
'.vscode/tasks.json': JSON.stringify({
|
'.vscode/tasks.json': JSON.stringify({
|
||||||
|
|||||||
@@ -244,12 +244,27 @@ function run() {
|
|||||||
|
|
||||||
if (test('rejects actions/cache in workflows with id-token write', () => {
|
if (test('rejects actions/cache in workflows with id-token write', () => {
|
||||||
const result = runValidator({
|
const result = runValidator({
|
||||||
'unsafe-oidc-cache.yml': `name: Unsafe\non:\n push:\npermissions:\n contents: read\n id-token: write\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/cache@v5\n with:\n path: ~/.npm\n key: cache\n`,
|
'unsafe-oidc-cache.yml': `name: Unsafe\non:\n push:\npermissions:\n contents: read\njobs:\n release:\n runs-on: ubuntu-latest\n permissions:\n contents: read\n id-token: write\n steps:\n - uses: actions/cache@v5\n with:\n path: ~/.npm\n key: cache\n`,
|
||||||
});
|
});
|
||||||
assert.notStrictEqual(result.status, 0, 'Expected validator to fail on id-token workflow cache use');
|
assert.notStrictEqual(result.status, 0, 'Expected validator to fail on id-token workflow cache use');
|
||||||
assert.match(result.stderr, /id-token: write must not restore or save shared dependency caches/);
|
assert.match(result.stderr, /id-token: write must not restore or save shared dependency caches/);
|
||||||
})) passed++; else failed++;
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('rejects workflow-scoped id-token write', () => {
|
||||||
|
const result = runValidator({
|
||||||
|
'unsafe-workflow-oidc.yml': `name: Unsafe\non:\n push:\npermissions:\n contents: read\n id-token: write\njobs:\n verify:\n runs-on: ubuntu-latest\n steps:\n - run: npm ci --ignore-scripts\n`,
|
||||||
|
});
|
||||||
|
assert.notStrictEqual(result.status, 0, 'Expected validator to fail on workflow-level id-token write');
|
||||||
|
assert.match(result.stderr, /id-token: write must be scoped to a publish-only job/);
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('allows job-scoped id-token for publish-only jobs', () => {
|
||||||
|
const result = runValidator({
|
||||||
|
'safe-publish-oidc.yml': `name: Safe\non:\n push:\npermissions:\n contents: read\njobs:\n publish:\n runs-on: ubuntu-latest\n permissions:\n contents: write\n id-token: write\n steps:\n - run: npm publish package.tgz --access public --provenance\n`,
|
||||||
|
});
|
||||||
|
assert.strictEqual(result.status, 0, result.stderr || result.stdout);
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
if (test('rejects npm audit without registry signature verification', () => {
|
if (test('rejects npm audit without registry signature verification', () => {
|
||||||
const result = runValidator({
|
const result = runValidator({
|
||||||
'unsafe-audit.yml': `name: Unsafe\non:\n push:\njobs:\n audit:\n runs-on: ubuntu-latest\n steps:\n - run: npm audit --audit-level=high\n`,
|
'unsafe-audit.yml': `name: Unsafe\non:\n push:\njobs:\n audit:\n runs-on: ubuntu-latest\n steps:\n - run: npm audit --audit-level=high\n`,
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ const expectedReleaseFiles = [
|
|||||||
'quickstart.md',
|
'quickstart.md',
|
||||||
'preview-pack-manifest.md',
|
'preview-pack-manifest.md',
|
||||||
'publication-readiness.md',
|
'publication-readiness.md',
|
||||||
|
'release-name-plugin-publication-checklist-2026-05-18.md',
|
||||||
];
|
];
|
||||||
|
|
||||||
test('release candidate directory includes the public launch pack', () => {
|
test('release candidate directory includes the public launch pack', () => {
|
||||||
@@ -174,6 +175,7 @@ test('preview pack manifest assembles release, Hermes, and publication gates', (
|
|||||||
'scripts/preview-pack-smoke.js',
|
'scripts/preview-pack-smoke.js',
|
||||||
'docs/releases/2.0.0-rc.1/publication-readiness.md',
|
'docs/releases/2.0.0-rc.1/publication-readiness.md',
|
||||||
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md',
|
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md',
|
||||||
|
'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md',
|
||||||
]) {
|
]) {
|
||||||
assert.ok(manifest.includes(artifact), `preview pack manifest missing ${artifact}`);
|
assert.ok(manifest.includes(artifact), `preview pack manifest missing ${artifact}`);
|
||||||
}
|
}
|
||||||
@@ -229,6 +231,7 @@ test('launch checklist records the ecc2 alpha version policy', () => {
|
|||||||
test('publication readiness checklist gates public release actions on evidence', () => {
|
test('publication readiness checklist gates public release actions on evidence', () => {
|
||||||
const source = read('docs/releases/2.0.0-rc.1/publication-readiness.md');
|
const source = read('docs/releases/2.0.0-rc.1/publication-readiness.md');
|
||||||
const may15Evidence = read('docs/releases/2.0.0-rc.1/publication-evidence-2026-05-15.md');
|
const may15Evidence = read('docs/releases/2.0.0-rc.1/publication-evidence-2026-05-15.md');
|
||||||
|
const discussionPlaybook = read('docs/architecture/discussion-response-playbook.md');
|
||||||
|
|
||||||
for (const section of [
|
for (const section of [
|
||||||
'## Release Identity Matrix',
|
'## Release Identity Matrix',
|
||||||
@@ -287,14 +290,64 @@ test('publication readiness checklist gates public release actions on evidence',
|
|||||||
assert.ok(may15Evidence.includes('Plugin Directory publishing is still blocked'));
|
assert.ok(may15Evidence.includes('Plugin Directory publishing is still blocked'));
|
||||||
assert.ok(may15Evidence.includes('announcementGate.ready === true'));
|
assert.ok(may15Evidence.includes('announcementGate.ready === true'));
|
||||||
assert.ok(source.includes('ECC-Tools #73 added announcementGate'));
|
assert.ok(source.includes('ECC-Tools #73 added announcementGate'));
|
||||||
assert.ok(source.includes('official Plugin Directory publishing and self-serve management are documented as coming soon'));
|
assert.ok(source.includes('do not claim official Plugin Directory listing before OpenAI submission evidence'));
|
||||||
|
assert.ok(source.includes('release-name-plugin-publication-checklist-2026-05-18.md'));
|
||||||
|
assert.ok(source.includes('Release name and plugin publication checklist'));
|
||||||
assert.ok(may15Evidence.includes('| Trunk discussions | GraphQL discussion count and maintainer-touch sweep | 58 total discussions;'));
|
assert.ok(may15Evidence.includes('| Trunk discussions | GraphQL discussion count and maintainer-touch sweep | 58 total discussions;'));
|
||||||
assert.ok(source.includes('58 trunk discussions, 0 without maintainer touch'));
|
assert.ok(source.includes('platform audit sampled 58 trunk discussions'));
|
||||||
|
assert.ok(source.includes('0 needing maintainer touch'));
|
||||||
|
assert.ok(source.includes('discussion-response-playbook.md'));
|
||||||
|
for (const expected of [
|
||||||
|
'Public Support',
|
||||||
|
'Maintainer Coordination',
|
||||||
|
'Stale Or Concluded',
|
||||||
|
'Release Announcement',
|
||||||
|
'Security Escalation',
|
||||||
|
'classified as informational',
|
||||||
|
]) {
|
||||||
|
assert.ok(discussionPlaybook.includes(expected), `discussion playbook missing ${expected}`);
|
||||||
|
}
|
||||||
assert.ok(may15Evidence.includes('env -u GITHUB_TOKEN'));
|
assert.ok(may15Evidence.includes('env -u GITHUB_TOKEN'));
|
||||||
assert.ok(may15Evidence.includes('ITO-44'));
|
assert.ok(may15Evidence.includes('ITO-44'));
|
||||||
assert.ok(may15Evidence.includes('0 open PRs, 0 open issues'));
|
assert.ok(may15Evidence.includes('0 open PRs, 0 open issues'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('release name and plugin publication checklist freezes rc.1 surfaces', () => {
|
||||||
|
const checklist = read(
|
||||||
|
'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md'
|
||||||
|
);
|
||||||
|
const launchChecklist = read('docs/releases/2.0.0-rc.1/launch-checklist.md');
|
||||||
|
const referenceArchitecture = read('docs/ECC-2.0-REFERENCE-ARCHITECTURE.md');
|
||||||
|
|
||||||
|
for (const value of [
|
||||||
|
'Everything Claude Code (ECC)',
|
||||||
|
'`affaan-m/everything-claude-code`',
|
||||||
|
'`ecc-universal`',
|
||||||
|
'`ecc` on npm is occupied',
|
||||||
|
'`@affaan-m/ecc` is unclaimed on npm',
|
||||||
|
'Claude plugin',
|
||||||
|
'Codex plugin',
|
||||||
|
'do not claim official directory listing until OpenAI publishing path is available',
|
||||||
|
'Do not rename the repo or package until rc.1 is published',
|
||||||
|
'Do not announce billing, Marketplace, or native payments',
|
||||||
|
]) {
|
||||||
|
assert.ok(checklist.includes(value), `release name/plugin checklist missing ${value}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const command of [
|
||||||
|
'claude plugin validate .claude-plugin/plugin.json',
|
||||||
|
'claude plugin tag .claude-plugin --dry-run',
|
||||||
|
'codex plugin marketplace add --help',
|
||||||
|
'npm publish --tag next --dry-run',
|
||||||
|
'npm run preview-pack:smoke',
|
||||||
|
]) {
|
||||||
|
assert.ok(checklist.includes(command), `release name/plugin checklist missing command ${command}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.ok(launchChecklist.includes('release-name-plugin-publication-checklist-2026-05-18.md'));
|
||||||
|
assert.ok(referenceArchitecture.includes('Keep the release/name/plugin publication checklist current'));
|
||||||
|
});
|
||||||
|
|
||||||
test('release checklist and roadmap link to publication readiness evidence gate', () => {
|
test('release checklist and roadmap link to publication readiness evidence gate', () => {
|
||||||
const launchChecklist = read('docs/releases/2.0.0-rc.1/launch-checklist.md');
|
const launchChecklist = read('docs/releases/2.0.0-rc.1/launch-checklist.md');
|
||||||
const roadmap = read('docs/ECC-2.0-GA-ROADMAP.md');
|
const roadmap = read('docs/ECC-2.0-GA-ROADMAP.md');
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ function readAudit(root) {
|
|||||||
|
|
||||||
function runMonitor(options = {}) {
|
function runMonitor(options = {}) {
|
||||||
if (!PYTHON) {
|
if (!PYTHON) {
|
||||||
throw new Error('Python 3 is required for insaits-security-monitor.py tests');
|
throw new Error('Python 3 was expected to be available for this test run');
|
||||||
}
|
}
|
||||||
|
|
||||||
const tempDir = createTempDir();
|
const tempDir = createTempDir();
|
||||||
@@ -119,6 +119,12 @@ function test(name, fn) {
|
|||||||
function runTests() {
|
function runTests() {
|
||||||
console.log('\n=== Testing insaits-security-monitor.py ===\n');
|
console.log('\n=== Testing insaits-security-monitor.py ===\n');
|
||||||
|
|
||||||
|
if (!PYTHON) {
|
||||||
|
console.log(' SKIP Python 3 not found; insaits-security-monitor.py subprocess tests require a Python runtime');
|
||||||
|
console.log('\nResults: Passed: 0, Failed: 0');
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
let passed = 0;
|
let passed = 0;
|
||||||
let failed = 0;
|
let failed = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -955,6 +955,75 @@ async function runTests() {
|
|||||||
}
|
}
|
||||||
})) passed++; else failed++;
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (await asyncTest('treats HTTP 406 probe responses as healthy reachable Streamable HTTP MCP servers', async () => {
|
||||||
|
const tempDir = createTempDir();
|
||||||
|
const configPath = path.join(tempDir, 'claude.json');
|
||||||
|
const statePath = path.join(tempDir, 'mcp-health.json');
|
||||||
|
const serverScript = path.join(tempDir, 'http-406-server.js');
|
||||||
|
const portFile = path.join(tempDir, 'server-port.txt');
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
serverScript,
|
||||||
|
[
|
||||||
|
"const fs = require('fs');",
|
||||||
|
"const http = require('http');",
|
||||||
|
"const portFile = process.argv[2];",
|
||||||
|
"const server = http.createServer((req, res) => {",
|
||||||
|
" if (String(req.headers.accept || '').includes('text/event-stream')) {",
|
||||||
|
" res.writeHead(200, { 'Content-Type': 'text/event-stream' });",
|
||||||
|
" res.end();",
|
||||||
|
" return;",
|
||||||
|
" }",
|
||||||
|
" res.writeHead(406, { 'Content-Type': 'application/json' });",
|
||||||
|
" res.end(JSON.stringify({ error: 'missing Accept: text/event-stream' }));",
|
||||||
|
"});",
|
||||||
|
"server.listen(0, '127.0.0.1', () => {",
|
||||||
|
" fs.writeFileSync(portFile, String(server.address().port));",
|
||||||
|
"});",
|
||||||
|
"setInterval(() => {}, 1000);"
|
||||||
|
].join('\n')
|
||||||
|
);
|
||||||
|
|
||||||
|
const serverProcess = spawn(process.execPath, [serverScript, portFile], {
|
||||||
|
stdio: 'ignore'
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const port = waitForFile(portFile).trim();
|
||||||
|
await waitForHttpReady(`http://127.0.0.1:${port}/mcp`);
|
||||||
|
|
||||||
|
writeConfig(configPath, {
|
||||||
|
mcpServers: {
|
||||||
|
streamable: {
|
||||||
|
type: 'http',
|
||||||
|
url: `http://127.0.0.1:${port}/mcp`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const input = { tool_name: 'mcp__streamable__initialize', tool_input: {} };
|
||||||
|
const result = runHook(input, {
|
||||||
|
CLAUDE_HOOK_EVENT_NAME: 'PreToolUse',
|
||||||
|
ECC_MCP_CONFIG_PATH: configPath,
|
||||||
|
ECC_MCP_HEALTH_STATE_PATH: statePath,
|
||||||
|
ECC_MCP_HEALTH_TIMEOUT_MS: '2000'
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.strictEqual(
|
||||||
|
result.code,
|
||||||
|
0,
|
||||||
|
`Expected HTTP 406 probe to be treated as healthy: ${hookFailureDetails(result, statePath)}`
|
||||||
|
);
|
||||||
|
assert.strictEqual(result.stdout.trim(), JSON.stringify(input), 'Expected original JSON on stdout');
|
||||||
|
|
||||||
|
const state = readState(statePath);
|
||||||
|
assert.strictEqual(state.servers.streamable.status, 'healthy', 'Expected Streamable HTTP MCP server to be marked healthy');
|
||||||
|
} finally {
|
||||||
|
serverProcess.kill('SIGTERM');
|
||||||
|
cleanupTempDir(tempDir);
|
||||||
|
}
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
// Windows-only: child_process.spawn cannot resolve .cmd/.bat shims for
|
// Windows-only: child_process.spawn cannot resolve .cmd/.bat shims for
|
||||||
// bare PATH commands without an extension, and Node 18.20+/20.12+ refuse
|
// bare PATH commands without an extension, and Node 18.20+/20.12+ refuse
|
||||||
// to spawn .cmd targets without `shell: true` (CVE-2024-27980). The probe
|
// to spawn .cmd targets without `shell: true` (CVE-2024-27980). The probe
|
||||||
|
|||||||
@@ -109,6 +109,74 @@ if (
|
|||||||
passed++;
|
passed++;
|
||||||
else failed++;
|
else failed++;
|
||||||
|
|
||||||
|
// Invisible code points newly covered by the denylist. These were missing
|
||||||
|
// from the previous denylist and silently passed through both detection and
|
||||||
|
// `--write` mode. Each is a documented LLM-prompt-injection vector
|
||||||
|
// (Tag block "ASCII smuggling"; the other invisibles are widely cited in
|
||||||
|
// homograph / Discord / Twitter smuggling references).
|
||||||
|
|
||||||
|
const NEWLY_COVERED_RANGES = [
|
||||||
|
{ codePoint: 0xE0041, label: 'Tag block U+E0041 (TAG LATIN CAPITAL LETTER A)' },
|
||||||
|
{ codePoint: 0xE007F, label: 'Tag block U+E007F (CANCEL TAG, range end)' },
|
||||||
|
{ codePoint: 0x180E, label: 'U+180E MONGOLIAN VOWEL SEPARATOR' },
|
||||||
|
{ codePoint: 0x115F, label: 'U+115F HANGUL CHOSEONG FILLER' },
|
||||||
|
{ codePoint: 0x1160, label: 'U+1160 HANGUL JUNGSEONG FILLER' },
|
||||||
|
{ codePoint: 0x2061, label: 'U+2061 FUNCTION APPLICATION' },
|
||||||
|
{ codePoint: 0x2064, label: 'U+2064 INVISIBLE PLUS (range end)' },
|
||||||
|
{ codePoint: 0x3164, label: 'U+3164 HANGUL FILLER' },
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const { codePoint, label } of NEWLY_COVERED_RANGES) {
|
||||||
|
if (
|
||||||
|
test(`detects ${label}`, () => {
|
||||||
|
const root = makeTempRoot('ecc-unicode-newly-covered-');
|
||||||
|
fs.mkdirSync(path.join(root, 'docs'), { recursive: true });
|
||||||
|
const hex = codePoint.toString(16).toUpperCase().padStart(4, '0');
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(root, 'docs', `probe-${hex}.md`),
|
||||||
|
`# Probe\n\nBenign${String.fromCodePoint(codePoint)}text\n`
|
||||||
|
);
|
||||||
|
const result = runCheck(root);
|
||||||
|
assert.notStrictEqual(result.status, 0,
|
||||||
|
`expected exit non-zero on U+${hex}, got ${result.status}: ${result.stderr}`);
|
||||||
|
assert.match(result.stderr, new RegExp(`dangerous-invisible U\\+${hex}`),
|
||||||
|
`expected violation message for U+${hex}, got: ${result.stderr}`);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
passed++;
|
||||||
|
else failed++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
test('write mode strips newly-covered invisibles from markdown', () => {
|
||||||
|
const root = makeTempRoot('ecc-unicode-newly-covered-write-');
|
||||||
|
fs.mkdirSync(path.join(root, 'docs'), { recursive: true });
|
||||||
|
const tagHidden = [...Array(5)].map((_, i) => String.fromCodePoint(0xE0041 + i)).join('');
|
||||||
|
const mongolianHidden = String.fromCodePoint(0x180E);
|
||||||
|
const filePath = path.join(root, 'docs', 'mixed.md');
|
||||||
|
fs.writeFileSync(filePath, `# Title\n\nBenign${tagHidden}${mongolianHidden}text.\n`);
|
||||||
|
|
||||||
|
const writeResult = runCheck(root, ['--write']);
|
||||||
|
assert.strictEqual(writeResult.status, 0,
|
||||||
|
`expected --write to succeed, got ${writeResult.status}: ${writeResult.stderr}`);
|
||||||
|
|
||||||
|
const sanitized = fs.readFileSync(filePath, 'utf8');
|
||||||
|
assert.doesNotMatch(sanitized, /[\u{E0000}-\u{E007F}]/u,
|
||||||
|
'expected tag block characters stripped');
|
||||||
|
assert.doesNotMatch(sanitized, /\u{180E}/u,
|
||||||
|
'expected U+180E stripped');
|
||||||
|
assert.strictEqual(sanitized, '# Title\n\nBenigntext.\n',
|
||||||
|
'expected only the invisible characters removed, surrounding text preserved');
|
||||||
|
|
||||||
|
// Re-run without --write; should now pass cleanly.
|
||||||
|
const clean = runCheck(root);
|
||||||
|
assert.strictEqual(clean.status, 0,
|
||||||
|
`expected post-sanitize re-run to pass, got: ${clean.stderr}`);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
passed++;
|
||||||
|
else failed++;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
test('skips Python virtual environments', () => {
|
test('skips Python virtual environments', () => {
|
||||||
const root = makeTempRoot('ecc-unicode-venv-');
|
const root = makeTempRoot('ecc-unicode-venv-');
|
||||||
|
|||||||
@@ -66,15 +66,32 @@ function seedRepo(rootDir, overrides = {}) {
|
|||||||
'eb69412',
|
'eb69412',
|
||||||
'Marketplace webhook provenance',
|
'Marketplace webhook provenance',
|
||||||
'2859678',
|
'2859678',
|
||||||
|
'Wrangler OAuth readback',
|
||||||
|
'42653f9',
|
||||||
|
'target account billing readback',
|
||||||
|
'632e059',
|
||||||
|
'69ca535',
|
||||||
|
'team feedback controls',
|
||||||
|
'e56fc1a',
|
||||||
|
'1Password CLI authorization timed out',
|
||||||
|
'Cloudflare API auth returned `Authentication error [code: 10000]`',
|
||||||
'announcementGate',
|
'announcementGate',
|
||||||
'ITO-55',
|
'ITO-55',
|
||||||
'Linear live sync is current for the May 17 merge batch',
|
'Linear live sync is current for the May 17 merge batch',
|
||||||
'operator progress snapshot'
|
'operator progress snapshot'
|
||||||
].join('\n'),
|
].join('\n'),
|
||||||
'docs/releases/2.0.0-rc.1/publication-readiness.md': 'Claude plugin Codex plugin',
|
'docs/releases/2.0.0-rc.1/publication-readiness.md': 'Claude plugin Codex plugin release-name-plugin-publication-checklist-2026-05-18.md',
|
||||||
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md': 'Claude plugin Codex plugin npm package Publication Paths',
|
'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md': 'Claude plugin Codex plugin npm package Publication Paths',
|
||||||
|
'docs/releases/2.0.0-rc.1/release-name-plugin-publication-checklist-2026-05-18.md': [
|
||||||
|
'Everything Claude Code (ECC)',
|
||||||
|
'ecc-universal',
|
||||||
|
'claude plugin tag .claude-plugin --dry-run',
|
||||||
|
'codex plugin marketplace add',
|
||||||
|
'Do not rename the repo or package until rc.1 is published'
|
||||||
|
].join('\n'),
|
||||||
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
|
'docs/releases/2.0.0-rc.1/preview-pack-manifest.md': [
|
||||||
'publication-readiness.md release-notes.md quickstart.md',
|
'publication-readiness.md release-notes.md quickstart.md',
|
||||||
|
'release-name-plugin-publication-checklist-2026-05-18.md',
|
||||||
'`scripts/preview-pack-smoke.js`',
|
'`scripts/preview-pack-smoke.js`',
|
||||||
'npm run preview-pack:smoke'
|
'npm run preview-pack:smoke'
|
||||||
].join('\n'),
|
].join('\n'),
|
||||||
@@ -91,6 +108,12 @@ function seedRepo(rootDir, overrides = {}) {
|
|||||||
'PR queue',
|
'PR queue',
|
||||||
'Not complete'
|
'Not complete'
|
||||||
].join('\n'),
|
].join('\n'),
|
||||||
|
'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md': [
|
||||||
|
'Owner-wide open PRs after cleanup: 0.',
|
||||||
|
'Owner-wide open issues after cleanup: 0.',
|
||||||
|
'Stale dependency-bot PRs closed: 24.',
|
||||||
|
'Stale legacy payments/0EM roadmap issues closed: 72.'
|
||||||
|
].join('\n'),
|
||||||
'docs/HERMES-SETUP.md': 'Hermes setup Public Release Candidate Scope',
|
'docs/HERMES-SETUP.md': 'Hermes setup Public Release Candidate Scope',
|
||||||
'skills/hermes-imports/SKILL.md': 'Hermes imports Sanitization Checklist Do not ship raw workspace exports Output Contract',
|
'skills/hermes-imports/SKILL.md': 'Hermes imports Sanitization Checklist Do not ship raw workspace exports Output Contract',
|
||||||
'docs/stale-pr-salvage-ledger.md': [
|
'docs/stale-pr-salvage-ledger.md': [
|
||||||
@@ -260,12 +283,22 @@ function runTests() {
|
|||||||
)));
|
)));
|
||||||
assert.ok(report.requirements.some(item => (
|
assert.ok(report.requirements.some(item => (
|
||||||
item.id === 'ecc-tools-next-level'
|
item.id === 'ecc-tools-next-level'
|
||||||
&& item.gap === 'replace the invalid Cloudflare credential, create or verify Marketplace-managed Pro billing-state with webhook provenance, then run `billing:kv-readback -- --require-ready` and the live announcement gate'
|
&& item.gap === 'authorize Cloudflare API or 1Password CLI access, configure the target Marketplace Pro account and INTERNAL_API_SECRET, create or replay Marketplace Pro webhook state, then rerun target readback and the live announcement gate'
|
||||||
&& item.evidence.includes('operator-visible promotion output details')
|
&& item.evidence.includes('operator-visible promotion output details')
|
||||||
&& item.evidence.includes('hosted promotion judge audit traces')
|
&& item.evidence.includes('hosted promotion judge audit traces')
|
||||||
&& item.evidence.includes('billing announcement preflight')
|
&& item.evidence.includes('billing announcement preflight')
|
||||||
&& item.evidence.includes('aggregate production billing KV readback')
|
&& item.evidence.includes('aggregate production billing KV readback')
|
||||||
|
&& item.evidence.includes('Wrangler OAuth readback')
|
||||||
|
&& item.evidence.includes('target-account billing readback')
|
||||||
&& item.evidence.includes('provenance-aware Marketplace billing-state gates')
|
&& item.evidence.includes('provenance-aware Marketplace billing-state gates')
|
||||||
|
&& item.evidence.includes('hosted team-learning feedback controls')
|
||||||
|
&& item.evidence.includes('ECC-Tools Dependabot alert remediation')
|
||||||
|
)));
|
||||||
|
assert.ok(report.requirements.some(item => (
|
||||||
|
item.id === 'naming-and-plugin-publication'
|
||||||
|
&& item.artifact.includes('release-name-plugin-publication checklist')
|
||||||
|
&& item.evidence.includes('release publication checklist')
|
||||||
|
&& item.gap === 'real tag/push, marketplace submission, and final channel choice remain approval-gated'
|
||||||
)));
|
)));
|
||||||
assert.ok(report.requirements.some(item => (
|
assert.ok(report.requirements.some(item => (
|
||||||
item.id === 'supply-chain-local-protection'
|
item.id === 'supply-chain-local-protection'
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ function test(name, fn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function load(relativePath) {
|
function load(relativePath) {
|
||||||
return fs.readFileSync(path.join(repoRoot, relativePath), 'utf8');
|
return fs.readFileSync(path.join(repoRoot, relativePath), 'utf8').replace(/\r\n/g, '\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('\n=== Testing release publish workflow ===\n');
|
console.log('\n=== Testing release publish workflow ===\n');
|
||||||
@@ -32,9 +32,12 @@ for (const workflow of [
|
|||||||
'.github/workflows/reusable-release.yml',
|
'.github/workflows/reusable-release.yml',
|
||||||
]) {
|
]) {
|
||||||
const content = load(workflow);
|
const content = load(workflow);
|
||||||
|
const jobsIndex = content.search(/^jobs:\s*$/m);
|
||||||
|
const workflowHeader = jobsIndex >= 0 ? content.slice(0, jobsIndex) : content;
|
||||||
|
|
||||||
test(`${workflow} grants id-token for npm provenance`, () => {
|
test(`${workflow} scopes id-token to the publish job for npm provenance`, () => {
|
||||||
assert.match(content, /permissions:\s*[\s\S]*id-token:\s*write/m);
|
assert.doesNotMatch(workflowHeader, /id-token:\s*write/);
|
||||||
|
assert.match(content, /\n\s+permissions:\n\s+contents:\s*write\n\s+id-token:\s*write/m);
|
||||||
});
|
});
|
||||||
|
|
||||||
test(`${workflow} configures the npm registry`, () => {
|
test(`${workflow} configures the npm registry`, () => {
|
||||||
@@ -51,7 +54,7 @@ for (const workflow of [
|
|||||||
});
|
});
|
||||||
|
|
||||||
test(`${workflow} publishes new tag versions to npm`, () => {
|
test(`${workflow} publishes new tag versions to npm`, () => {
|
||||||
assert.match(content, /npm publish --access public --provenance/);
|
assert.match(content, /npm publish "\$\{\{ needs\.verify\.outputs\.package_file \}\}" --access public --provenance/);
|
||||||
assert.match(content, /NODE_AUTH_TOKEN:\s*\$\{\{\s*secrets\.NPM_TOKEN\s*\}\}/);
|
assert.match(content, /NODE_AUTH_TOKEN:\s*\$\{\{\s*secrets\.NPM_TOKEN\s*\}\}/);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const INSTALL_SCRIPT = path.join(__dirname, '..', '..', 'scripts', 'install-appl
|
|||||||
const DOCTOR_SCRIPT = path.join(__dirname, '..', '..', 'scripts', 'doctor.js');
|
const DOCTOR_SCRIPT = path.join(__dirname, '..', '..', 'scripts', 'doctor.js');
|
||||||
const REPAIR_SCRIPT = path.join(__dirname, '..', '..', 'scripts', 'repair.js');
|
const REPAIR_SCRIPT = path.join(__dirname, '..', '..', 'scripts', 'repair.js');
|
||||||
const REPO_ROOT = path.join(__dirname, '..', '..');
|
const REPO_ROOT = path.join(__dirname, '..', '..');
|
||||||
|
const CLI_TIMEOUT_MS = 30000;
|
||||||
const CURRENT_PACKAGE_VERSION = JSON.parse(
|
const CURRENT_PACKAGE_VERSION = JSON.parse(
|
||||||
fs.readFileSync(path.join(REPO_ROOT, 'package.json'), 'utf8')
|
fs.readFileSync(path.join(REPO_ROOT, 'package.json'), 'utf8')
|
||||||
).version;
|
).version;
|
||||||
@@ -51,7 +52,7 @@ function runNode(scriptPath, args = [], options = {}) {
|
|||||||
env,
|
env,
|
||||||
encoding: 'utf8',
|
encoding: 'utf8',
|
||||||
stdio: ['pipe', 'pipe', 'pipe'],
|
stdio: ['pipe', 'pipe', 'pipe'],
|
||||||
timeout: 10000,
|
timeout: options.timeout || CLI_TIMEOUT_MS,
|
||||||
});
|
});
|
||||||
|
|
||||||
return { code: 0, stdout, stderr: '' };
|
return { code: 0, stdout, stderr: '' };
|
||||||
@@ -59,7 +60,7 @@ function runNode(scriptPath, args = [], options = {}) {
|
|||||||
return {
|
return {
|
||||||
code: error.status || 1,
|
code: error.status || 1,
|
||||||
stdout: error.stdout || '',
|
stdout: error.stdout || '',
|
||||||
stderr: error.stderr || '',
|
stderr: error.stderr || error.message || '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user