Commit Graph
3502 Commits
Author SHA1 Message Date
haelyra e6d8b6ded1 test(gateguard): integrate hidden-intent effectiveness trials 2026-10-10 17:46:46 -04:00
haelyra a3e9ddfde7 feat(gateguard): integrate evidence-aware first-touch questions 2026-10-10 17:46:23 -04:00
haelyra 9d09febe5d fix(skills): scope host compatibility to target projections 2026-10-10 17:44:28 -04:00
haelyraandalizahidraja eb7ffd8d64 feat(agents): integrate isolated Pi conversion foundation from PR 3022
Carry the canonical IR, Pi emitter and source-schema doctor from https://github.com/affaan-m/ECC/pull/3022. Cursor and OpenCode emitters remain with the open source PR pending capability fixes.

Co-authored-by: alizahidraja <alizahidrajaa@gmail.com>
2026-10-10 17:43:18 -04:00
haelyra 58fc8f25a5 feat(qoder): integrate native plugin and SessionStart projection 2026-10-10 17:40:46 -04:00
haelyra 8757c69927 fix(hooks): integrate GNU sed execution receiver checks from PR 3493 2026-10-10 17:39:03 -04:00
haelyra 07c18210eb fix(qwen): adapt managed agents before ownership receipts 2026-10-10 17:38:07 -04:00
haelyra fa7f135812 fix(qwen): integrate native workflow context and quote remaining hint 2026-10-10 17:37:01 -04:00
haelyra 94ed702344 fix(commands): preserve string argument hints from PR 3472 2026-10-10 17:36:33 -04:00
haelyra a4bf7a45ca fix(sanitizer): integrate unreadable audit with portable filename quoting 2026-10-10 17:36:33 -04:00
haelyra b79346d16b feat(frontend): integrate rendered evidence contract from PR 2814 2026-10-10 17:35:32 -04:00
chenhz01 3af000e143 hooks: first operand after -- is still the sed script when no script option was given
Greptile P1: sedScriptParts stopped at -- and discarded the remaining
operands, so 'sed -- <script>' skipped script collection entirely. GNU sed
4.9 (verified): with no -e/--expression anywhere, the first operand after --
is the script and an s///e in it still executes.

The operands after -- are now collected as positionals, so the existing
first-positional-becomes-script rule applies. Operands after the script stay
file names (data). 2 regression tests pin both sides. Suite: 812/812.
2026-10-11 03:55:27 +08:00
chenhz01 95964ee623 hooks: block escaped sed exec fragments conservatively; decompose sed readers
Greptile P1 findings (both verified by running GNU sed against the hook):

1. Escaped replacements evade the check: GNU sed decodes \xHH, \oOOO, \dNNN,
   case operations and unknown escapes like \g before executing an s///e
   replacement or e operand. Scanning the raw text let \x67it decode to git.
   Decoding that surface faithfully is out of scope, so any backslash in an
   exec-bearing fragment now throws UnsupportedSedEscape and the hook blocks
   with an explicit reason — mirroring the existing env -S escape precedent
   instead of pretending to interpret sed. Escaped-newline continuations of an
   e operand are refused by the same check.

2. Continued commands went unchecked: the e operand reader stopped at every
   newline, but GNU sed joins escaped newlines into one operand. Now covered
   by the same conservative refusal.

Also decomposes the sed readers into sub-50-line helpers per the repository
function-size rule (AGENTS.md): readSedDelimited, readSedCommand,
readSedExecute, readSedLineOperand, assertSedLiteral.

5 regression tests pin the escape paths and the benign boundary (a backslash
in a non-executing script stays data). Suite: 810/810.
2026-10-11 03:52:06 +08:00
chenhz01 34a7f41539 hooks: parse sed options through the whole argv — later -e scripts still execute
CodeRabbit security review (Major, CWE-693) correctly identified that GNU sed
collects -e/--expression scripts from any argv position: a script option after
positional operands is still executed, so stopping the option walk at the first
positional let an e-flagged script hide behind it.

Verified against GNU sed 4.9 before fixing:
- 'sed -e s/x/y/ - -e s/y/X/e' runs X (the later -e executes)
- with any script option present, every positional is a file operand

sedScriptParts now walks the full argv, collects scripts from all -e/
--expression positions, and only promotes the first positional to the script
when no script option was given. Unknown options after positionals still fall
back to the opaque default.

4 regression tests pin the reported bypass paths (suite: 805/805).
2026-10-11 03:38:02 +08:00
chenhz01 ffe0e36d46 hooks: model GNU sed execution — script and file operands are data, e/s///e are shell receivers
Ported from the #3051 discussion (test intent, not the old scanner):

- A confidently-parsed sed invocation whose script contains no execution
  construct is a pure text transformation: the script operand and every file
  operand are data. This removes the specific false positives where file names
  or non-executing scripts merely containing 'git ...' were blocked.
