Skip to content

Release v2.13.1: customer parsing, metadata, image and security fixes - #852

Open
mohgupta-ship-it wants to merge 38 commits into
yashraj/v2.13.0-basefrom
codex/release-2.13.1
Open

mohgupta-ship-it wants to merge 38 commits into
yashraj/v2.13.0-basefrom
codex/release-2.13.1

Conversation

@mohgupta-ship-it

@mohgupta-ship-it mohgupta-ship-it commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

This v2.13.1 maintenance release is based on published v2.13.0. It fixes false incomplete scans from ordinary code and prose, quoted version metadata, supported passive documentation images, and Office workbook handling while retaining genuine security findings and incomplete-analysis safeguards.

The latest addition addresses two separate workbook issues. A worksheet identified by Office content types and workbook relationships can use the existing 16 MiB analysis allowance; unrelated archive entries retain their 1 MB limit. Cumulative expansion, compression-ratio, member-count, path, CRC and runtime checks remain enforced. The scanner keeps the complete admitted bytes for local static analysis and YARA.

Printer settings lose the filename-based executable classification only when Office relationships, content types and the complete DEVMODEW envelope agree. Executable signatures, executable permission bits, malformed records and ambiguous metadata retain their safeguards. Printable text keeps its existing analysis; opaque driver-private bytes retain explicit binary scope boundaries and bounded instruction checks. This is not a claim that arbitrary .bin files or printer-driver data are safe.

Included changes:

Only the curl token prerequisite from #697 and the prohibition-context prerequisite used by MP3 from #658 are included. The SC8 CPU-budget correction #828 is inherited from v2.13.0. #827/#895 remain excluded.

Current candidate: 9832c437bf7e1638deed319a521c3ea7e4a377e0.

  • Fresh final wheel and source distribution built and validated. Wheel SHA-256: d6c6e281cd9a1ee0f72fca0dfa0c2a332243703ccb242eeda7eabb355ed2bd40.
  • The final commit only sorts test imports. Its runtime source and fresh wheel are byte-identical to 026f3356, on which the broad checks below ran. Final-head targeted tests passed again: 653 per source/installed-wheel mode; lint and formatting passed. The earlier lint failure is corrected.
  • Broad core suite: 12,177 passed per mode, with 23 skipped, 4 expected failures and 137 deselected. Targeted tests overlap that total. Offline integration: 118 passed per mode. All 88 Node extension tests passed.
  • Replayed the original reported skill snapshot, its current snapshot and the exact workbook in a minimal wrapper, comparing the previous and current runtime in both source and wheel modes. All 12 customer runs have matching source/wheel reports. The complete 1,969,921-byte worksheet matches the original bytes and all 15 static pattern analyzers positively complete its inspection.
  • Exactly five false printer-settings SC9 findings disappear from each customer case. All 41 other findings in the original skill and all 35 in the current skill remain. The wrapper retains its three independent findings; printer binary-analysis boundaries remain explicit. This is not a whole-skill SAFE claim.
  • The 25 functional skill cases meet their scoped expectations with source/wheel parity after documented fixture/oracle corrections. Controls cover late prompt instructions and destructive commands, malformed/executable printer records, missing/external/ambiguous relationships, CRC failures, compression limits, unrelated oversized members and worksheet size limits. The original failed checks remain recorded; the corrected command fixture still requires TM1, and corrupt CRC input still must fail with exit 2.
  • All 12 catalog skills match the previous candidate and each other across source/wheel modes (48 fresh scans).
  • One separate stress case remains a performance limitation: a workbook containing two 14 MiB worksheets exceeds the shared 25 MiB expansion budget. The original 240-second harness deadline expired before a report. A diagnostic run with unchanged scanner defaults produced reports in 283.8 seconds (wheel) and 305.8 seconds (source). Both correctly report partial coverage and CAUTION, with the second worksheet blocked by the shared budget; the source run also records analyzer runtime limits on the first worksheet. Findings match, but exact coverage parity does not. This is not complete-coverage or performance sign-off for very large worksheets.

