idx=8: freeze (26 records) — Allegiance Bancshares Restricted Stock Agreement template (IWW without /s/)#81
idx=8: freeze (26 records) — Allegiance Bancshares Restricted Stock Agreement template (IWW without /s/)#81arthrod wants to merge 1 commit into
Conversation
…greement: IWW-anchored sig-page detection for form templates without /s/ marks
idx=8 is a form/template Restricted Stock Agreement (Non-Employee Director) for Allegiance Bancshares, Inc. As a blank form it has an IWW operating clause but no /s/ signature marks — only placeholder By:/Name:/Title: fields. The existing _explode_signature_block_lines early-exited when no /s/ carrier existed, leaving party-label and By:/Name:/Title: records at L1 instead of demoting them to L2.
Fix in scripts/parse_doc2dict_with_config.py: when IWW is present but no /s/ exists, treat each IWW record as the sig-page anchor. Walk siblings of the IWW carrier under the same parent (and their descendants) and apply shape detection (SIG_FIELD_RE / SIG_BLOCK_LABEL_RE / CORP_SUFFIX_LABEL_RE / bare-name) to identify sig-line records, then pin them at depth 2 + subdoc_penalty. The walk does not filter by node_id position because doc2dict's promoted-leaf ordering doesn't guarantee document order — shape detection itself filters out non-sig content. Numbered/lettered sections, IWW itself, and envelope/trailer rows are excluded.
Verified:
- idx=8: 26 records, levels {0: 1, 1: 16, 2: 7, 3: 2}, reconstruction word_coverage=100% char_ratio=98%
- All 9 frozen idxs (0..8) regress OK
|
Mention Blocks like a regular teammate with your question or request: @blocks review this pull request Run |
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
CodeAnt AI is reviewing your PR. |
📝 WalkthroughWalkthroughThe PR enhances the parser to detect signatures via IWW clauses when /s/ marks are absent. It adds logic to identify signature-shaped sibling records, demote them to L2 depth, and mark them for later processing. A frozen dataset validates the updated logic on a Restricted Stock Agreement example. ChangesSignature block explosion with IWW fallback
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
There was a problem hiding this comment.
Code Review
This pull request introduces logic to detect signature areas in document templates that lack explicit signature marks but contain an 'In Witness Whereof' (IWW) clause. It implements a new sibling and descendant walk to identify signature-related fields and demote them to level 2. Additionally, a new frozen test case for a Restricted Stock Agreement is added. Feedback was provided regarding an inconsistency in the signature line detection logic where the sibling walk was missing a check for bare titles, which could lead to missing certain party labels.
| looks_sig = ( | ||
| _SIG_FIELD_RE.match(sib_title) | ||
| or _SIG_FIELD_RE.match(sib_body) | ||
| or (sib_title and _SIG_BLOCK_LABEL_RE.match(sib_title)) | ||
| or (sib_title and _CORP_SUFFIX_LABEL_RE.match(sib_title)) | ||
| or (not sib_title and sib_body and _SIG_FIELD_RE.match(sib_body)) | ||
| ) |
There was a problem hiding this comment.
The logic for identifying signature lines in the template case (no /s/) is inconsistent between the sibling walk and the descendant walk. The sibling walk here is missing the (sib_title and not sib_body) check which is present in the descendant walk at line 4032. This means mixed-case party labels like "Holder" (as seen in the verified output for idx=8) might be missed if they are siblings of the IWW clause rather than descendants of another signature-shaped node. Adding this check ensures that bare titles in the signature area are correctly identified as signature lines regardless of their case.
looks_sig = (
_SIG_FIELD_RE.match(sib_title)
or _SIG_FIELD_RE.match(sib_body)
or (sib_title and _SIG_BLOCK_LABEL_RE.match(sib_title))
or (sib_title and _CORP_SUFFIX_LABEL_RE.match(sib_title))
or (sib_title and not sib_body) # bare name as title
or (not sib_title and sib_body and _SIG_FIELD_RE.match(sib_body))
)There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/parse_doc2dict_with_config.py`:
- Around line 4013-4037: The descendant-scan is only executed when the sibling
`sib` matches `looks_sig`, so nested signature-like nodes inside a neutral
wrapper are never examined; change the logic around `looks_sig` so you still add
`sib["node_id"]` to `sig_line_node_ids` when `looks_sig` is true, but always
call `_walk_descendants_local(sib["node_id"])` for every `sib` (removing the `if
looks_sig:` gating) and keep the existing filtering checks
(`_has_section_marker_title`, `_is_iww_clause`, `_SIG_FIELD_RE`,
`_SIG_BLOCK_LABEL_RE`, `_CORP_SUFFIX_LABEL_RE`, bare title/body heuristics,
`_span_text`) when deciding whether to add descendant `d["node_id"]` to
`sig_line_node_ids`.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 6c388712-1d29-4490-84c6-a9d230a64bb6
📒 Files selected for processing (3)
data/auto_parse/level_freeze/frozen/idx_8.jsonldata/auto_parse/level_freeze/state.jsonscripts/parse_doc2dict_with_config.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py
📄 CodeRabbit inference engine (Custom checks)
**/*.py: Run smoke test for Python web servers: start server, wait for ready signal, hit GET /health or GET /, assert HTTP 200. Timeout: 30s. Fail if smoke test fails.
Run smoke test for Python CLI: run<cli> --help, assert exit code 0. Fail if smoke test fails.
Runuv run pytest --cov=<src_package> --cov-report=term-missing --cov-branch --cov-fail-under=80 -qfor Python coverage. Fail if exit code is non-zero, branch coverage < 70%, or line coverage < 80%.
Runuv run ruff check . --difffor Python linting. Fail if exit code is non-zero and list each violation.
Runuv run ruff format --check --diff .for Python formatting. Fail if exit code is non-zero and list each unformatted file.
Scan diffs for newly added Python suppression comments (# noqa, # type: ignore). Each suppression must have an inline justification comment. Fail if any new suppression lacks justification. Warn if total new suppressions > 3 in a single PR.
Runuv run ruff check --select I,F401 .to verify Python import ordering and detect unused imports. Fail if violations found.
Run the full Python test suite:uv run pytest --tb=line -qon origin/main to capture baseline pass/fail counts, anduv run pytest --tb=short -qon PR branch. Fail immediately if exit code is non-zero.
Runuv run typy checkfor Python type checking if .py files exist in diff or project has py.typed marker. Fail if exit code is non-zero. If typy is not available, use configured mypy or pyright instead. Fail with 'No Python type checker configured' if none is found.
Scan diffs for new baretype: ignorecomments (without error codes) in Python files andcast()calls without explanatory comments. Warn for each. Fail if baretype: ignorecount > 3.
Files:
scripts/parse_doc2dict_with_config.py
**/*.{py,ts,tsx}
📄 CodeRabbit inference engine (Custom checks)
For each changed production file, verify at least one corresponding test file exists or already exists in the repo with assertions covering changed symbols. Fail if a changed production file has zero associated test file and introduces new exported functions, classes, or public methods. Exempt: config files, type declaration files (.d.ts), migrations, and generated code.
Files:
scripts/parse_doc2dict_with_config.py
🔇 Additional comments (2)
data/auto_parse/level_freeze/frozen/idx_8.jsonl (1)
1-26: LGTM!data/auto_parse/level_freeze/state.json (1)
11-12: LGTM!Also applies to: 175-180
| if looks_sig: | ||
| sig_line_node_ids.add(sib["node_id"]) | ||
| # Walk descendants of this sig-shape sibling so | ||
| # nested labels/fields (e.g. a "Holder" child under | ||
| # a party-label parent) are also demoted to L2. | ||
| for d in _walk_descendants_local(sib["node_id"]): | ||
| if d.get("is_envelope") or d.get("scope") == "trailer": | ||
| continue | ||
| if _has_section_marker_title(d): | ||
| continue | ||
| if _is_iww_clause(_span_text(d)): | ||
| continue | ||
| d_title = (d.get("title") or "").strip() | ||
| d_body = (d.get("body_direct") or "").strip() | ||
| d_looks_sig = ( | ||
| _SIG_FIELD_RE.match(d_title) | ||
| or _SIG_FIELD_RE.match(d_body) | ||
| or (d_title and _SIG_BLOCK_LABEL_RE.match(d_title)) | ||
| or (d_title and _CORP_SUFFIX_LABEL_RE.match(d_title)) | ||
| or (d_title and not d_body) # bare name as title | ||
| or (not d_title and d_body and _SIG_FIELD_RE.match(d_body)) | ||
| ) | ||
| if d_looks_sig: | ||
| sig_line_node_ids.add(d["node_id"]) | ||
|
|
There was a problem hiding this comment.
Descendant sig-line detection is incorrectly gated by sibling shape.
At Line 4015, descendant traversal only runs when sib already matches looks_sig. If doc2dict emits a neutral wrapper sibling containing By:/Name:/Title: descendants, those descendants are never scanned and won’t be pinned/flagged.
Suggested patch
- if looks_sig:
- sig_line_node_ids.add(sib["node_id"])
- # Walk descendants of this sig-shape sibling so
- # nested labels/fields (e.g. a "Holder" child under
- # a party-label parent) are also demoted to L2.
- for d in _walk_descendants_local(sib["node_id"]):
+ if looks_sig:
+ sig_line_node_ids.add(sib["node_id"])
+ # Always inspect descendants of IWW-scope siblings; a wrapper
+ # node may not be sig-shaped while its children are.
+ for d in _walk_descendants_local(sib["node_id"]):
if d.get("is_envelope") or d.get("scope") == "trailer":
continue
if _has_section_marker_title(d):
continue
if _is_iww_clause(_span_text(d)):
continue📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if looks_sig: | |
| sig_line_node_ids.add(sib["node_id"]) | |
| # Walk descendants of this sig-shape sibling so | |
| # nested labels/fields (e.g. a "Holder" child under | |
| # a party-label parent) are also demoted to L2. | |
| for d in _walk_descendants_local(sib["node_id"]): | |
| if d.get("is_envelope") or d.get("scope") == "trailer": | |
| continue | |
| if _has_section_marker_title(d): | |
| continue | |
| if _is_iww_clause(_span_text(d)): | |
| continue | |
| d_title = (d.get("title") or "").strip() | |
| d_body = (d.get("body_direct") or "").strip() | |
| d_looks_sig = ( | |
| _SIG_FIELD_RE.match(d_title) | |
| or _SIG_FIELD_RE.match(d_body) | |
| or (d_title and _SIG_BLOCK_LABEL_RE.match(d_title)) | |
| or (d_title and _CORP_SUFFIX_LABEL_RE.match(d_title)) | |
| or (d_title and not d_body) # bare name as title | |
| or (not d_title and d_body and _SIG_FIELD_RE.match(d_body)) | |
| ) | |
| if d_looks_sig: | |
| sig_line_node_ids.add(d["node_id"]) | |
| if looks_sig: | |
| sig_line_node_ids.add(sib["node_id"]) | |
| # Always inspect descendants of IWW-scope siblings; a wrapper | |
| # node may not be sig-shaped while its children are. | |
| for d in _walk_descendants_local(sib["node_id"]): | |
| if d.get("is_envelope") or d.get("scope") == "trailer": | |
| continue | |
| if _has_section_marker_title(d): | |
| continue | |
| if _is_iww_clause(_span_text(d)): | |
| continue | |
| d_title = (d.get("title") or "").strip() | |
| d_body = (d.get("body_direct") or "").strip() | |
| d_looks_sig = ( | |
| _SIG_FIELD_RE.match(d_title) | |
| or _SIG_FIELD_RE.match(d_body) | |
| or (d_title and _SIG_BLOCK_LABEL_RE.match(d_title)) | |
| or (d_title and _CORP_SUFFIX_LABEL_RE.match(d_title)) | |
| or (d_title and not d_body) # bare name as title | |
| or (not d_title and d_body and _SIG_FIELD_RE.match(d_body)) | |
| ) | |
| if d_looks_sig: | |
| sig_line_node_ids.add(d["node_id"]) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@scripts/parse_doc2dict_with_config.py` around lines 4013 - 4037, The
descendant-scan is only executed when the sibling `sib` matches `looks_sig`, so
nested signature-like nodes inside a neutral wrapper are never examined; change
the logic around `looks_sig` so you still add `sib["node_id"]` to
`sig_line_node_ids` when `looks_sig` is true, but always call
`_walk_descendants_local(sib["node_id"])` for every `sib` (removing the `if
looks_sig:` gating) and keep the existing filtering checks
(`_has_section_marker_title`, `_is_iww_clause`, `_SIG_FIELD_RE`,
`_SIG_BLOCK_LABEL_RE`, `_CORP_SUFFIX_LABEL_RE`, bare title/body heuristics,
`_span_text`) when deciding whether to add descendant `d["node_id"]` to
`sig_line_node_ids`.
| looks_sig = ( | ||
| _SIG_FIELD_RE.match(sib_title) | ||
| or _SIG_FIELD_RE.match(sib_body) | ||
| or (sib_title and _SIG_BLOCK_LABEL_RE.match(sib_title)) | ||
| or (sib_title and _CORP_SUFFIX_LABEL_RE.match(sib_title)) | ||
| or (not sib_title and sib_body and _SIG_FIELD_RE.match(sib_body)) | ||
| ) |
There was a problem hiding this comment.
Suggestion: The IWW-anchored path marks uppercase/corporate-title records as signature lines even when they carry normal clause body text, because _SIG_BLOCK_LABEL_RE and _CORP_SUFFIX_LABEL_RE are used without the body guard applied in the /s/ path. This can incorrectly demote non-signature agreement content to L2 in unsigned templates. Require empty/sig-shaped body before treating label-shaped titles as sig lines. [incorrect condition logic]
Severity Level: Major ⚠️
- ❌ Non-signature uppercase headings demoted to L2 sig-lines.
- ⚠️ Level-loop gating may treat real clauses as signature block.Steps of Reproduction ✅
1. Inspect `_explode_signature_block_lines()` in `scripts/parse_doc2dict_with_config.py`:
the IWW-anchored no-`/s/` branch begins at line 3952, and for each sibling of the IWW
parent it computes `looks_sig` at lines 4004–4012 using `_SIG_BLOCK_LABEL_RE` and
`_CORP_SUFFIX_LABEL_RE` on `sib_title` without checking that `sib_body` is empty or
sig-shaped, unlike the `/s/` path's ancestor logic at lines 14–24 and descendant logic at
lines 80–88 in the same file, which explicitly require `not p_body`/`not d_body` when
using these label detectors.
2. In a Python shell, build a `rows` list where `iww` is a record with `node_id=1`,
`parent_node_id=20`, span starting "IN WITNESS WHEREOF" (so `_is_iww_clause` is true), and
`heading` is a sibling record with `node_id=2`, `parent_node_id=20`, `title="BINDING
EFFECT"` (short all-caps, matching `_SIG_BLOCK_LABEL_RE`) and `body_direct="This section
sets binding effect terms."` (non-sig-shaped text), with `is_envelope=False` and `scope`
not `"trailer"`.
3. Call `_explode_signature_block_lines(rows)` so that `actives` contains both records,
`iww_present` is set true at lines 36–44, `has_slash_s` is false at line 46, and the `if
not has_slash_s and iww_present:` branch at 3952 is taken; `sig_area_parent_ids` is
`{20}`, and the sibling loop at lines 3993–3999 iterates over `heading`, which is not
skipped by `_has_section_marker_title` because it has no numbered/lettered marker.
4. For `heading`, `sib_title` is `"BINDING EFFECT"` and `sib_body` is the non-empty clause
text; `looks_sig` at lines 4006–4012 becomes true because
`_SIG_BLOCK_LABEL_RE.match(sib_title)` passes even though `sib_body` is normal clause
content, so `heading["node_id"]` is added to `sig_line_node_ids` at lines 4013–4015 and
later, in PASS 3 at lines 4039–4051, its `depth` is forcibly set to `2 + subdoc_penalty`
and `_sig_line=True`, incorrectly demoting a real agreement clause to a signature-line
record under the IWW-anchored template path.Fix in Cursor | Fix in VSCode Claude
(Use Cmd/Ctrl + Click for best experience)
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** scripts/parse_doc2dict_with_config.py
**Line:** 4006:4012
**Comment:**
*Incorrect Condition Logic: The IWW-anchored path marks uppercase/corporate-title records as signature lines even when they carry normal clause body text, because `_SIG_BLOCK_LABEL_RE` and `_CORP_SUFFIX_LABEL_RE` are used without the body guard applied in the `/s/` path. This can incorrectly demote non-signature agreement content to L2 in unsigned templates. Require empty/sig-shaped body before treating label-shaped titles as sig lines.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix| if looks_sig: | ||
| sig_line_node_ids.add(sib["node_id"]) | ||
| # Walk descendants of this sig-shape sibling so | ||
| # nested labels/fields (e.g. a "Holder" child under | ||
| # a party-label parent) are also demoted to L2. | ||
| for d in _walk_descendants_local(sib["node_id"]): | ||
| if d.get("is_envelope") or d.get("scope") == "trailer": | ||
| continue | ||
| if _has_section_marker_title(d): | ||
| continue | ||
| if _is_iww_clause(_span_text(d)): | ||
| continue | ||
| d_title = (d.get("title") or "").strip() | ||
| d_body = (d.get("body_direct") or "").strip() | ||
| d_looks_sig = ( | ||
| _SIG_FIELD_RE.match(d_title) | ||
| or _SIG_FIELD_RE.match(d_body) | ||
| or (d_title and _SIG_BLOCK_LABEL_RE.match(d_title)) | ||
| or (d_title and _CORP_SUFFIX_LABEL_RE.match(d_title)) | ||
| or (d_title and not d_body) # bare name as title | ||
| or (not d_title and d_body and _SIG_FIELD_RE.match(d_body)) | ||
| ) | ||
| if d_looks_sig: | ||
| sig_line_node_ids.add(d["node_id"]) |
There was a problem hiding this comment.
Suggestion: Descendant scanning is currently gated behind the sibling-level looks_sig check, so any IWW sibling that is just a structural container (doesn't itself match sig-shape) will never have its children inspected. That drops real signature fields nested under that container in no-/s/ templates. Walk descendants for each sibling first, then apply sig-shape filtering per descendant record. [incomplete implementation]
Severity Level: Major ⚠️
- ❌ IWW-only templates can drop nested signature fields.
- ⚠️ Level-freeze baselines mis-group signature blocks for some forms.Steps of Reproduction ✅
1. Open `scripts/parse_doc2dict_with_config.py` and inspect
`_explode_signature_block_lines()` at line 3825 and the IWW-anchored no-`/s/` branch at
lines 3952–4053; note the descendant walk `_walk_descendants_local()` is only invoked
inside the `if looks_sig:` block at lines 4013–4036.
2. In a Python shell from the repo root, construct a minimal `rows` list matching this
function's expected shape: one record `iww` with `node_id=1`, `parent_node_id=10`, span
starting with "IN WITNESS WHEREOF" (so `_is_iww_clause(_span_text(iww))` is true), and
another record `container` with `node_id=2`, `parent_node_id=10`, whose `title` and
`body_direct` are both non-sig-shaped (so `_SIG_FIELD_RE`, `_SIG_BLOCK_LABEL_RE`, and
`_CORP_SUFFIX_LABEL_RE` all return false); then add a child record `sig_child` with
`node_id=3`, `parent_node_id=2`, whose `title` is `"By:"` (so `_SIG_FIELD_RE.match("By:")`
is true).
3. Call `_explode_signature_block_lines(rows)` directly (imported from
`scripts.parse_doc2dict_with_config`) so that `actives` includes all three records,
`iww_present` is set true at lines 36–44, `has_slash_s` is false at line 46, and the
form/template branch `if not has_slash_s and iww_present:` at lines 3952–3956 is taken;
inside, `sig_area_parent_ids` becomes `{10}`, `siblings` contains `iww` and `container`,
`container` is not skipped by `_has_section_marker_title`, and its `looks_sig` computed at
lines 4004–4012 is false because its title/body are not sig-shaped.
4. Because `looks_sig` is false for `container`, the `if looks_sig:` block at line 4013 is
not entered, `_walk_descendants_local(container["node_id"])` is never called, and
`sig_child` (with `title="By:"`) is never examined or added to `sig_line_node_ids`; in
PASS 3 (lines 4039–4051) only records whose `node_id` is in `sig_line_node_ids` are
assigned depth `2 + subdoc_penalty` and `_sig_line=True`, so `sig_child` remains at its
original depth and is not marked as a signature line even though it structurally is part
of the signature page.Fix in Cursor | Fix in VSCode Claude
(Use Cmd/Ctrl + Click for best experience)
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** scripts/parse_doc2dict_with_config.py
**Line:** 4013:4036
**Comment:**
*Incomplete Implementation: Descendant scanning is currently gated behind the sibling-level `looks_sig` check, so any IWW sibling that is just a structural container (doesn't itself match sig-shape) will never have its children inspected. That drops real signature fields nested under that container in no-`/s/` templates. Walk descendants for each sibling first, then apply sig-shape filtering per descendant record.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix|
CodeAnt AI finished reviewing your PR. |
|
Triage agent — PR #81 comment review (read-only pass, no code changes) 4 inline comments reviewed:
WILL-DEFER items (3 distinct): Unify sibling/descendant sig-guard logic; ungate descendant traversal from sibling Triage only — no code changes made this round. |
User description
Summary
Ninth stacked PR. Adds idx=8 (RESTRICTED STOCK AGREEMENT, Allegiance Bancshares Non-Employee Director form template) as the ninth verified frozen baseline on top of idx=7 (PR #80).
idx=8 is a blank form/template — has the IWW operating clause but NO
/s/signature marks, only placeholderBy:/Name:/Title:fields. This stress-tests the sig-page detector against the template-form pattern.Parser change (1 surgical, shape-driven)
Extended
_explode_signature_block_lines(~lines 3935-4057): handles the IWW-present-but-no-/s/case. When_SIGN_OFF_REfinds no/s/carrier but an IWW operating clause is present:_SIG_FIELD_REforBy:/Name:/Title:/Address:,_SIG_BLOCK_LABEL_REfor ALL-CAPS party labels,_CORP_SUFFIX_LABEL_REfor corp-suffix labels) to identify sig-line records2 + subdoc_penaltyGating: only fires when
not has_slash_s and iww_present. In all 8 prior signed agreements, this branch is skipped — confirmed by byte-identical regress.Verified output for idx=8
{L0:1, L1:16, L2:7, L3:2}Top-level structure (verbatim L0 + sig area)
The template has NO
/s/marks (it's a blank form). Sig area structure preserved per doc2dict natural grouping at L2.Test plan
uv run scripts/parse_doc2dict_with_config.py --limit 9 --no-truncate --output-dir data/auto_parseexits 0 withok 9uv run scripts/level_loop/freeze.py 8 --forcereports word_coverage ≥ 90% (100.0%)uv run scripts/level_loop/regress.pyreports all 9 frozen idxs OKSource
http://www.sec.gov/Archives/edgar/data/1642081/000164208117000074/a2017q1exhibit101-restrict.htm
Why this matters for the corpus
Form templates with blank signature fields are common in SEC EX-10 filings (stock award forms, employment agreement templates, etc.). The IWW-without-/s/ branch generalizes to all such templates while leaving signed agreements untouched.
🤖 Generated with Claude Code
CodeAnt-AI Description
Detect signature areas in blank form agreements that have an IWW clause but no
/s/markWhat Changed
/s/signature mark now keep the signature page grouped correctly instead of leaving signature fields at the wrong levelBy:,Name:, andTitle:are now treated as signature-area content when they appear alongside the IWW clauseImpact
✅ Correct parsing of blank signed-form templates✅ Fewer misgrouped signature fields✅ Stable frozen baseline coverage🔄 Retrigger CodeAnt AI Review
💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.