- The GNU sed `e` command (bare or with operand) and the `s` command with the
  `e` flag run text through the shell. Their literal fragments (the s
  replacement, the e operand) and any piped/redirected source are scanned as
  real shell source, closing the `printf x | sed 's/x/git commit --no-verify/e'`
  gap reported on 2026-10-09.
- Anything the literal parser cannot confidently read (addresses it cannot
  consume, -f script files, -i suffix ambiguity, unknown options, expansion
  residue) falls back to today's opaque default. No behavior changes for
  unmodeled launchers.
- shell-scan.js is untouched and remains the canonical scanner.

Tests: 14 focused cases ported from the #3051 litmus set; full hook suite
801/801.
2026-10-11 03:15:36 +08:00
Matt Van Horn 5ec23e8e3d fix: reconcile skill-host-compat with current main
Drop the duplicate ECC_PREPUSH_RUN_CHECKS key now that main sets it,
refresh the skill-triggers registry digest, classify skill-host-compat
for pi/core, and bump the Turkish AGENTS.md counts the catalog sync
does not cover.
2026-10-10 07:33:04 -07:00
Matt Van Horn e128f4398b Merge branch 'main' into cursor/skill-host-compat-ci-10d0 2026-10-10 07:09:43 -07:00
calm 2cb50cea63 test: isolate Qoder context limits 2026-10-10 21:02:19 +08:00
calm f124f339af test: honor Qoder hook timeout 2026-10-10 20:57:10 +08:00
calm 92728a07bc test: harden Qoder plugin verification 2026-10-10 20:42:11 +08:00
calm 2d9e6977dc feat: add native Qoder plugin support 2026-10-10 20:11:00 +08:00
haelyraandGitHub 4eb71d92a3 Merge pull request #3484 from affaan-m/integration/ecc-043-20261009-verified
fix: guard literal Git include redirects and env split arguments
2026-10-09 21:41:12 -04:00
34a97fa898 fix: reject unsupported env split-string escapes
Validate env -S and --split-string escape syntax before shell scanning or
opaque fallback. Preserve literal single-quoted data and charge each
validation character against the shared input-proportional work budget.

Verified 787 focused cases and 290 real Git/config, harmless native env
and registered-routing controls. Keeps the prior paid-copy protection.

Co-authored-by: Nguyen Thanh Dat <ntdat812.dev@gmail.com>
Co-authored-by: Davemaina1 <dmain7015@gmail.com>
2026-10-09 21:04:20 -04:00
993b5f230f fix: guard literal Git hook redirects and env split arguments
Carry forward bounded literal include/includeIf configuration capabilities
and env -S/--split-string words from PRs #2858 and #2897. Charge array
copy and expansion work before allocation to preserve the shared quota.

Verified 731 hook cases and 60 real Git/config and registered-route
controls. Dynamic remainder and original full source PRs remain held.

Co-authored-by: Nguyen Thanh Dat <ntdat812.dev@gmail.com>
Co-authored-by: Davemaina1 <dmain7015@gmail.com>
2026-10-09 20:41:09 -04:00
montjeffrey 92947a68df Merge upstream/main into feat/gateguard-fewer-round-trips
Resolve six conflicts:
- hooks/hooks.metadata.json: keep this branch's gateguard description and
  fingerprint, add upstream's hookify-runtime entries.
- package.json: keep both gateguard-report.js and github-coordination.js.
- scripts/hooks/gateguard-fact-force.js, tests/hooks/gateguard-fact-force.test.js,
  skills/gateguard/SKILL.md: upstream added a simpler session denial cap; this
  branch already has the fuller one (cap threaded through
  markCheckedAndCountDenial, malformed-value warning, miss and target notes),
  so keep it. Upstream's taskset and su wrapper handling, fail-closed
  recursion limit and soft-hyphen sanitising merged cleanly and their tests pass.
- manifests/context-packs/skill-triggers@1.json: take upstream's file and
  recompute registryDigest for the merged registry.