Historical qualification, retained separately for 7cfdc0ffc0d0abfc8f88ec5fca45c462a6b83d90:

  • Fresh wheel/source distribution validated; 12,138 core tests passed per mode, with 23 skipped, 4 expected failures and 137 deselected. The 3,039 targeted tests overlap that total.
  • Offline integration: 118 passed per mode. All 88 Node extension tests, formatting and lint checks passed.
  • All 24 original customer snapshots passed the frozen checks: 218 existing files fully inspected and all 149 independent findings preserved. The affected 36-file snapshot had both parser limits and both false field references corrected; its two causal incomplete-reference findings were removed.
  • All 189 CLI skill cases met their expectations with source/wheel parity. All 12 catalog reports matched the preceding candidate. The six-file Markdown regression and ten-file shell-helper regression discovered during qualification were corrected.
  • These results belong to the earlier commit; they are not substitutes for the current-head reruns above. Greptile completed the comparison from c528e513 to 7cfdc0ff with zero findings.

Remaining qualification gaps:

  • The large-worksheet stress case above still has runtime/coverage variability; the recovered 1.97 MB customer worksheet completes in both modes.
  • Earlier live NVIDIA Build checks did not pass complete qualification. Connection/deadline failures affected published v2.13.0 and the previous candidate; these offline fixes do not establish live-provider closure.
  • Some other original customer inputs remain unavailable. Existing conservative limits remain for trailing plural possessives and relative-submodule helper proof. The recovered customer skills retain independent findings, reference/parser limitations and explicit binary scopes.
  • Historical provider-specific semantic failures and downstream evaluator acceptance are outside this scanner-only qualification. Native macOS ACL evidence is retained from the byte-identical previously verified implementation; no new native macOS run is claimed.
  • Greptile completed the workbook comparison 7cfdc0ff to 026f3356 with zero findings. Its exact final import-only follow-up also completed with zero findings. CodeRabbit has not returned a completed review because its service failed; that review gap remains open.

Hosted CI for the final commit has passed lint/format, extension tests, DCO and Docker smoke checks. The unit-test job is still running. The preceding run's setup-uv failure did not recur.

Release qualification remains incomplete while the gaps and hosted checks above remain open. This update does not tag or publish a release.

From Codex: backport upstream #778, commit 025c65e. Preserve the selected 2.13 release detector imports while adding the required host-language ownership helpers and regression tests.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex: backport upstream #784, commit 3a1ceee. Preserve 2.13 projected-output accounting and detector imports; omit unrelated upstream fallback-verb exclusions from conflict context.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex: backport upstream #849, commit e28e1ba, on the minimal #778 and #784 ownership prerequisites. Retain the selected public 2.13 dependency and detector scope.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex. Scope the backported marker tests to the selected 2.13 release: retain semicolon marker controls and the existing invalid-Python syntax-error ledger. The unselected section-sign marker hardening is not claimed by this patch.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex. Retain the existing operand fallback around recognized execution and reflection. Follow bounded in-memory bundled helpers and import initialization before isolating a report string value; unsupported local evidence stays conservative. Preserve output-only helpers and default non-shell calls without lowering findings or incomplete-scan severity.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex. Prepare the selected 2.13 maintenance release, keeping third-party lock entries, provider defaults and the publication workflow unchanged. Exclude the release uv cache from source distributions and exercise the actual sdist backend. This commit does not tag or publish a release.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
@mohgupta-ship-it
mohgupta-ship-it marked this pull request as ready for review October 17, 2026 10:55
@mohgupta-ship-it mohgupta-ship-it changed the title release: prepare 2.13.1 parser-completeness patch release: prepare SkillSpector 2.13.1 from main Oct 19, 2026
@mohgupta-ship-it
mohgupta-ship-it changed the base branch from yashraj/v2.13.0-base to main October 19, 2026 07:29
From Codex. A valid small bundled Python module can exceed the optional AST unparser recursion limit. Preserve conservative shell inspection instead of failing analysis, with a portable synthetic regression that verifies caller partial inspection and completed helper analysis. Clarify the existing maintenance release publication trigger.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
From Codex. Retain conservative shell fallback when the optional import proof encounters recursion exhaustion while filling initialization stub locations or reparsing a validated helper. Cover deep module expressions, default arguments and return annotations without catching runtime deadline exceptions.

