Commit Graph
850 Commits
Author SHA1 Message Date
Tomelias de10a2aca8 fix: sync MCP review skill with upstream and clarify trust boundary 2026-10-04 09:32:20 +03:00
D. Michael Piscitelli 39450c9be2 fix(agents): list files the sanitizer cannot read
Step 1 skipped binaries while the role promised to verify the whole project,
so a credential in a spreadsheet, a PDF or an embedded database got a clean
PASS and never showed up in the report.

Step 7 now lists every file that doesn't read as text, plus any directory it
can't enter, and the pipeline stops on that list until a person confirms. On
this repo that's a few dozen files, all images and video, which is why they're
warnings and not failures. It doesn't try to extract or scan them: that needs
nested-archive recursion and size bounds, and I'd rather list a file than
half-scan it.

Detection is a first-byte signature check plus a whole-file NUL/control-byte
test, with file(1) only widening the list. If a detector fails, the file is
listed as unverified.

Filenames are untrusted, so Step 7 writes the paths to a manifest beside the
project directory, for a person to open, and keeps them out of its stdout
and its report section. Beside and not inside, so a re-run's text scans
can't read it back. The script prints the count itself as its last line. A
scan problem, a failed write, a walk that dies early or a run that never
reaches that line gives an unknown count, and the gate treats unknown as a
stop, not as zero.

Step 1 no longer skips *.min.js.

Tests in tests/skills/sanitizer-unreadable.test.js. Editing SKILL.md changes
the skill registry digest, so skill-triggers@1.json carries the new value.
2026-10-04 07:30:24 +02:00
Samuel Bushi 1c05119281 Clarify optional Uizze research capabilities and local gates 2026-10-03 21:55:36 +02:00
Suliman Abdulrazzaq 238309ce29 Merge branch 'main' into fix/gateguard-session-budget 2026-10-03 10:29:38 +03:00
t0kubetsu 7426295579 feat(story-lifecycle): collision-safe, all-or-nothing ledger writes
Route every .stories/ write through skills/story-lifecycle/scripts/ledger.js:
- exclusive per-ledger lock; a second writer waits, then exits 3 without writing
- story IDs reserved with exclusive-create markers in the git common dir, so
  concurrent agents and worktrees of one clone never share an ID
- journaled batches: stage, journal, rename; derived epic/sprint tables are
  regenerated inside the batch; an interrupted batch is rolled back by the
  next write command or `recover`; `status` reports it only when no live
  writer holds the lock

Bound the ledger to an opt-in planning projection that is never canonical
ECC Task/Evidence/Completion/Integration state, and state that .stories/
follows the checkout.