2026-10-09 20:38:25 -04:00
haelyraandGitHub 8384d609a0 Merge pull request #3479 from affaan-m/integration/ecc-043-20261009-verified
Integrate reviewed installer, hook, state, and workflow fixes
2026-10-09 20:07:13 -04:00
haelyra aac9b3d34b fix: preserve activity errors, asset bytes and runner summaries
Treat non-2xx activity responses as feed errors, preserve non-Markdown Copilot agent assets, and apply the reviewed reference escape parity correction with regenerated bindings. Allow the test runner to drain piped output on its existing success or failure exit status. Validate installed workflows and bounded real Node20/24 pipe regressions.
2026-10-09 19:33:37 -04:00
haelyra 984d4f0701 fix: preserve Hookify Windows missing-device identity
Match the Windows missing volume-serial exception while retaining strict reported-device, inode, ownership, permission, link and snapshot checks. Add loader warning/block and race regression controls with isolated platform metadata injection.
2026-10-09 19:10:06 -04:00
haelyra 5930511997 Merge reviewed #3277 ancestry with the stronger tested config 2026-10-09 18:54:52 -04:00
haelyra 5981dd7092 fix: complete reviewed integration workflows and safety checks 2026-10-09 18:54:39 -04:00
montjeffrey 8dc5fe3082 Merge feat/gateguard-fewer-round-trips into feat/gateguard-question-effectiveness
Bring in the #3248 gate change and its upstream/main merge so this
evaluation branch is based on current main and applies without conflicts.
2026-10-09 18:50:46 -04:00
haelyra 0cb1476f9d fix: pin and bound Hookify rule reads
Open with supported no-follow and nonblocking flags before relying on file metadata. Validate descriptor, pathname and rule-directory consistency before and after reading at most64KiB plus one overflow byte. Reject observed replacement, mutation, premature EOF and non-regular files, and close descriptors on every outcome.

Add12 race and I/O regressions. Keep the Hermes uppercase protected-file fixture real on case-sensitive filesystems and verify that the installed guard still permits first-time creation.

Validation: full6688 reported tests across347 files,12 race tests, full80% coverage gates, scoped Hookify coverage, installed Hookify and Hermes workflows, packed artifact lifecycle, lint, signatures and IOC.
2026-10-09 17:54:01 -04:00
haelyra 53e606b78e merge: preserve reviewed original and refreshed source ancestry
Keep tested tree 655e700d82 unchanged. Preserve original 3049, 3055, 3115 and 3119 heads alongside their accepted attributed carry-forwards. Preserve parent-approved live 3257 and 3265 heads without replaying generated bindings, old locks, superseded migrations or discarded hook code.
2026-10-09 17:27:57 -04:00
haelyra ba0520340f fix: reconcile reviewed sources and generated integration surfaces 2026-10-09 17:27:37 -04:00
haelyra b6e2cfe5e4 merge: preserve tested installer extraction 3187 and Copilot ownership fixture 2026-10-09 17:05:03 -04:00
haelyra 5bf248d51d merge: preserve source-verified tinystruct documentation 3231 2026-10-09 17:04:47 -04:00
haelyra b6e0261903 merge: preserve static MCP dependency review source 3239 2026-10-09 17:04:33 -04:00
haelyra d38daabd98 merge: preserve Ruby reviewer source 3227 with nil and false semantics 2026-10-09 17:04:15 -04:00
haelyra d854a4a280 merge: preserve OSINT source 3198 and upstream license bytes 2026-10-09 17:03:58 -04:00
haelyra a5432e84f7 merge: preserve tested stocktake discovery and save source 3220 2026-10-09 17:03:20 -04:00
haelyra b6416b07e8 merge: preserve role sample source 3219 and user model choices 2026-10-09 17:03:10 -04:00
haelyra d312d6f35c merge: preserve project and user Codex configuration source 3253 2026-10-09 17:02:47 -04:00
montjeffrey ad031b60fb Merge upstream/main into feat/gateguard-fewer-round-trips
Resolve the one conflict, skill-triggers@1.json: take upstream's
pretty-printed manifest and recompute registryDigest for the merged
registry so validate-context-profiles passes.
2026-10-09 16:58:12 -04:00
haelyra c27de0c55c merge: preserve reviewed main integration ancestry for 2914 2026-10-09 16:52:43 -04:00
haelyra eed806bf4a fix: restore unskipped installer refactor validation
Follow up PR #3187 at 38b8c07f while preserving the original contribution history and all current-main helper bodies. Remove both CI safety-suite exclusions, clean stale imports and the warning glyph, retain shipped test/coverage entrypoints, and keep unknown test totals honest. The tree matches the fully tested 6246-pass/325-file tree; disposable Claude/OpenCode lifecycle passes.
2026-10-09 16:32:47 -04:00
haelyraandGitHub 5cc14d7c31 Merge pull request #2914 from santhiprakash/fix/plan-orchestrate-retired-orchestrate
fix(skills): reduce plan-orchestrate to a registry-validated command router
2026-10-09 16:30:24 -04:00
haelyra 67c89375c3 merge: preserve serialized store source 3252 with portable cache fixtures 2026-10-09 16:28:34 -04:00
haelyra 0aebb36af2 merge: preserve cache guidance source 3173 with measured cost boundaries 2026-10-09 16:27:29 -04:00
haelyra 206ad23125 merge: preserve payment source 2575 with tested origin and approval boundaries 2026-10-09 16:27:03 -04:00
haelyra d5abc5c8fc merge: preserve reviewed plan registry source 2914 2026-10-09 16:27:02 -04:00