Commit Graph
3943 Commits
Author SHA1 Message Date
haelyra dadfdd6691 Merge branch 'steward/security-20261011' of /Users/hira/Documents/ECC/ecc-review-security-20261011 into integration/ecc-043-20261011 2026-10-11 02:14:22 -04:00
haelyra 3add1816ea feat: offer an opt-in local Claude usage display
Scoped adaptation of PR #2716: keep compact rendering as the default and require ECC_STATUSLINE_USAGE=1. Installer registration, managed aliases and the Codex background bar remain outside this slice.
2026-10-11 02:09:06 -04:00
haelyra 52d546f0d1 docs: align Turkish instructions with the prepared skill catalog 2026-10-11 02:09:04 -04:00
haelyra e611cf66d0 fix(state): serialize work-item claims and preserve existing ownership 2026-10-11 02:08:19 -04:00
haelyra 9d7e5a5bc9 chore: refresh canonical skill digest after observer fixes 2026-10-11 02:07:05 -04:00
haelyraand646826 7b4e7828ce fix: redact escaped quoted credentials in observation records
Carry forward the bounded serialized-quote defect identified by PR 2786. Metadata-only observation consent remains separate; exclude the broader provider lifecycle head.

Co-authored-by: 646826 <646826@gmail.com>
2026-10-11 02:05:50 -04:00
Yann Roberto e4b9451c68 fix(llm): honor selected models in provider resolution 2026-10-11 14:05:46 +08:00
haelyra 7f226d069c fix: prevent stranded observation counter locks after process death 2026-10-11 02:05:20 -04:00
haelyra 6233b648f9 fix(hooks): resolve bootstrap from selected Claude config root 2026-10-11 02:03:45 -04:00
haelyraandGeronimo da87114e05 fix: honor global preview in every guided install entry
Scoped adaptation from PR #3088. Keep the canonical atomic writer and dispatcher; exclude the broader provider/tool changes.

Co-authored-by: Geronimo <varungore1@gmail.com>
2026-10-11 02:03:09 -04:00
haelyra 807c98aff6 fix: preserve cheap native context routing from PR 2740 2026-10-11 02:02:55 -04:00
haelyra 412347a2ab feat(skills): integrate optional test governance workflows from PR 3413
Preserve complete contributor head. Keep current-session invocation, project-defined verification gates and existing task authorization; no new commands or completion authority. Disposable Claude/Codex install and removal verified.
2026-10-11 02:02:49 -04:00
haelyra 36f01734e7 feat(skills): integrate optional change impact workflow from PR 3412 2026-10-11 02:01:43 -04:00
haelyra 3ab8a4f618 feat(skills): integrate optional domain context workflow from PR 3411
Preserve full contributor head; refresh catalogs and Pi projection. Verify disposable Claude/Codex installs and resource discovery, with no automatic hooks or governance files.
2026-10-11 02:01:07 -04:00
haelyra 80964ec4fe fix(install): ship standalone skill-health command runtime 2026-10-11 02:00:27 -04:00
haelyra 43febb9ada fix: preserve opt-in GateGuard contract questions from PR 3497 2026-10-11 02:00:27 -04:00
haelyra 54925308d7 feat(skills): integrate collision-safe story lifecycle from PR 2311
Preserve full contributor history and current catalog. Actual process workflows cover concurrency, recovery, sprint planning and read-only status. Bound registry symlinks, counts and lock waits; preserve manually curated trigger provenance.
2026-10-11 01:59:36 -04:00
haelyra 5ad9cb931b fix: harden container OAuth callback relay lifecycle 2026-10-11 01:58:37 -04:00
haelyra bd96347002 fix: preserve target-scoped GateGuard search credit from PR 3496 2026-10-11 01:57:34 -04:00
haelyra 544601912a fix(llm): integrate capability-aware Ollama tools from PR 3275
Preserve contributor head and current main reasoning/errors. Reject malformed capability declarations and retry discovery; actual localhost HTTP ReAct round-trip verified.
2026-10-11 01:57:34 -04:00
haelyra 242abdecb4 fix(llm): integrate revised reasoning filtering from PR 3272 2026-10-11 01:56:43 -04:00
haelyra 837cbb0773 fix(catalog): reject unmarked agent-tree skill undercounts 2026-10-11 01:56:28 -04:00
haelyra c9a3143aa4 fix: preserve citation intent and current routing evidence gates 2026-10-11 01:56:19 -04:00
haelyra 4f5970bf4f fix(codex): ship named CLI profile files with ownership protection
Reproduced issue #3485 on installed Codex CLI 0.162.0. Keep user legacy choices for explicit migration and verify disposable install, repair, reinstall and removal.
2026-10-11 01:55:54 -04:00
haelyra 7bcb8dabee feat: preserve passive scoped coordination receipts from PR 3128 2026-10-11 01:55:20 -04:00
haelyra 07309c3eca fix: preserve locale selections during managed updates 2026-10-11 01:54:21 -04:00
Yann Roberto d9efa98bb6 fix(install): preserve locale selections during auto-update 2026-10-11 13:41:34 +08:00
montjeffrey f7f47679b6 fix(gateguard): make the external-contract question opt-in
- questionIdsFor and condensedHintFor take an optional
  { externalContract: true }; without it a code change that handles data
  asks data-schema only, and an unknown profile gets the original four
  questions and condensed hint.
