Commit Graph
3943 Commits
Author SHA1 Message Date
iyashjayesh 99e75b70f9 Make the offered README link relative to the README being edited
Review caught this on the note added last commit, and it was right again. `sync`
prints the card's path relative to the repository root; a Markdown image
resolves relative to the file it sits in. Telling the agent to reuse the
printed path is correct only for a README at the root.

Verified: with output `docs/usage.svg`, sync prints `./docs/usage.svg`. Pasted
into `docs/zh-CN/README.md` that resolves to `docs/zh-CN/docs/usage.svg` — the
card exists, the image is broken. The nested README needs `../usage.svg`.

The note now says to rewrite the path for the target file and gives both forms.
2026-09-27 02:24:12 +05:30
iyashjayesh df34108e0f Do not promise an output path the config can override
Review caught this on the previous commit, and it was right. `sync` resolves
its target as `--out` if given, otherwise `.tokenchit.json`'s `output` —
`tokenchit.svg` is that field's default, not a fixed location. Saying the bare
command "writes tokenchit.svg in the repository root" is wrong for anyone who
has configured another path.

Checked rather than assumed: a config with `output: docs/custom-card.svg` makes
the bare command report `would write docs/custom-card.svg`.

Three places said it. Step 3 now says the configured output, the flag table no
longer implies the default is fixed, and the README snippet carries a note to
use the path sync actually reported. The command's usage comment says the same.
2026-09-27 01:43:14 +05:30
iyashjayesh 7899734c64 Stop the documented sync command writing a card on a dry run
The workflow's step 3 was an executable block containing placeholders:

    npx -y @tokenchit/cli@0.10.0 sync [--out PATH] [--theme auto|light|dark] [--dry-run]

Copied as written, that does not fail. `sync` ignores an unrecognised
positional argument rather than refusing it, and `[--dry-run]` is positional —
so the brackets are discarded and a real sync runs. Verified against the
published 0.10.0: the literal command exits 0 and writes tokenchit.svg, 10,144
bytes, while `--dry-run` spelled properly writes nothing. An agent following
this skill for a preview would have changed the working tree.

Step 3 now shows one bare runnable command and moves the options into a table,
so nothing inside a bash block is a placeholder. Three reviewers flagged this
shape — it was the standing merge-risk note on the PR — and it was still live.

Also states the Node floor. The skill said only "Requires Node.js"; the package
declares engines node >=22, so anyone on 20 met a confusing failure instead of
a clear precondition.
2026-09-27 01:35:40 +05:30
iyashjayesh 036fa49779 Merge main, and raise the pinned CLI to 0.10.0
The conflicts were all counter bumps. Upstream moved 286 -> 292 skills while
staying at 94 command shims; this branch adds one of each, so the merged values
are 293 skills and 95 shims, carried across the English, Turkish and Chinese
docs. Upstream's 2.2.2 version is kept.

One line needed care and nearly went wrong: the v2.0.0 changelog entry records
"281 skills, 67 agents, 94 command shims". That 94 is a fact about a past
release, not a live counter, and a blanket substitution had rewritten it. It is
back to 94. The Discord snowflake and the Perl badge colour both contain "94"
too and are untouched.

While here, the pin was stale. It named 0.7.0, three minor versions behind, so
anyone installing through this skill got a tool without Gemini support, the
read-only doctor report, PNG export or the portable ledger. Raised to 0.10.0 —
knowingly, which is what the skill's own note asks for — and the documented
`npm view @tokenchit/cli@0.10.0 dist.integrity dist.tarball` was run to confirm
it resolves.

The agent list was stale for the same reason: Gemini CLI became a real adapter
in 0.9.0 and the skill still advertised three agents. Verified against the
published 0.10.0 tarball rather than from memory — `init --help` and `doctor`
both name Claude Code, Codex, Gemini CLI and OpenCode.
2026-09-27 01:19:05 +05:30
Notorious D.E.V ec879062f9 fix(agent-payment-x402): reserve session budget before awaiting confirmation
Two overlapping first payOnce calls could both pass the session-cap check
while sessionSpent was still 0, then both increment after the confirm await,
exceeding SESSION_CAP. Reserve MAX_AMOUNT before any await and release it
only when the user declines. Mirrored in ja-JP and zh-CN.
2026-09-26 17:59:54 +08:00
Notorious D.E.V b166520d96 Merge remote-tracking branch 'upstream/main' into feat/agent-payment-x402-upstream-solana 2026-09-26 17:49:57 +08:00
Seekers2001 2cc96fca2e chore: merge upstream main into docs governance audit 2026-09-26 10:29:50 +08:00
ELIAS TOM 85960fd95b docs(security): pin AgentShield evidence version 2026-09-26 00:54:18 +03:00
ELIAS TOM 3128610f7c docs: sync Cursor MCP review guidance 2026-09-26 00:52:26 +03:00
ELIAS TOM 1037587619 docs: sync MCP review guidance 2026-09-26 00:51:13 +03:00
ELIAS TOM 8f895f4729 docs: address MCP dependency review feedback 2026-09-26 00:50:53 +03:00
WRG d237e1972f fix(scripts): sandbox HTML siblings, link-name MIME, portable fixtures
Review follow-ups: serve text/html sibling assets under the artifact sandbox CSP (direct navigation no longer bypasses it); resolve MIME from the request name first with target extension as fallback; make security fixtures cross-platform (no angle brackets in filenames, skip when symlink creation is denied). Residual check-then-read TOCTOU documented as accepted for the loopback-local threat model. Tests 33/33 GREEN, ESLint clean.
2026-09-26 02:39:42 +10:00
WRG 742395bca7 fix(scripts): confine plan-canvas artifact assets and escape 404 paths
Serve artifact pages with a sandbox-only CSP mirroring the viewer iframe, fail-closed realpath confinement for sibling assets, and escape the artifact path in the missing-artifact 404. TDD: 4 RED failures (CSP header, 404 escaping, symlink escape) before the fix, 31/31 GREEN after; markdown/sessions/hook suites and ESLint clean.
2026-09-26 02:14:24 +10:00
Matt Van Horn da5757b6ff fix(ci): flag CLAUDE_PROJECT_DIR in skill fences with Codex rewrite guidance 2026-09-25 06:44:12 -07:00
Tomelias 1d2b7205af docs(security): add AgentShield evidence for MCP review skill 2026-09-25 13:11:30 +03:00
Tomelias 8f6b4d6133 test(skills): add MCP dependency review regression coverage 2026-09-25 13:08:55 +03:00
Tomelias 7fbdc55fea feat(skills): add MCP dependency review skill 2026-09-25 13:06:51 +03:00
Samuel Bushi 980e637c3c fix: normalize viewport evidence labels 2026-09-25 09:13:36 +02:00
Gunwoo bebc621826 chore: reconcile remote MyBatis branch merge 2026-09-25 14:44:29 +09:00
Gunwoo 50c4e93f31 chore: merge latest main into MyBatis contribution 2026-09-25 14:43:27 +09:00
L4XB 217f303713 fix(control-pane): fail a load whose snapshot cannot be shown, and run the shown query
render() ran after load()'s ordered failure path and after shownLoad
had moved on. A snapshot the board could not show (a session whose
detectedHarnesses is stored as an object) threw past the ordering, and
an older valid snapshot could no longer take the board. render() now
runs inside that path, and shownLoad moves only once it returns.

Run posted state.query, the query typed last. When an older load
succeeds after a newer one failed, the board shows the older query's
results and recall command while Run acted on the newer query. Each
load now keeps its query, render() records it for the board, and Run
posts that.

The test harness assigns new arrays instead of pushing onto
page.pending, and records requests the same way.
2026-09-25 06:45:11 +02:00
L4XB a82d587e3f fix(control-pane): order data and outcomes of every load separately
Two cases the finished-load rule got wrong. When the first snapshot was
still loading and a live refresh failed, the first snapshot arrived
late and was dropped, leaving the pane empty. And manual loads, the
Refresh button and a query, reported their failures outside the
ordering, so a late manual failure could cover newer data and an older
success could clear a newer manual failure.

The board now shows the newest data any load brought, and the error
box the outcome of the newest load that has finished. load() reports
its own fetch failures, as a live-refresh failure when the interval
started it and as a plain error otherwise, so every load is ordered the
same way. Data that arrives after a newer failure still shows, and the
failure stays, dated by that data.
2026-09-25 04:59:07 +02:00
L4XB 36460824ee test(control-pane): pin that a late response keeps its hands off newer data
Two held refreshes complete in reverse order with different data. The
older response arrives last and must not replace what the newer one
put on the board. It did before the previous commit.
2026-09-25 03:13:18 +02:00
L4XB 928a295247 fix(control-pane): let the newest finished load decide the board
A newer refresh that failed was shown, and then an older one that
succeeded cleared the message, so the board looked live although no
load that started after the failed one had succeeded.

