Archive recent HKEX IPO targets

Request:
Use the project archivist workflow to update IPO target coverage for the most recent three-year window.

Changes:
- Add scripts/update_recent_ipo_list.py to discover HKEXnews annual new listing reports, archive XLSX sources, parse subscription-relevant IPO rows, and update SQLite plus snapshots.
- Add new_listing_report_entries to preserve annual report row-level evidence.
- Archive 2023-2026 Main Board new listing reports and 2024-2026 GEM new listing reports.
- Seed 290 report-backed IPO targets for 2023-06-15 through 2026-06-15, skipping 10 non-IPO rows without numeric offer prices.
- Refresh ipo_master, missing offering_terms fields, source_refs, ticker_sync_state, and sync_tasks.
- Add openpyxl as the XLSX parser dependency and document the archivist refresh flow.
- Limit sync summary output while keeping the full queue in SQLite and CSV snapshots.

Verification:
- Ran update_recent_ipo_list.py for 2023-06-15 to 2026-06-15 with as-of 2026-06-15T07:30:00Z.
- Parsed project Python scripts with ast.parse.
- Checked SQLite integrity and DB-to-snapshot row counts.
- Verified source_refs paths are repo-relative, files exist, and SHA-256 hashes match.
- Ran git diff --check and git diff --cached --check.
- Checked for Python cache and SQLite transient files.

Next useful context:
- ipo_master now has 293 tickers; new_listing_report_entries has 290 report-backed targets.
- Current sync queue has 2005 open tasks and 42 waiting_until_due tasks for deeper per-ticker archival stages.
This commit is contained in:
2026-06-15 06:42:31 +00:00
parent 08db218b6d
commit c65b20a1c4
22 changed files with 6012 additions and 42 deletions
+25
View File
@@ -70,6 +70,31 @@ CREATE TABLE IF NOT EXISTS price_performance (
UNIQUE (ticker, stage)
);
CREATE TABLE IF NOT EXISTS new_listing_report_entries (
report_entry_id TEXT PRIMARY KEY,
ticker TEXT NOT NULL REFERENCES ipo_master(ticker),
report_year INTEGER NOT NULL,
board TEXT NOT NULL,
source_id TEXT NOT NULL,
company_name_en TEXT NOT NULL,
prospectus_date TEXT,
listing_date TEXT NOT NULL,
offer_price_hkd REAL,
funds_raised_hkd REAL,
subscription_ratio_times REAL,
market_cap_hkd REAL,
outstanding_shares_at_listing INTEGER,
listing_method TEXT,
industry_label TEXT,
place_of_incorporation TEXT,
sponsors TEXT,
reporting_accountants TEXT,
valuers TEXT,
data_as_of TEXT NOT NULL,
notes TEXT,
UNIQUE (ticker, report_year, board)
);
CREATE TABLE IF NOT EXISTS source_refs (
source_id TEXT PRIMARY KEY,
ticker TEXT NOT NULL REFERENCES ipo_master(ticker),