Skip to content

docs: describe the conditional 8-K classifier and the 25-15 extractor - #284

Merged
sroussey merged 3 commits into
mainfrom
claude/keen-knuth-hxoj5s-claude-md-spac
Aug 14, 2026
Merged

docs: describe the conditional 8-K classifier and the 25-15 extractor#284
sroussey merged 3 commits into
mainfrom
claude/keen-knuth-hxoj5s-claude-md-spac

Conversation

@sroussey

Copy link
Copy Markdown
Contributor

Stacked on #283 (which is stacked on #282, on #281). Merge order: #281#282#283 → this. Docs land last because they describe the behaviour #281 and #282 establish.

Defect (MEDIUM) — CLAUDE.md documents the retired 1:1 item-code mapping and calls Form 25/15 deferred

The SPAC consolidated-report section still stated the mapping as deterministic and 1:1:

item 1.01definitive_agreement, 1.02terminated, 2.01completed, 5.07vote

and ended:

Still deferred: Form 25/15 de-registration.

Both are false. Classification is conditional on IPO status, on the EX-2 exhibits and on the pending deal (with material_agreement / eight_k as the non-lifecycle outcomes), and Form 25 / 25-NSE / Form 15 are implemented end to end: 25-15 is registered in EXTRACTOR_IDS, processDeregistration is wired into ProcessAccessionDocFormTask, and deregistrationDescriptor gives it a backfill.

The trust paragraph immediately below was updated in the same batch, so the omission reads as intentional rather than as an oversight — which makes it more likely to be trusted.

Concrete failure

Someone reading CLAUDE.md to understand why a merger 8-K produced no deal is told the mapping is unconditional, so the EX-2 requirement and the date floor are invisible; someone looking for de-registration handling is told it does not exist and does not find sec extractor backfill 25-15, which is the recovery ceremony for the exact gap #282 describes.

Approach

Rewrites CLAUDE.md around the milestone paragraph to state:

  • The conditional classifier, as a table: 2.01 unconditional; 1.01 needs a merger-shaped EX-2 and an event not dated before the floor; 1.02 needs a deal pending as of that filing or merger-shaped exhibits; 5.07 needs the pending deal to have a DA or proxy date.
  • The floor is ipo_date falling back to registration_date, and why an unknown floor does not demoteipo_date is written only from a 424B1/424B4 whose SGML header codes SIC 6770, so a row minted by the S-1 AI content classifier legitimately has none.
  • That the pending-deal hint comes from the event stream strictly before this accession (pendingDealBefore), never from the currently derived deal set — one paragraph naming this as what makes replay idempotent, and naming the exact mechanism by which reading the derived set corrupts the log (recordDealMilestones replaces before appending). This exists so the next change cannot silently reintroduce the CRITICAL in fix(spac): classify 8-K items from the pre-filing event prefix #281.
  • Form 25 / 25-NSE / Form 15 under extractor id 25-15, writing a deregistration event, and the rule that a deregistration ordered at or before a completion is post-close housekeeping that does not fail the deal — with the report-date-vs-filing-date reason.
  • The sweep-order dependency: the 8-K / proxy / 25-15 tier is gated on the row the registration statement mints, each handler records a successful run when the row is missing, and sortFormsForSweep is what gives sec update forms an explicit registration → prospectus → 8-K → proxies → 25/15 order.
  • "Still deferred" replaced by the recovery ceremony sec extractor backfill 25-15 (no --force — its filterTodo already selects known-SPAC Form 25/15 filings with no deregistration event).

sec extractor backfill 25-15 is also added to the SPAC command block.

Tests / risk / migration

None — documentation only. npx prettier --check CLAUDE.md passes.


🤖 Generated with Claude Code


Generated by Claude Code

claude added 2 commits August 14, 2026 15:36
The SPAC section still stated the retired 1:1 item mapping (1.01 ->
definitive_agreement, 1.02 -> terminated, 2.01 -> completed, 5.07 ->
vote) and ended "Still deferred: Form 25/15 de-registration". Both are
false: classification is conditional on the EX-2 exhibits, the date floor
and the deal pending as of the filing, and 25-15 is implemented end to
end.

Rewrites that paragraph to state the real conditions, names the
pre-filing event prefix as what makes replay idempotent (so the next
change cannot silently reintroduce reading the derived deal set),
documents the deregistration event and its post-close-completion rule,
explains the sweep order dependency, and replaces the "still deferred"
sentence with the `sec extractor backfill 25-15` recovery ceremony.
@sroussey
sroussey changed the base branch from claude/keen-knuth-hxoj5s-process-exit to main August 14, 2026 17:23
@sroussey
sroussey merged commit 17cbef7 into main Aug 14, 2026
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.

2 participants