The board now follows the newest load that has finished, with its data
or with its failure. A load that finishes after a newer one leaves the
board alone: its data is not rendered and its failure is not reported.
This also keeps a late response from replacing newer data.
2026-09-25 03:12:40 +02:00
L4XB 029f850bd0 test(control-pane): pin which load decides a failed refresh
With three refreshes in flight, the second succeeds and the first
fails while the third still runs. The board shows data from a load that
started after the failed one, so the failure stays off it. Comparing
against every load started so far would report it.
2026-09-25 02:56:33 +02:00
L4XB 96516aa247 test(control-pane): give the page a fixed clock
The refresh-failure test looked for the current Gregorian year in a time
the page formats with toLocaleString. A locale with another calendar
shows another year: under th_TH the page prints 2569 and the test
failed. The page now runs on a fixed instant, and the test compares
against toLocaleString of that instant.
2026-09-25 02:55:35 +02:00
L4XB 9848380309 fix(control-pane): judge a failed refresh by the loads that started after it
A failed refresh was dropped whenever any load finished while it ran.
When two interval refreshes overlapped and the older one succeeded, the
newer one's failure was dropped too, so the board looked live although
its latest refresh had failed.

Loads are now numbered as they start. A failure is dropped only when
the board shows data from a load that started after it.
2026-09-25 02:55:35 +02:00
L4XB 10969f587b fix(control-pane): keep a superseded refresh failure off the board
A live refresh that fails after a newer load has already replaced the
board no longer describes what is shown, so it is only reported while
the data it was meant to replace is still on screen. The time of that
data now includes its date, for a pane left open overnight, and it is
kept in its own binding instead of on the shared state object.
2026-09-25 00:07:08 +02:00
L4XB 0ae2fa06a4 fix(control-pane): report a failed live refresh instead of discarding it
The 15-second refresh caught every error with `load().catch(() => {})`,
so a control pane that had lost its server kept showing the last
snapshot as if it were current. A failed refresh now shows the error box
with "Live refresh failed. The data below is from <time>." and the
error, and the next successful refresh clears it, as load() already
clears the box.

The new test runs the served page script in a vm with a stand-in for the
browser APIs it uses, fails a refresh, and checks both transitions.

Fixes #3176
2026-09-24 23:25:13 +02:00
L4XB 2df1aa7a92 fix(gateguard): check every command su is given, not only the first
`su postgres -c "echo ok" -c "psql -c 'drop table users'"` runs the last
-c, but only the first was scanned, so the drop went through. Every
-c/--command value is now scanned as a command line of its own.
2026-09-24 23:11:54 +02:00
L4XB bbe5d78420 fix(gateguard): read the command line su runs, and unwrap taskset
`su postgres -c "psql -c 'drop table users'"` resolved to `su`, so the
SQL-client check never saw psql. The value of su's -c/--command (or of a
short-option cluster ending in c, as in -lc) is now scanned as a command
line of its own, like the value of sh -c. The scan continues past `--`,
since su hands the arguments after it to the target shell, which runs a
-c there too.

taskset joins the runners: its -c is a flag and the CPU mask is one
positional, so `taskset -c 0 psql ...` resolves to psql.
2026-09-24 22:39:44 +02:00
Varun Gore 31f4ed120e Merge branch 'affaan-m:main' into main 2026-09-25 01:39:33 +05:30
ritms42andClaude Opus 5.5 62bf2b2910 fix(mcp): pin chrome-devtools-mcp to 1.10.1 instead of @latest
The default chrome-devtools connector is launched with `npx -y` and
`@latest`, so every session start can silently install whatever version
was most recently published to npm. Pinning makes the default connector
reproducible and removes the unpinned-npx finding that /security-scan
(AgentShield) reports against ECC's own .mcp.json.

The same spec is pinned in the Codex merge script so both harnesses
stay in sync, and the Codex merge test is updated to match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 21:48:57 +02:00
Geronimo 2a9b56bf36 fix: replace blanket ECC_TEST_ALLOW_FAILURES with targeted ECC_TEST_SKIP
Per chenzh01 review: the blanket ECC_TEST_ALLOW_FAILURES=1 env var masks all failures. Replace with ECC_TEST_SKIP listing only the known-broken test files. Any new failure will break CI. Added skip-pattern warning in test output for visibility.
2026-09-25 01:04:04 +05:30
Leslie-23andClaude Opus 5.5 2d887d756d fix(agents): widen ruby-reviewer diff scope and flag bulk writes
- Review a caller-supplied diff when given; otherwise collect committed
  branch, staged, unstaged, and untracked Ruby changes. Plain `git diff`
  missed staged-only and committed PR changes.
- Add update_all/delete_all/update_columns/insert_all/upsert_all on
  user-reachable scopes to the HIGH tier, since they skip validations
  and callbacks.
- Fix stale 67-agent catalog blocks in README.md and docs/ja-JP/README.md
  and list ruby-reviewer there.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 18:35:14 +00:00
Tony Yu e482e57941 docs: point the Kimi Code link at the international site (kimi.ai/code) (#3183)
kimi.com/code serves mainland China (WeChat / +86 sign-in, Alipay and WeChat Pay), so ECC's international readers cannot sign up or pay there.
Point the Kimi Code link in the install-target tables at kimi.ai/code (Google sign-in, card payment) instead, keeping the same aff value.
2026-09-24 11:52:47 -05:00
@James 704e360486 docs: add missing AbstractData and Serializable imports to ja-JP database.md example 2026-09-24 23:19:04 +08:00
James M. ZHOUandcoderabbitai[bot] 95aac7a101 Update docs/ja-JP/skills/tinystruct-patterns/SKILL.md
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-09-24 22:01:52 +08:00
@James f83eaf6c65 fix: add Japanese database reference and clean up relative link 2026-09-24 21:55:00 +08:00
@James 2c7995959b Merge branch 'feat/update-tinystruct-patterns-skill' of https://github.com/m0ver/everything-claude-code into feat/update-tinystruct-patterns-skill 2026-09-24 21:48:42 +08:00
@James ae47883fc6 Fix the issues 2026-09-24 21:48:12 +08:00
James M. ZHOU e0017a3206 Merge branch 'main' into feat/update-tinystruct-patterns-skill 2026-09-24 21:26:02 +08:00
@JamesandClaude Sonnet 5 fb1f81e0d7 docs: sync tinystruct-patterns skill with latest tinystruct framework (1.7.34)
Sync skills/tinystruct-patterns against tinystruct's own canonical copy of
this skill (.agents/skills/tinystruct-patterns/), which the framework repo
keeps up to date with each release:

- Document the bin/dispatcher / bin/dispatcher.cmd launcher generation
  workflow (never hand-write or copy it; the framework generates it via
  ApplicationManager.init()).
- Add native MCP server/tool integration (org.tinystruct.mcp.*), including
  the prompt-injection warning for tool return values and overloaded-tool
  schema merging.
- Add annotation-based DB mapping (@Table/@Id/@Column) alongside XML
  mapping, the --mapping annotation generator flag, and table
  auto-creation via database.autocreate.
- Add the programmatic logging/diagnostics subsystem (ANSI console colors,
  StackWalker-based caller tracing, per-package level overrides).
- Update the architecture package map accordingly.

Also update the Japanese translation (docs/ja-JP/skills/tinystruct-patterns)
to match, which had drifted to an older, condensed version of this skill.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 21:10:57 +08:00
@James 19a803b466 Merge branch 'main' into feat/update-tinystruct-patterns-skill 2026-09-24 20:48:38 +08:00
Samuel Bushi c770b08eef fix: require rendered evidence for every target viewport 2026-09-24 12:37:05 +02:00
Samuel Bushi 90481d5e4a fix: consolidate UI evidence gate into frontend design direction 2026-09-24 11:29:32 +02:00
Leslie-23andClaude Opus 5.5 a7c6b4b3b8 feat(agents): add ruby-reviewer
Add a Ruby and Rails code reviewer agent covering Active Record query
safety, strong parameters, unsafe reflection and deserialization, XSS,
safe migrations, and RSpec/Minitest quality. It builds on the existing
rules/ruby/* and rails-patterns skill.

- Register it in .opencode/opencode.json with a matching prompt file
- Map ruby and rails to it in the orch-review workflow
- Bump the documented agent count from 68 to 69 across README, AGENTS.md,
  plugin manifests, and translated docs

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 08:15:35 +00:00
L4XB 64e004a962 fix(hooks): keep the arguments after env -S whole
GNU env -S splits only its own argument; the ones after it reach the command unchanged. Joining them into the split string let a quoted ';' inside a later argument read as a command separator, so env -S 'echo' '; psql -c "drop table users"' was denied. Each later argument is now escaped back into a single literal word, which still leaves env -S 'psql -c' 'drop table users' denied.
2026-09-23 21:04:38 +02:00
L4XB f35470e9b8 fix(gateguard): unwrap the runners and shell forms the SQL-client check still misses
#3107 resolves sudo, doas and env before matching a SQL client, and
recurses into sh -c. Six shapes still reached a client unseen and were
allowed:

  bash -lc "psql -c 'drop table users'"      a -c inside a flag cluster
  env -S 'psql -c "drop table users"'         the command inside one argument
  env --split-string='...'                     (same)
  env time -f "%E" psql -c "..."              time, nice, timeout, nohup,
  nice -n 10 psql -c "..."                     stdbuf, ionice, setsid,
  timeout 30 psql -c "..."                     command, exec as runners

Unwrap those runners with their options and positionals, stacked without
a fixed limit, scan env -S payloads as command lines, and accept a -c
inside a short-option cluster. Past the shell recursion limit the check
now fails closed: five levels of sh -c used to hide a drop table.
2026-09-23 15:15:55 +02:00
L4XB 6a555c78c1 Merge origin/main, taking main's tree
#3107 fixed #3024 on main with its own SQL-client detection, so this
branch restarts from main's code. The wrapper shapes #3107 does not
unwrap follow as a separate commit.
2026-09-23 15:04:25 +02:00