- The hook reads GATEGUARD_EXTERNAL_CONTRACT_QUESTION with the same
  spellings as GATEGUARD_METRICS and passes it to the full denial, the
  condensed denial and the metrics record, so all three agree.
- The effectiveness harness's arm patch forwards the option, so an arm
  never drops it silently.

Docs: change-profile.md gains an External-contract question section and
qualifies "byte-identical to the fixed four questions"; design-notes.md,
SKILL.md (switch table, data rule, word-for-word set) and CHANGELOG say
the fifth question is opt-in; question-effectiveness.md and the harness
README note that the runner clears GATEGUARD_* variables, so a gate arm
from a current tree measures the gate without the question.
skill-triggers@1.json: registryDigest refreshed for the SKILL.md body
change; the description and triggers are unchanged.
2026-10-11 00:45:01 -04:00
montjeffrey 161713edce test(gateguard): pin the original four code questions and an opt-in external-contract question
8a7d6129 added the external-contract question for every code change that
handles data and updated the pinned tests to match, including the legacy
test "code condensed Edit hint for an unknown profile is unchanged". Its own
evaluation then found the gated arm did not improve (25 to 23 of 48), so the
question has no evidence behind it as a default.

- Restore the test expectations 8a7d6129 changed: questionIdsFor, the
  byte-identical code text for src/a.py, the condensed hints, and the hook
  question lists default to data-schema without external-contract.
- Add questionIdsFor/condensedHintFor cases with { externalContract: true }.
- Add hook cases: GATEGUARD_EXTERNAL_CONTRACT_QUESTION=1/true/ON asks it
  beside data-schema and in the unknown-profile set, never without data;
  unset, 0, false and off keep the original four.

Against main: target-class 5 failures, fact-force 10 failures.
2026-10-11 00:45:00 -04:00
montjeffrey 329ca4e11a docs(gateguard): document type filters, path patterns and lookups
- design-notes.md: new Type filters and Path patterns sections; Search
  scope extends the search-of-the-target rule to name lookups; Flag
  parsing lists the new value flags.
- change-profile.md: Unicode line terminators make an edit non-trivial.
- skills/gateguard/SKILL.md and CHANGELOG.md describe the same rules.
- skill-triggers@1.json: refresh registryDigest for the SKILL.md body
  change. The skill's description is unchanged, so triggers and
  triggersDigest are untouched, as in the plan-orchestrate refresh.
2026-10-10 23:38:48 -04:00
montjeffrey 64d8971a64 fix(gateguard): credit only searches that could have seen the target
- Read file-type filters as include and exclusion globs: rg -t/--type
  and the Grep tool's type include ripgrep 14.1's globs for the type,
  rg -T/--type-not exclude them, fd -e/--extension includes *.<ext>.
  An unknown type name, --type-add or --type-clear is an unreadable
  filter and never credits, like --exclude-from.
- Treat a path pattern as a filter: the Glob tool's pattern must match
  the target below its root; a shell glob operand must match the target
  or a directory above it; a git pathspec matches the same way with its
  * also matching /. One operand that admits the target is enough.
- Extend "a search of the target itself gives nothing" to searches
  confined to the target's own file name: when every include, the Glob
  pattern, or every path pattern ends in that exact name, the stem never
  credits, and the closest-miss note says it was a lookup.
- Tokenize PowerShell searches with backslashes kept as path separators,
  as the read-only shell check already does; the old literal-prefix scope
  hid that src\core\*.ts reached the parser as srccore*.ts.
- Make an edit non-trivial when either text holds U+2028, U+2029 or
  U+0085, which end a JavaScript or C# line comment; the lexer splits
  lines only at \n and \r.

Extracting applyLongFilter, grepDetail and stemCredits leaves every
touched function at or below its complexity on main.
2026-10-10 23:38:47 -04:00
montjeffrey 9faa6b76d2 test(gateguard): pin searches that never saw the target and Unicode line terminators
Each of these is credited on main, reproduced against upstream 2d515e4f:

- rg -t py / -T js / --type-not js, fd -e py, and the Grep tool's
  type: "py" credit an Edit of tokenizer.js. Type and extension values
  are skipped as plain value flags, so they never filter.
- Glob **/tokenizer.py, rg tokenizer src/*.py, and
  git grep tokenizer -- '*.py' credit tokenizer.js. The Glob pattern is
  never a filter, and a glob operand scopes as its literal directory.
- Glob **/tokenizer.js, find -name tokenizer.js, rg -g tokenizer.js and
  Grep glob: "tokenizer.js" credit tokenizer.js, although each search
  could only find the target itself.
- An Edit of "// note<U+2028>foo(1);" to "// note<U+2028>foo(2);" passes
  as comment-only, although JavaScript ends the comment at U+2028 and
  foo(2) runs.

Scenario 21-bypass-filter-forms adds ten must-deny steps and four
controls. Four hook controls that asserted exact-name lookups still
credit (find -name widget.py, Grep glob widget.py, Get-ChildItem
-Filter widget.py) now assert the lookup is denied; each keeps its
original purpose, that the exclusion parser leaves a positive include
alone, through a wildcard include (widget.*).
2026-10-10 23:38:47 -04:00
haelyra 2d515e4fc2 Merge pull request #3495 from affaan-m/integration/ecc-043-20261010
fix: integrate verified ECC stewardship batch (49 PRs)
2026-10-10 21:15:17 -04:00
haelyra f614e82ae5 fix(session): preserve alias identity when its store is unreadable 2026-10-10 20:38:40 -04:00
haelyra a87957ea5e test(session): pass alias fault controls as data to fixed preload 2026-10-10 20:28:19 -04:00
haelyra 33a91492e8 test(session): pass calendar fixture inputs as data
Replace JSON-interpolated child JavaScript with fixed preload and summarizer programs. Pass paths and dates through dedicated fixture environment variables; use a fixed quoted exec wrapper so configured executable and script paths remain data. Preserve real Date.now, deadlines, calendar rollover, captured resume metadata and no-next-day duplicate assertions. Actual13/0 Node18.20.8, Node20.20.2 with Bun setting and Node24.9.0; actual13/0 with spaces/apostrophes/literal dollar in fixture paths; next-day negative control12/1; lint and diff checks pass. Addresses CodeQL393/394/395 without suppression or dismissal.
2026-10-10 20:27:31 -04:00
haelyra 3f3309c93e test(session): exercise fallback persistence across calendar rollover
The Stop hook captures its session filename date before waiting for a slow summary, while the fixture previously recomputed it after timeout. Advance only the fixture calendar when the fake summarizer starts and assert persistence under the captured date, matching resume metadata, and no next-day duplicate. Keep Date.now, child delay and lifecycle deadlines unchanged. Actual workflow baseline and corrected fixture13/0; mismatched-day lookup negative control12/1; Node20 with Bun setting and Node18.20.8 both13/0; lint and diff checks pass.
2026-10-10 20:14:22 -04:00
haelyra 0a181df218 fix(session): preserve optional startup context and independent history reads 2026-10-10 20:14:22 -04:00
haelyra 15834ef199 fix(state): remove the superseded filesystem import 2026-10-10 19:54:44 -04:00
haelyra 068d93251e fix(state): retry Windows sharing reads without dropping published aliases 2026-10-10 19:54:09 -04:00
haelyra 6f02de840b test(profiles): seed feedback through the canonical session producer 2026-10-10 19:33:54 -04:00
haelyra e259e06c75 fix(plan-canvas): reconcile profile resolver and retain invalid feedback queues 2026-10-10 19:19:30 -04:00
haelyra 0b07708137 fix(plan-canvas): validate feedback IPC locator and request shape 2026-10-10 19:15:51 -04:00
haelyra 872df03e1f fix(hooks): enforce literal formatter invocation at spawn boundaries 2026-10-10 19:13:24 -04:00
haelyra e76ea52ae3 test(security): bind fixture reads and mutations to private descriptors 2026-10-10 19:11:12 -04:00
haelyra 9aa9003e1b ci: account for PowerShell CRLF in strict PCRE2 probe 2026-10-10 19:04:00 -04:00
haelyra 740fc4fa88 Merge refreshed PR #3491 request-model deduplication follow-up 2026-10-10 18:59:17 -04:00
haelyra 24de70a507 fix(fs): retry bounded Windows atomic rename sharing failures 2026-10-10 18:58:54 -04:00
haelyra a0dacd2282 ci: allow bounded completion of the full Windows test matrix 2026-10-10 18:57:18 -04:00
haelyra a0ae95231d fix(codex): canonicalize native Windows task paths before dispatch 2026-10-10 18:56:12 -04:00