Private
Public Access
0
0

Add concrete IPO stage dates to reports

Request:
- Include the concrete T0, T1, T2, and D1 dates in every analyst report.

Changes:
- Add a Stage Calendar section to the single-IPO report generator.
- Require analyst reports to include ticker-specific T0 subscription window, T1 allotment-result date, T2 grey-market date/window, and D1 listing date.
- Update the 06106 T0 report with its concrete stage dates.
- Document the requirement in the analyst skill, README, and rule change log.

Verification:
- Ran py_compile for scripts/generate_ipo_report.py.
- Generated a 06106 dry-run report and checked the stage calendar.
- Ran git diff --check.

Next useful context:
- For 06106, T0 is 2026-06-15 to 2026-06-18, T1/T2 is 2026-06-23, and D1 is 2026-06-24.
This commit is contained in:
2026-06-15 14:24:06 +00:00
parent 29ed22e476
commit 07d7a0064a
5 changed files with 78 additions and 1 deletions
+2
View File
@@ -88,6 +88,7 @@ Generated prediction reports must remain stage-safe:
- T0 reports use only prospectus-stage fields and T0 calibration.
- T1 reports may add allotment demand fields and T1 calibration.
- T2/D1 is the intended sell window; D5/D20/D60 returns are never shown as prediction inputs and are reserved for later review cards.
- Every report must include a concrete stage calendar for the ticker: T0 subscription window, T1 allotment-result date, T2 grey-market date/window, and D1 listing date.
## Output Standards
@@ -96,6 +97,7 @@ Every prediction card should include:
- `ticker`
- `stage`
- `data_as_of`
- concrete T0/T1/T2/D1 dates for the ticker
- `rule_version`
- `decision`
- `total_score`
+1 -1
View File
@@ -170,7 +170,7 @@ Use the analyst report generator after the archive and model dataset are current
The generator writes `reports/{date}_{ticker}_{stage}_analysis.md` by default. It auto-selects `T1_allotment` when structured allotment-demand facts exist; otherwise it generates a `T0_prospectus` report. Use `--stdout` for a dry run or `--output` to choose a specific Markdown path.
Prediction reports are stage-safe: T0 reports use only prospectus-stage facts and T0 calibration, while T1 reports add allotment demand and T1 calibration. Reports should frame the trade as a T2/D1 exit. Post-listing D5/D20/D60 performance stays out of prediction reports and is reserved for review cards.
Prediction reports are stage-safe: T0 reports use only prospectus-stage facts and T0 calibration, while T1 reports add allotment demand and T1 calibration. Each report includes a concrete stage calendar for that ticker: T0 subscription window, T1 allotment-result date, T2 grey-market date/window, and D1 listing date. Reports should frame the trade as a T2/D1 exit. Post-listing D5/D20/D60 performance stays out of prediction reports and is reserved for review cards.
## Incremental Archive Sync
@@ -16,6 +16,15 @@
- Score bucket: `t0_gte_8`
- Calibrated D1 positive probability: 76.4% from 72 historical D1 labels
## Stage Calendar
| Stage | Concrete Date For This IPO | Meaning |
| --- | --- | --- |
| `T0_prospectus` | 2026-06-15 to 2026-06-18 | Subscription window; use prospectus and offer terms only. |
| `T1_allotment` | 2026-06-23 | Allotment results day; use public demand, placing demand, and allocation facts. |
| `T2_grey_market` | 2026-06-23 after allotment results | Pre-listing grey-market sell window if a reliable executable source exists. |
| `D1` | 2026-06-24 | First official trading day; default sell window when T2 data is unavailable or unreliable. |
## Facts
| Field | Value |
+22
View File
@@ -1,5 +1,27 @@
# Rule Change Log
## 2026-06-15 - Add concrete stage dates to reports
Request:
- Every analyst report should note the specific dates behind T0, T1, T2, and D1 for the covered IPO.
Change:
- Added a `Stage Calendar` section to the single-ticker report generator.
- Required analyst reports to show the ticker-specific T0 subscription window, T1 allotment-result date, T2 grey-market date/window, and D1 listing date.
- Updated the 06106 T0 report to include its concrete stage dates.
Rationale:
- The T0/T1/T2/D1 labels are project analysis stages, so reports should always bind them to actual calendar dates for the IPO under review.
Verification:
- Generated a 06106 dry-run report and checked the stage calendar.
- Ran py_compile for the report generator.
- Ran git diff --check.
## 2026-06-15 - Clarify short-exit IPO strategy horizon
Request:
+44
View File
@@ -287,6 +287,46 @@ def facts_table(record: dict[str, str], stage: str) -> str:
return "\n".join(lines)
def stage_calendar_table(record: dict[str, str]) -> str:
application_start = fmt_value(record["application_start_date"])
application_end = fmt_value(record["application_end_date"])
allotment_date = fmt_value(record["allotment_results_expected_date"])
listing_date = fmt_value(record["listing_date"])
if allotment_date != "n/a":
t2_date = f"{allotment_date} after allotment results"
elif listing_date != "n/a":
t2_date = "trading day before D1; exact date not archived"
else:
t2_date = "n/a"
rows = [
(
"T0_prospectus",
f"{application_start} to {application_end}",
"Subscription window; use prospectus and offer terms only.",
),
(
"T1_allotment",
allotment_date,
"Allotment results day; use public demand, placing demand, and allocation facts.",
),
(
"T2_grey_market",
t2_date,
"Pre-listing grey-market sell window if a reliable executable source exists.",
),
(
"D1",
listing_date,
"First official trading day; default sell window when T2 data is unavailable or unreliable.",
),
]
lines = ["| Stage | Concrete Date For This IPO | Meaning |", "| --- | --- | --- |"]
for stage, date_text, meaning in rows:
lines.append(f"| `{stage}` | {date_text} | {meaning} |")
return "\n".join(lines)
def source_paths(record: dict[str, str], stage: str) -> list[str]:
paths = []
if record["prospectus_source_path"]:
@@ -367,6 +407,10 @@ def build_report(record: dict[str, str], rows: list[dict[str, str]], stage: str,
f"- Score bucket: `{bucket}`",
f"- Calibrated D1 positive probability: {fmt_pct_rate(metric.d1_positive_rate)} from {metric.sample_size} historical D1 labels",
"",
"## Stage Calendar",
"",
stage_calendar_table(record),
"",
"## Facts",
"",
facts_table(record, stage),