tests/docs/story-lifecycle-ledger.test.js exercises create, concurrent
create, concurrent cross-worktree allocation, lock contention, overwrite
refusal, interrupted-batch recovery, sprint planning, status drift and
reconcile, and path confinement. Also refresh the skill-triggers manifest
digest for 294 skills.
2026-10-02 11:39:04 +02:00
Seekers2001 9909e9e05e fix(docs): clarify Pi router prerequisites 2026-10-02 17:34:13 +08:00
t0kubetsu 0434cd9168 Merge remote-tracking branch 'upstream/main' into feat/story-lifecycle-skill 2026-10-02 11:15:03 +02:00
Seekers2001 9e67244491 feat(skills): add test regression workflows 2026-10-02 16:35:29 +08:00
Seekers2001 4f08958da4 feat(skills): add change impact 2026-10-02 16:34:07 +08:00
Seekers2001 2d829c04f4 feat(skills): add context and decisions 2026-10-02 16:31:26 +08:00
Seekers2001 561c7317dc Merge remote-tracking branch 'upstream/main' into codex/docs-governance-audit-foundation
# Conflicts:
#	.claude-plugin/marketplace.json
#	.claude-plugin/plugin.json
#	.gemini/GEMINI.md
#	SOUL.md
#	pi/core/README.md
2026-10-02 12:12:32 +08:00
Santhi Prakash ea0a6ff61a Merge branch 'main' into fix/plan-orchestrate-retired-orchestrate
Third upstream sync for PR #2914: main c05b2d66 (rename chore #3330, 17
skill files) re-staled the generated skill-triggers registryDigest. Sole
conflict resolved by keeping our pretty-printed manifest + triggers and
recomputing registryDigest over the merged tree via the repo's own
context-pack-registry chain (validated by reproducing both sides'
committed digests on their own trees first). Gates: validate-context-
profiles PASS, plan-orchestrate tests fail 0, full run-all.js clean.
2026-10-01 23:37:47 +00:00
Affaan Mustafa c05b2d6614 chore: retire the Everything Claude Code name, ECC only (#3330)
* chore: retire the Everything Claude Code name, ECC only

Replace the expanded product name and the everything-claude-code slug
with ECC across READMEs, translated docs, harness folders, skills,
commands, scripts and examples. Repo URLs now point at affaan-m/ECC.

Rename repo-internal artifacts to ecc forms (ecc-conventions skill,
ecc-guardrails, ecc-research-playbook, ecc-team-config, ecc-instincts
with ecc-* ids) and update .claude/ecc-tools.json.

Legacy install ids, plugin dirs, package names and MCP prefixes stay
where existing installs resolve against them. The codex global-state
check and harness-audit repo detection accept the new name first and
the legacy one as a fallback. The Discord bot prefers ~/GitHub/ECC and
falls back to the nested legacy checkout path.

Refresh the skill-triggers registryDigest for the changed skill text.

* fix(ecc-tools): drop managed paths to the removed Claude repo skill

.claude/skills/<repo-skill>/SKILL.md was deleted in #2770 but stayed listed in
ecc-tools.json and the team config. Remove those entries and point the Claude
Code adapter at the existing .agents/skills/ecc-conventions/SKILL.md.
2026-10-01 17:50:41 -05:00
Affaan Mustafa 0348d7b6d7 chore(release): 2.2.3, ECC-only naming in pi/core and a longer npm publish wait (#3329)
pi/core and the bundled blueprint skill now refer to the project as ECC only;
the generated README no longer expands the name. Profile contents, package
name and paths are unchanged (123 skills, 24 commands).

The release workflows poll npm for up to five minutes after publish before
verifying the artifact. In 2.2.2 the check gave up after about 30 seconds while
npm was still processing, failing the run before latest was promoted and the
GitHub Release was created.

Version metadata synced to 2.2.3 with CHANGELOG, translated release headings
and release notes; skill-triggers registryDigest updated for the blueprint text.
2026-10-01 17:49:51 -05:00
phungthien269 8fca8ef4aa fix: address CodeRabbit and Greptile review findings
- Reject missing values for --ecc-root/--out with exit code 2 (CodeRabbit) | - Preserve regex matcher tokens with metacharacters or mcp__ prefixes from lower-casing (CodeRabbit) | - Shell-quote eccRoot in the env prefix to close CWE-78 command substitution (CodeRabbit, Greptile P1) | - Fix last_verified_at future date in the deepseek-harness record (CodeRabbit) | - Guide and skill: clarify skill-name placeholders and make the compose check verify the entry instead of echoing OK on exit status alone (Greptile P2 x2) | - Tests: 11 passing including new coverage for quoting, regex preservation, and flag validation
2026-10-02 00:49:31 +07:00
phungthien269 85dd488892 feat: add DeepSeek Harness guide, hooks generator, and setup skill
- docs/DEEPSEEK-HARNESS-GUIDE.md: skills roots, hooks bridge mounting, loader rules learned from practice, scope table | - scripts/dsh/generate-hooks-config.js: convert hooks/hooks.json to the dsh-hooks-claude-code bridge format (lower-case tool matchers, inline plugin-root env prefix, timeout preserved, unsupported events skipped) | - skills/deepseek-harness-setup: skills-first entry point per repo policy | - tests/scripts/dsh-generate-hooks-config.test.js: 8 unit + CLI tests
2026-10-02 00:17:22 +07:00
haelyra 5e170e4886 fix(bengali): preserve decimal tokens 2026-10-01 12:04:10 -04:00
Notorious D.E.V d24c97d13c fix(agent-payment-x402): release the session reservation when nothing was signed
payOnce reserved MAX_AMOUNT before awaiting confirmation but only released
it when confirmWithUser returned false. A prompt that threw (timeout, closed
window) or a challenge the payment policy rejected before signing kept the
reservation, so five such failures exhausted SESSION_CAP with zero payments.

Track per call whether a request carrying PAYMENT-SIGNATURE / X-PAYMENT was
actually sent, and release the reservation in a finally block unless it was.
A sent signed request may settle, so it stays counted even if the response
fails. The reservation still happens before any await, so concurrent calls
cannot overrun the cap. Mirrored in ja-JP and zh-CN.
2026-10-01 11:03:09 +08:00
haelyra 3c17f41a43 docs: resolve integration review findings 2026-09-30 18:58:26 -04:00
haelyra 5af55fad0a docs: preserve intent in language and query guidance 2026-09-30 18:02:22 -04:00
Yann Roberto 9a1ccaaf25 fix(skill-stocktake): invalidate stale resumed evaluations 2026-10-01 03:01:10 +08:00
Yann Roberto bb39e5da7f fix(skill-stocktake): reconcile resumed live inventories safely 2026-10-01 02:16:54 +08:00
Yann Roberto 566eddec57 Merge remote-tracking branch 'origin/main' into fix/stocktake-live-inventory 2026-10-01 01:59:10 +08:00
Yann Roberto 1d20d449e6 fix(skill-stocktake): make batch workflow executable 2026-10-01 01:59:10 +08:00
haelyra 5ea629876e fix: reconcile stewardship batch on current main
Preserve the Bengali and MyBatis catalog additions, keep Laravel storage examples disk-consistent, isolate ECC 2 test configuration with private permissions, and verify every command-referenced runtime script is published.
2026-09-30 13:29:20 -04:00
haelyra 23cdcbd633 Merge remote-tracking branch 'refs/remotes/pr/3257' into maint/stewardship-batch-2026-09-30
# Conflicts:
#	manifests/context-packs/skill-triggers@1.json
2026-09-30 13:21:34 -04:00
haelyra 4993147de5 Merge remote-tracking branch 'refs/remotes/pr/3269' into maint/stewardship-batch-2026-09-30
# Conflicts:
#	manifests/context-packs/skill-triggers@1.json
2026-09-30 13:21:12 -04:00
haelyra d9f250c7c8 Merge remote-tracking branch 'refs/remotes/pr/2689' into maint/stewardship-batch-2026-09-30 2026-09-30 13:20:49 -04:00
haelyra c965a61da5 Merge remote-tracking branch 'refs/remotes/pr/2655' into maint/stewardship-batch-2026-09-30
# Conflicts:
#	.claude-plugin/marketplace.json
#	.claude-plugin/plugin.json
#	AGENTS.md
#	README.md
#	README.zh-CN.md
#	docs/de-DE/README.md
#	docs/es/README.md
#	docs/ja-JP/README.md
#	docs/ko-KR/README.md
#	docs/pt-BR/README.md
#	docs/ru/README.md
#	docs/th/README.md
#	docs/tr/AGENTS.md
#	docs/tr/README.md
#	docs/uk-UA/README.md
#	docs/ur/README.md
#	docs/vi-VN/README.md
#	docs/zh-CN/AGENTS.md
#	docs/zh-CN/README.md
#	docs/zh-TW/README.md
#	scripts/lib/install-manifests.js
2026-09-30 13:20:41 -04:00
Seekers2001 b43a6770ab Merge upstream/main into codex/docs-governance-audit-foundation 2026-09-30 17:33:07 +08:00
rhmatzeka eb30409fc5 fix(skills): authorize laravel-security download on the model before signing a URL
The secure-storage example authorized `download` against a raw path string
taken from the request and generated the temporary URL before the check.
A string argument never resolves to a policy, and authorizing a
client-supplied path teaches an IDOR-prone pattern.

Bind a model (Document), authorize against it first, then sign the URL for
the stored path on the s3 disk configured just below. pi/core regenerated
via scripts/build-pi-core.js; skill-triggers registryDigest rebound.
2026-09-30 11:32:33 +07:00
Santhi Prakash ddef030123 Merge branch 'main' into fix/plan-orchestrate-retired-orchestrate
Second upstream sync this cycle: main c70874fa (#3264, curated pi/core
skills + 2.2.2 release sync) touches manifests/context-packs/skill-triggers@1.json,
the same field this branch bumps.

Resolution: main's manifest (293 canonical skills, triggers 32) with
registryDigest recomputed over the merged tree via the repo's own chain
(scripts/lib/context-pack-registry.js -> digestObject). Algorithm
validated first: the same computation reproduces main's committed digest
on main's tree and the prior head's committed digest on that tree exactly.

Verification: node scripts/ci/validate-context-profiles.js (293 skills,
triggers 32/293) OK; plan-orchestrate registry fixtures pass; full
node tests/run-all.js = 704 passed / 0 failed.
2026-09-30 04:26:24 +00:00
Jeffrey Montoya f19425dbf1 docs(gateguard): move change-profile notes into their own file 2026-09-30 00:23:08 -04:00
Gunwoo 840eb53efd chore: sync MyBatis skill triggers with current catalog 2026-09-30 10:54:59 +09:00
Jeffrey Montoya d4045c7370 docs(gateguard): document NotebookEdit, hard links and exempt precedence 2026-09-29 21:50:27 -04:00
Jeffrey Montoya 20eb2395e9 fix(gateguard): gate MultiEdit by its file_path and widen surface checks
Also refuses rg -z as read-only and never writes metrics through a symlink.
2026-09-29 21:50:26 -04:00
Jeffrey Montoya 6e677b008c fix(gateguard): judge comment-only edits against the file they change 2026-09-29 21:50:25 -04:00
Jeffrey Montoya 42e9072136 feat(gateguard): credit test files by their module stem
Drop the hardcoded baseline alias from the evaluation script and refresh the results.
2026-09-29 21:50:23 -04:00
Jeffrey Montoya 21ea5f96a8 feat(gateguard): profile shell scripts and Python module constants 2026-09-29 21:50:22 -04:00
Jeffrey Montoya 0301055327 feat(gateguard): build condensed code hints from the question ids 2026-09-29 21:50:21 -04:00
Jeffrey Montoya 4c035dd834 feat(gateguard): record opt-in decision metrics 2026-09-29 21:50:20 -04:00
Jeffrey Montoya 15d4f169d3 feat(gateguard): gate sensitive targets in subagents
A subagent's pass does not unlock the path for the parent.
2026-09-29 21:50:19 -04:00
Jeffrey Montoya 6f0fbb6bc9 feat(gateguard): keep session-keyed state for 8 idle hours
The project-directory fallback keeps the 30-minute window.
2026-09-29 21:50:18 -04:00
Jeffrey Montoya 77ddf9a792 feat(gateguard): pass read-only shell commands before the routine gate
The first command that can change something is still gated.
2026-09-29 21:50:17 -04:00
Jeffrey Montoya c3b2a7e627 feat(gateguard): name the closest search that did not count
One sanitized line in the denial with a reason code, from the cached turn scan.
2026-09-29 21:50:15 -04:00
Jeffrey Montoya ad0d9183ff feat(gateguard): pass comment and whitespace-only edits
The file stays unchecked, so the next code change is still gated; counted in trivial_allows.
2026-09-29 21:50:14 -04:00
Jeffrey Montoya 10f67715b1 feat(gateguard): ask code questions that fit the change
Stable question ids; local call sites instead of importers when no public
declaration is touched; data question only when the change handles data.
2026-09-29 21:50:13 -04:00
Jeffrey Montoya 442a6da150 test(gateguard): cover added sensitive key and credential names
List id_ecdsa, id_dsa, .netrc and .pgpass as sensitive in the skill docs.
2026-09-29 21:50:12 -04:00
Jeffrey Montoya 92b9d7c7be docs(gateguard): document first-touch classes, search credit, and denial cap 2026-09-29 21:50:11 -04:00
Affaan Mustafa c70874fae9 feat(pi): curated pi/core skills+prompts profile, CI load test, and 2.2.2 release sync (#3264)
Adds a curated, Pi-native, skills+prompts-only profile at pi/core/ for downstream packagers that mirror GitHub Releases.

- manifests/pi-core.json: explicit include lists, per-item exclusion reasons, curation rules, safety allowlists; every root skill and command must be classified.
- scripts/build-pi-core.js regenerates pi/core deterministically (package.json from VERSION, LICENSE, README.md, CURATION.md, skills/, commands/); --check fails CI on drift. council is renamed ecc-council inside pi/core only.
- Safety checks: no callable endpoints outside the allowlist, no npx/curl|sh/pip install, no secrets, no absolute home paths, no symlinks, valid frontmatter, no duplicate names.
- CI: build + drift check and an offline Pi CLI load test of pi/core.
- Release: VERSION, package.json and pi/core/package.json at 2.2.2, CHANGELOG, tag-triggered release verification, and a two-week cadence in CONTRIBUTING.md.

pi/core: 123 of 293 skills and 24 of 94 commands; 35,006 characters of skill description text.
2026-09-29 20:24:05 -05:00