{
  "api_version": "v1",
  "dataset_version": "AdityaNet_v2_dataset_r1",
  "dataset_sha256": "43fd0e228b28ae6bc7e468c3acf68722768bd62b73798eb6631e9e6233b71ed9",
  "generated_at": "2026-07-29T13:34:16.811173+00:00",
  "source_commit": "99af630",
  "data": {
    "id": "CONTRADICTION-001",
    "slug": "contradiction-001",
    "title": "Frozen contract rule F-09 rejects valid archive data",
    "state": "CLOSED",
    "date": "2026-07-17",
    "reason": "Implementation proved a frozen-contract rule impossible to satisfy. RESOLVED by spec r1.",
    "resolving_revision": "r1",
    "status_line": "Status: CLOSED 2026-07-17 \u2014 owner approved the \u00a76 amendment; applied as PARSER_SPECIFICATION.md r1 (\u00a710 Revision History). Milestone II now passes 32/32 with the xfail marker removed. See COMPLIANCE_M2.md.",
    "declined_amendment": false,
    "lead": "**Status: CLOSED 2026-07-17 \u2014 owner approved the \u00a76 amendment; applied as PARSER_SPECIFICATION.md r1 (\u00a710 Revision History). Milestone II now passes 32/32 with the xfail marker removed. See COMPLIANCE_M2.md.**\n\nRaised under the Phase 0.5.2 implementation rule: *\"If the implementation contradicts the specification, STOP, document the contradiction, explain why, and wait for approval\"* and *\"No design changes are permitted unless implementation proves the contract impossible to satisfy.\"*\n\n---",
    "sections": [
      {
        "heading": "1. The contradiction",
        "body": "**Frozen contract** (`PARSER_SPECIFICATION.md` @ `6de0eb2`, \u00a72.3 and \u00a75 F-09):\n\n> `\u03a3(STOP\u2212START)` \u2248 `EXPOSURE` (\u00b11 s) \u2192 else F-09\n\n**Result on the mandated D1 validation file** `AL1_SOLEXS_20240514_SDD2_L1.gti.gz`:\n\n| Quantity | Value |\n|---|---|\n| `\u03a3(STOP\u2212START)` (the frozen formula) | **86390.0 s** |\n| Declared `EXPOSURE` | **86395.0 s** |\n| Discrepancy | **\u22125.0 s** vs a \u00b11.0 s tolerance \u2192 **F-09 terminates** |\n\nThe parser correctly refuses to parse the reference file of the reference day. **Satisfying the contract literally makes the archive unparseable.** This meets the \"impossible to satisfy\" bar exactly."
      },
      {
        "heading": "2. Why \u2014 the data is right and the contract is wrong",
        "body": "The GTI endpoints are **inclusive** at 1-second granularity. Evidence, three independent lines:\n\n**(a) Exact arithmetic match.** With 5 intervals:\n| Hypothesis | Formula | Result | Error vs EXPOSURE |\n|---|---|---|---|\n| A \u2014 exclusive (frozen rule) | `\u03a3(STOP\u2212START)` | 86390.0 | **\u22125.0 s** |\n| B \u2014 inclusive | `\u03a3(STOP\u2212START+1)` | **86395.0** | **0.0 s** |\n\nThe \u22125.0 s error equals the interval count exactly: one lost second per interval \u2014 the signature of an off-by-one endpoint convention, not of corrupt data.\n\n**(b) Independent coverage cross-check.** Marking each second of 2024-05-14 as covered under the inclusive rule yields **86,395 of 86,400 s covered \u2014 equal to the declared EXPOSURE exactly.**\n\n**(c) The excluded seconds are physically coherent.** Day-offsets `[0, 5, 30072, 30078, 83951]`: second 0 (the day's data begins 00:00:01, matching the primary header `TSTART='2024-05-14T00:00:01+00:00'`) plus four isolated 1-second dropouts. Under my frozen exclusive reading these would be four *2-second* gaps \u2014 which is precisely the error I made when drafting \u00a76 (see \u00a74).\n\n**Conclusion:** `\u03a3(STOP\u2212START+1) == EXPOSURE` holds with **zero** error. The archive is internally consistent. The frozen rule encodes an arithmetic convention I inferred without computing it."
      },
      {
        "heading": "3. Root cause of the specification defect",
        "body": "When drafting \u00a72.3 I read the GTI rows and the `EXPOSURE='86395.0'` header, and asserted the standard OGIP exclusive convention **without summing the intervals**. Structure-only discovery captured the schema correctly but did not test the *arithmetic relationship between two fields* \u2014 a gap in the discovery method, not in the data.\n\nThis is a milder relative of the v1 failure: an unverified assumption promoted to a rule. The difference is that the fail-loud architecture caught it on the first real file rather than thirty sprints later \u2014 F-09 did its job, by rejecting the file rather than silently mis-computing live time."
      },
      {
        "heading": "4. The contract is also internally inconsistent (found while investigating)",
        "body": "- **\u00a75 F-09** implies live time = 86390 s (exclusive).\n- **\u00a76 D1 acceptance** already states *\"live time \u2248 86395 s\"* (inclusive).\n\nThe two sections contradict each other, and the real data adjudicates for **\u00a76**. Additionally \u00a76's *\"GTI gaps \u2248 4\u00d72 s\"* is wrong for the same reason: the truth is **5 excluded seconds** \u2014 4 single-second dropouts plus second 0."
      },
      {
        "heading": "5. Downstream impact if left unamended",
        "body": "`\u03a3(STOP\u2212START)` understates live time by **1 s per GTI interval**. This propagates into \u00a73 `T1.live_time_s`, `gti_fraction`, and every `rate_total = counts_total/live_time_s`. On a minute containing several GTI boundaries the rate error is ~1\u20132%, biased **high** (live time too small). Small, systematic, and exactly the class of silent error this project exists to eliminate."
      },
      {
        "heading": "6. Proposed amendment (NOT applied \u2014 requires approval)",
        "body": "1. **\u00a72.3** \u2014 declare the convention explicitly: *SoLEXS GTI `START`/`STOP` are **inclusive** second-marks at 1-s sampling; live time of an interval = `STOP \u2212 START + 1`.*\n2. **\u00a75 F-09** \u2014 restate as: *`\u03a3(STOP\u2212START+1) != EXPOSURE` (exact equality; tolerance 0 s) \u2192 F-09.* Tightening from \u00b11 s to exact is justified because the relationship is now known to be definitional, not approximate. **A tolerance would re-admit the very ambiguity that produced this defect.**\n3. **\u00a73 T1/T2** \u2014 `live_time_s` computed under the inclusive rule.\n4. **\u00a76 D1** \u2014 replace *\"GTI gaps \u2248 4\u00d72 s\"* with *\"5 excluded seconds at day-offsets [0, 5, 30072, 30078, 83951]; live time exactly 86395 s\"*.\n5. **\u00a78** \u2014 record new assumption **A-8**: *the inclusive convention is verified on 2024-05-14 SDD2 only.* Milestone VIII MUST verify exact equality across **all 436 SoLEXS days**; any day failing exact equality is a genuine archive finding and must be reported, not tolerated."
      },
      {
        "heading": "7. State of the work",
        "body": "Milestone II code is complete and passes **29/30** tests, including every fail-loud path (F-01, F-02, F-04, F-06, F-07, F-09, F-12, F-16, F-18, F-19) and the real SDD1 empty-GTI F-12 case. The single failing test is the real SDD2 D1 file, marked `xfail(strict=True)` referencing this document \u2014 **strict**, so that if the contract is amended and the test starts passing, the marker itself fails and forces its own removal. Nothing has been weakened: `EXPOSURE_TOL_S` remains 1.0 s and F-09 remains exactly as frozen.\n\n**RESOLVED.** All 5 proposed changes were approved and applied verbatim. F-09 was *tightened* (\u00b11 s \u2192 exact), never weakened. The obligation from \u00a76.5 is carried forward: **Milestone VIII must verify `\u03a3(STOP\u2212START+1) == EXPOSURE` across all 436 SoLEXS archives and TERMINATE on any deviation** (spec \u00a78 A-8)."
      }
    ],
    "source": "artifacts/v2/phase05/CONTRADICTION-001.md"
  }
}
