Skip to content

fix(security): pin fixed conformance jobs, lift codex off cryptography 49, harden OCSF and state parsing - #225

Merged
imran-siddique merged 2 commits into
mainfrom
fix/security-quality-sweep-2026-09-25
Sep 25, 2026
Merged

imran-siddique merged 2 commits into
mainfrom
fix/security-quality-sweep-2026-09-25

Conversation

@imran-siddique

Copy link
Copy Markdown
Member

Scorecard alerts, plus three parser bugs that a new ClusterFuzzLite target reproduced on main.

Pinned dependencies (#175, #173, #170, #174). The fixed jobs in aeoess-aps-conformance.yml and chap-conformance.yml now install from requirements/aeoess-aps-fixed.txt and requirements/chap-fixed.txt (uv, --generate-hashes --universal, floor 3.11) with --require-hashes, then the integration with --no-deps -e. The version check against integration.yaml still runs. #171 and #172 are the floating job, unpinned on purpose for drift detection. Verified locally on 3.12: chap 19 passed, aeoess 86 passed, trace-tests --level 0 PASS on both emitted records.

Fixture line endings. test_fixture_is_the_committed_bytes failed on any Windows checkout: fixtures/action-receipt/*.json had no .gitattributes rule, so core.autocrlf rewrote receipt.json to CRLF and its SHA-256 moved. Added text eol=lf, the rule delegation-chain/ already has.

Stale tested_against. Four manifests named versions below their own requirement floors. Each now names the versions a clean install resolves, and its tests pass on them: claude-code (agent-manifest 0.12.0, agentrust-trace 0.10.0, trace-tests 0.5.1, 61 passed), scheduled-agents (0.10.0, 0.5.1, 26 passed), agentrust-codex (agentrust-trace 0.10.0, 30 passed), ramen-ai-cmcp (0.10.0, 0.5.1, which its pyproject pins exactly, 23 passed, Level 0 PASS).

OSV (#34). PYSEC-2026-3552 came from plugins/agentrust-codex/requirements.txt: agent-manifest==0.3.0 caps cryptography<50. Now agent-manifest>=0.12.0, same as claude-code; resolves cryptography 50.0.1 and codex tests pass (30). GHSA-8mgp-746c-j5xp is nltk via integrations/llamaindex/requirements-interop.txt; nltk 3.10.3 is the latest release and still affected, so there is nothing to bump to.

OCSF parser (openshell.py). str.splitlines() split one JSONL line on \f, \v, \x1c or U+2028 into two accepted events, and rejected a valid event with U+2028 inside a string. NaN and duplicate keys were accepted, so the committed transcript could carry NaN, which is not JSON. Deep nesting raised RecursionError. Now splits on \n only, rejects both, and serializes with allow_nan=False.

load_state (capture-core). Invalid UTF-8, a 5,000 digit integer or deep nesting in the baseline raised instead of reading as absent.

build_record. DIGEST_RE.match accepted a trailing newline on workload_digest, model_weights_digest and subject. Now fullmatch.

Fuzzing (#36). .clusterfuzzlite/ with three targets and cflite_pr.yml / cflite_batch.yml on agent-manifest's action SHAs. Driven over 3,000 inputs each: clean now; on main the state and transcript targets raise the errors above.

Tests: adapters 122 passed (17 new), capture-core 48 passed (3 new), capture engines 149, validate 28 with 41 manifests and 0 failures, ruff and actionlint clean.

#31 and #1 are repository settings.

Generated with Claude Code

imran-siddique and others added 2 commits September 25, 2026 13:42
…y 49, harden parsers

- aeoess-aps and chap fixed jobs install from hashed locks
  (requirements/aeoess-aps-fixed.txt, chap-fixed.txt), then the integration
  with --no-deps -e. Floating jobs stay unpinned on purpose.
- agentrust-codex: agent-manifest==0.3.0 capped cryptography below 50
  (PYSEC-2026-3552); now >=0.12.0, matching claude-code.
- OpenShell OCSF parser splits on "\n" only, rejects NaN/Infinity and
  duplicate keys, maps RecursionError to ValueError, and serializes with
  allow_nan=False so the committed transcript is always JSON.
- capture-core load_state treats invalid UTF-8, over-long integers and deep
  nesting as corrupt (None) instead of raising.
- build_record uses fullmatch so a trailing newline no longer passes the
  digest and subject patterns.
- Add ClusterFuzzLite targets over the OCSF transcript, the OpenShell
  bundle verifier and the capture state loader.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- tested_against in claude-code, scheduled-agents, agentrust-codex and
  ramen-ai-cmcp named versions below their own requirement floors. Each now
  names what a clean install resolves and the tests pass on.
- .gitattributes: fixtures/action-receipt/*.json text eol=lf, like
  delegation-chain/. Without it a Windows checkout rewrote receipt.json to
  CRLF and test_fixture_is_the_committed_bytes failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@imran-siddique
imran-siddique requested review from a team and carloshvp as code owners September 25, 2026 21:05
@imran-siddique
imran-siddique merged commit f61922a into main Sep 25, 2026
80 checks passed
@imran-siddique
imran-siddique deleted the fix/security-quality-sweep-2026-09-25 branch September 25, 2026 21:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant