Skip to content

feat(offerings): expose the EFFECT notice's effective time - #1500

Merged
dgunning merged 1 commit into
dgunning:mainfrom
shahar-arbor:effect-effective-time
Oct 8, 2026
Merged

dgunning merged 1 commit into
dgunning:mainfrom
shahar-arbor:effect-effective-time

Conversation

@shahar-arbor

@shahar-arbor shahar-arbor commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

What this changes

Before:

  • Effect.from_xml() read finalEffectivenessDispDate and dropped finalEffectivenessDispTime.
  • Nothing said that an EFFECT notice is not public on its filing_date.

After:

  • Effect.effective_time returns the time as "HH:MM:SS", or None when the notice has none.
  • to_context() shows the time.
  • The effective_date docstring and the Effect guide say that SEC accepts and publishes the notice at about 00:15 ET on the next business day, and point point-in-time users to filing.header.acceptance_datetime.

EffectiveData takes the time as a new keyword argument with a default, so existing constructor calls still work.

Fixes #1499

Verification

  • Ground truth: the test uses two notices, with XML as SEC serves it, with only blank lines removed.
    • Lyntris Inc.'s S-1 notice 9999999995-26-002694: effective_time == "15:30:00", effective_date == "2026-08-18".
    • Fitness Fanatics' POS AM notice 9999999995-25-003344: effective_time is None.
    • Checked by hand: the Lyntris header gives ACCEPTANCE-DATETIME 20260819001513, and Fitness Fanatics' gives 20251124001520 (Monday) for a 2025-11-21 filing date.
  • Regression test: tests/issues/regression/test_issue_1499.py, offline, links the issue. It fails on main and passes with the fix.
  • Silence check: a notice without the element gives None, and to_context() leaves the line out, rather than showing an empty time.
  • Docs: docs/guides/effect-data-object-guide.md gains the property row and the publication-time note.
  • Changelog: changelog.d/1499.added.md. assemble_changelog.py --check passes.

Also run:

  • tests/core/test_effect.py: the offline tests pass. The two get_source_filing tests need the network and were not run.
  • ruff check: clean on both files.
  • check_regression_provenance.py and check_regression_skips.py: OK.

6.0

Not a 6.0 change.

Working context (optional)

We use EFFECT notices to date IPOs. Sample used for the publication lag: 60 EFFECT notices for IPO registrations filed Aug 2025 – Aug 2026. For each, the header ACCEPTANCE-DATETIME was compared with filing_date:

  • 52 were accepted at about 00:15 ET the next day;
  • 8 were accepted on Monday for a Friday filing date.

I also considered changing RegistrationS1.effective_date to take the latest EFFECT, not the first. I left it alone. On Fitness Fanatics' F-1 file (333-289484), the second EFFECT is for a POS AM, so the first EFFECT is the right answer for "when was the F-1 declared effective".

🤖 Generated with Claude Code

…1499)

Effect.from_xml() read finalEffectivenessDispDate and dropped
finalEffectivenessDispTime. Effect.effective_time now returns it (None when
the notice has none, as on Fitness Fanatics' POS AM notice), to_context()
shows it, and effective_date documents that SEC accepts and publishes the
notice at about 00:15 ET on the next business day (60/60 IPO notices
checked: 52 the next day, 8 Friday->Monday), so filing_date is not the date
the notice became public.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@dgunning dgunning left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this looks good to merge.

  • The new final_effective_time keyword has a default, and Effect.from_xml() is the only place in the library that builds EffectiveData, so existing callers can't break.
  • When a notice has no time, the property returns None and to_context() leaves the line out, which is the right behaviour for an optional element.
  • The regression tests pass locally against the real Lyntris and Fitness Fanatics notices.
  • The note in the guide and docstring that an EFFECT notice isn't public until about 00:15 ET on the next business day will be useful to anyone doing point-in-time work, and pointing them to filing.header.acceptance_datetime is the right steer.

This is additive, so it can go into 5.62.0, the last 5.x release, if it merges by 10-11.

@dgunning
dgunning merged commit 1b18ab3 into dgunning:main Oct 8, 2026
11 checks passed
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.

EFFECT: effective time is dropped, and filing_date is a day before the notice is public

2 participants