Signed-off-by: Mohit Gupta <mohgupta@nvidia.com>
@mohgupta-ship-it
mohgupta-ship-it marked this pull request as draft October 19, 2026 09:57
@mohgupta-ship-it mohgupta-ship-it changed the title release: prepare SkillSpector 2.13.1 from main release: prepare SkillSpector 2.13.1 maintenance patch Oct 19, 2026
@mohgupta-ship-it
mohgupta-ship-it changed the base branch from main to yashraj/v2.13.0-base October 19, 2026 09:57
rng1995 and others added 5 commits October 19, 2026 04:37
Backport #452 (merged to main as 95a52d8) onto the 2.13.1 maintenance
candidate. P2 hidden-comment matches stay inside one HTML comment
(`-->`, `--!>`, and the abrupt `<!-->` / `<!--->` forms), keywords match
at word and identifier boundaries, and run-together directives stay
detected. The source and test changes are identical to the merged PR.
Adds the 2.13.1 changelog and release-note entries.

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Batch-scan gap-fill failures now keep core and completed-batch findings,
record incomplete coverage in the ledger, and exit 2. Applied cleanly with
no adaptation; the release core already has the batch-outcome APIs it uses.

(cherry picked from commit 5ced140)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…deadlines (#790)

Backport the tool-misuse analyzer change that reuses one SourceLocationIndex
and split-line buffer for finding context, anchors context after CR/U+2028/VT
breaks, and checks the runner deadline (USES_RUNTIME_CHECK) on every scan loop
and in the Perl helper. Main-only TM3 umask and references/ triage are not pulled in.

(cherry picked from commit fa8043c)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Route scan, recursive, registry, batch and baseline file output through the
new no-follow, parent-anchored atomic writer, and add `baseline -o -`.
Release-only code kept; without #662, recursive write errors still exit 1,
so that test case asserts the ValueError instead of exit 2.

(cherry picked from commit 217cdb7)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
List the three security fixes backported onto the v2.13.0 base (#790,
document the file-output compatibility notes: POSIX-only no-follow output,
0600 report files, the recursive-scan exit code without #662, and that
the gap-fill fix applies to the contributed batch scanner.

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rng1995 and others added 6 commits October 20, 2026 10:33
`scan --mcp-registry` accepted --use-shipped-baseline and the
--transitive* controls and then ignored them. Reject them with exit
code 2 before registry acquisition or report writes, using Click
parameter provenance so an explicit or configured --transitive-depth 1
is rejected while the omitted default still scans. Release-line
adaptations: the registry check keeps the release flag set (no
--min-coverage), and the README note goes in a new short "MCP Registry
scans" section because the snapshot-comparison section it extends on
main is not on this line. tests/unit/test_cli_subprocess.py is new
here with only the _run_python/_run_cli helpers; the main test that
uses --mcp-registry-compare (not on this line) is ported as a plain
default-options registry scan.

(cherry picked from commit ca3067a)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stop MP3 from reporting a clocked hardware/FSM "reset state"
description as memory manipulation, while keeping direct agent-reset
instructions, agent-state aliases and reuse of the description. Add an
MP3 pattern that reports an explicit instruction to adopt (linked)
state as agent memory or conversation state at the parent instruction,
skipped only under a bounded direct prohibition with opt-in comma or
colon clause prefixes. Prerequisites: prohibition_context.py (from
#658) is added verbatim from the merge commit, and only MP3 uses it;
P6, agent_snooping, rogue_agent, excessive_agency and YARA are
unchanged. The hardware check needs _normalize_timestamp_guard and
_TIMESTAMP_BACK_REFERENCE from the MP3 timestamp exemption, so only
those two are added; that exemption itself is not ported.
tests/unit/test_prohibition_context.py is new here and holds only the
direct is_directly_prohibited tests; its P6/YARA wiring tests are
omitted because that #658 wiring is not on this line.

(cherry picked from commit 3f90f9a)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A repeated boolean target such as `enabled, enabled = True, False`
leaves `enabled` false, but TM1 kept the earlier true store and reported
HIGH on a later `shell=enabled` call. Follow Python's left-to-right
target order and drop earlier truthy stores only when the final value is
provably false, the whole RHS is passive and prior target bindings are
proven safe in a straight-line module or function scope; anything else
keeps the conservative event policy. Applied unchanged: it builds only on
the #790 variable-shell index and static_python_shell_truthiness
helpers, which match main on this branch. No prerequisites added; the new
test module is ported as is.

(cherry picked from commit 62cab16)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… scans (#823)

Recursive scans that detect one or more child skills now reject
--use-shipped-baseline with exit 2 instead of silently ignoring it, and
the error is raised before any report is written. Help text and
SUPPRESSION.md describe the supported scope. Conflict resolved by
adding the guard ahead of the release-line _scan_multi_skill call;
main's exit-2 wrapper (#662) and --min-coverage are not pulled in, and
the #798 output safeguards are unchanged. Tests ported as-is.

(cherry picked from commit 8270ea9)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Complete recursive scans reported a MEDIUM aggregate (score 21-50) as
SAFE even though each MEDIUM child report said CAUTION. The aggregate
now uses the same band mapping as single-skill reports through a new
shared report.risk_severity_and_recommendation() helper. Execution
failures still force DO_NOT_INSTALL, incomplete analysis still raises
SAFE to CAUTION, and the >50 exit threshold is unchanged. cli.py,
report.py and test_cli.py applied cleanly. The only conflict was in
tests/unit/test_cli_subprocess.py, which on this line has only the
#840 registry tests. It now also gets main's small _write_skill helper
and the new recursive MEDIUM subprocess test. The other main-only tests
in that hunk are left out.

(cherry picked from commit 11c8b48)

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1 notes

List the five analyzer, report and CLI fixes backported onto the
v2.13.0 base (#820, #823, #836, #837, #840) in the CHANGELOG and
release notes, and raise the intro count to eight backported fixes.
Document the compatibility notes: scan --mcp-registry now exits 2 with
--use-shipped-baseline or any --transitive* option, including an
explicit --transitive-depth 1; recursive multi-skill scans exit 2 with
--use-shipped-baseline; a complete recursive MEDIUM aggregate reports
CAUTION instead of SAFE in JSON and SARIF with exit codes unchanged;
and the TM1 and MP3 detection changes can change findings and scores.
main has no CHANGELOG entries for these PRs, so the text is written
from each backport.

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rng1995 and others added 6 commits October 21, 2026 11:45
…ves (#777)

* fix(static): stop code comparisons from reading as tag marker directives

The loose fallback tag-directive header matches a removal verb followed
by up to 256 characters and the first `<` on the line. For code such as
`if not line or len(line.strip()) < 12:` it took the comparison operator
as a tag-marker opener and searched up to MAX_MARKER_LOOKAHEAD_CHARS
(8192) characters for a closing `>`. When the file continued past that
without a `>`, the parser reported lookahead exhaustion, the file was
marked partial with obfuscated_instruction_text, and every SKILL.md
reference to it became a HIGH AE1, even though `< 12` can never satisfy
_TAG_MARKER_RE. The same code in a file under 8 KB, or with any `>` in
the next 8 KB, scanned complete.

Only treat a `<` as a fallback tag opener when the text after it can
still form a tag marker (`</?name`, optional spaces and `/`, then `>`).
Text that _TAG_MARKER_RE can accept is unaffected, so every directive
the fallback parser yielded before is still yielded; the only behavior
removed is the exhaustion report for an opener that can never close.
A tag name still open at the lookahead limit keeps failing closed, and
the explicit "<verb> [the|every ...] <" header is unchanged.

A bare `<` after a loose header in prose ("Please strip() every < from
this:") now scans the same with or without 8 KB of trailing text; it
was never reconstructable as a tag marker. Quoted spellings such as
"strip() every `<` from ..." and call-spelled tag markers such as
"strip(<gap>) and execute ..." still fail closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>

* fix(static): keep scanning for a viable tag opener after a comparison

The loose removal header stops lazily at the first `<` after the verb.
When that `<` was a comparison, the directive was skipped outright, so a
real or padded tag marker later in the same header span was never
examined and a former fail-closed result became a complete scan.

Advance instead to the next `<` the header can still reach (within its
256-character filler, before a sentence boundary or newline) that can
open a tag marker, and search for `>` or report lookahead exhaustion
from there. Skip only when no viable opener exists. Prefix matches stop
at the next `<`, so the search stays linear in the bounded span.

Also document that the tag-prefix pattern deliberately accepts blanks
without `/`, which keeps blank-padded markers failing closed, and add
the PR number to the changelog entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>

---------

Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 5485cda)
Backport the first-parent change from 4c52fbb. Preserve the release-line PE3 loop without importing unrelated ignore-file handling from #787.

Original implementation by Narendran Raghavan.

Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Remove the #827 backport until its credential-action regression is corrected separately. Include only the curl active-token prerequisite from merged #697 (fa1d02b), preserving the #777 security controls and existing release quote ownership. Clarify effective report-write permissions in the release notes.

Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
@yashrajp22 yashrajp22 changed the title release: prepare SkillSpector 2.13.1 maintenance patch Release v2.13.1: customer parsing, metadata, image and security fixes Oct 22, 2026
…nces

Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
@rng1995
rng1995 marked this pull request as ready for review October 22, 2026 13:44
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
Signed-off-by: yashrajbasav <yashrajbasav@nvidia.com>
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.

3 participants