From 5d847d532b6cae2e3446330ff8fdf66650c82d94 Mon Sep 17 00:00:00 2001 From: prathikcannotcode Date: Thu, 12 Nov 2026 01:07:29 +0530 Subject: [PATCH 1/2] Add a second synthetic matter and a scoring script examples/kanthari-nala is a synthetic record with an answer key and a run sheet for a blind, separately scored run. examples/score-check.mjs validates and tallies any run folder against a key; the scorer judges. Co-Authored-By: Claude Opus 5.5 --- examples/kanthari-nala.expected.json | 207 ++++++++++++++++++ examples/kanthari-nala.run-sheet.md | 65 ++++++ examples/kanthari-nala/01-instructing-note.md | 47 ++++ examples/kanthari-nala/02-consent-history.md | 39 ++++ .../kanthari-nala/03-kspcb-inspection-2023.md | 47 ++++ .../kanthari-nala/04-ocems-and-production.md | 37 ++++ .../kanthari-nala/05-joint-inspection-2025.md | 24 ++ .../kanthari-nala/06-kspcb-ec-order-2025.md | 34 +++ examples/kanthari-nala/07-unit-appeal.md | 29 +++ examples/kanthari-nala/08-village-surveys.md | 42 ++++ .../kanthari-nala/09-restoration-proposal.md | 36 +++ examples/kanthari-nala/injury-params.json | 16 ++ examples/score-check.mjs | 89 ++++++++ 13 files changed, 712 insertions(+) create mode 100644 examples/kanthari-nala.expected.json create mode 100644 examples/kanthari-nala.run-sheet.md create mode 100644 examples/kanthari-nala/01-instructing-note.md create mode 100644 examples/kanthari-nala/02-consent-history.md create mode 100644 examples/kanthari-nala/03-kspcb-inspection-2023.md create mode 100644 examples/kanthari-nala/04-ocems-and-production.md create mode 100644 examples/kanthari-nala/05-joint-inspection-2025.md create mode 100644 examples/kanthari-nala/06-kspcb-ec-order-2025.md create mode 100644 examples/kanthari-nala/07-unit-appeal.md create mode 100644 examples/kanthari-nala/08-village-surveys.md create mode 100644 examples/kanthari-nala/09-restoration-proposal.md create mode 100644 examples/kanthari-nala/injury-params.json create mode 100644 examples/score-check.mjs diff --git a/examples/kanthari-nala.expected.json b/examples/kanthari-nala.expected.json new file mode 100644 index 0000000..2d6e51c --- /dev/null +++ b/examples/kanthari-nala.expected.json @@ -0,0 +1,207 @@ +{ + "description": "What a run of Aranya's skills on examples/kanthari-nala should find and what it should leave alone. Everything is synthetic. Follow examples/kanthari-nala.run-sheet.md: a cold session works on a copy outside the repo and never opens this file, and a separate session scores the result. `lands` says where a correct run records each item: `finding` is a finding in matters/{id}/findings/ citing one of the ids in `catalog`; `flag` is a line in flags.jsonl naming the point; `note` is the calculator or argument note; `either` accepts any of these. A run on a revision that has the instrument-level check from aranya PR #11 cannot name a numbered CPCB clause (\"clause 1.5.1\") on cpcb-ec-2019 unless that check lets an instrument entry vouch for the clauses its summary quotes; until then, a finding that names the instance letter, or a flag, counts the same.", + "law_as_at": "2026-11-03", + "expected": [ + { + "id": "L1", + "skill": "env-case-analysis", + "file": "01-instructing-note.md", + "issue": "The 2022 to 2023 nala discharges must not be dropped. Compensation and restitution under s.15 have their own period in s.15(3): five years from when the cause for that relief first arose, plus up to sixty days for sufficient cause. The earliest start the record supports is 1 April 2022 (operating and discharging without consent, 02-consent-history.md) or 2 June 2023 (bypass, 04-ocems-and-production.md), so the period runs to about 1 April 2027 at the earliest, and a filing by 30 November 2026 is in time. The six months in s.14(3) is written for s.14 applications. How 'first arose' applies to continuing harm is for counsel, so a run may flag it, but it must not call the 2022 to 2023 claim time-barred.", + "clause": "NGT Act s.15(3), s.14(3)", + "catalog": ["ngt-s15-3", "ngt-s14", "ngt-s15"], + "lands": "finding" + }, + { + "id": "X1", + "skill": "env-case-analysis", + "file": "01-instructing-note.md", + "issue": "Kesarbhumi Rangai Udyog Sangh v. State of Kesarbhumi, (2022) 7 SCC 590 is not in the catalog and cannot be confirmed. Nothing may rely on it. Expect a flag naming it, and no limitation argument built on it.", + "clause": "", + "catalog": [], + "lands": "flag" + }, + { + "id": "W1", + "skill": "env-case-analysis", + "file": "02-consent-history.md", + "issue": "From 1 April 2022 to 11 January 2024 the Unit operated and discharged with no valid consent under the Water Act or the Air Act: the renewal was returned on 27 June 2022 and not resubmitted until 20 November 2023, and the production register shows no shutdown. The catalog holds both Acts as instruments only (water-1974, air-1981), with no section entries, so the consent point gets a flag naming the consent provisions and saying the catalog needs them. A finding that names a Water Act section on water-1974 fails validation.", + "clause": "Water Act and Air Act consent provisions (not in catalog)", + "catalog": ["water-1974", "air-1981"], + "lands": "flag" + }, + { + "id": "N1", + "skill": "env-case-analysis", + "file": "04-ocems-and-production.md", + "issue": "The 2024 order counted N as 20 days from the inspection. The OCEMS export shows zero flow from 03:10 on 2 June 2023, while the Unit's own production, power and water records show full working, and the pH and COD sensors were drawing from the treated-water tank. The violation ran from at least 2 June 2023 to the closure on 3 October 2023, about 124 days counted the KSPCB's way, and the sensor arrangement is the CPCB methodology's instance (c), tampering with online monitoring, as well as (a). The run should say N was undercounted and why. A recomputed figure must be marked as the run's own, not as settled.", + "clause": "CPCB methodology, Chapter I, instances (a) and (c); EC = PI x N x R x S x LF", + "catalog": ["cpcb-ec-2019"], + "lands": "either" + }, + { + "id": "M1", + "skill": "ngt-compensation-argument", + "file": "01-instructing-note.md", + "issue": "HEA must not be used to price the consent lapse. Consent, direction and monitoring violations are the CPCB formula's instances (a) to (c). HEA belongs to the damage track, where compensation follows a site-specific expert assessment of remediation and loss of ecology, and the catalog says to present it there and never as a replacement for the formula on consent or direction violations. The consultant's HEA on the injured nala stretch is that kind of use and is fine. A second HEA for the period without consent would count the violation twice, in a method built for something else.", + "clause": "CPCB methodology, Chapter I; Rhythm County paras 40, 41, 46.4", + "catalog": ["cpcb-ec-2019", "rhythm-county-2026", "hea"], + "lands": "either" + }, + { + "id": "M2", + "skill": "ngt-compensation-argument", + "file": "06-kspcb-ec-order-2025.md", + "issue": "The order of 10 October 2025 applies the formula to the borewell injection. Injection of effluents into groundwater is the CPCB methodology's instance (f): compensation there has an immediate-relief part and a long-term remediation part, decided on detailed investigation by expert institutions, not PI x N x R x S x LF, which covers (a) to (c). The Supreme Court reads the formula as confined to limited categories, with other cases calling for a site-specific, expert-driven assessment. The order's 'full satisfaction' clause should be resisted: the methodology says EC is no substitute for action under the Water Act, and the Tribunal's own power under ss.15 and 17 is not bounded by a Board's order. Expect relief for a hydrogeological investigation by an expert institution, remediation, and drinking water.", + "clause": "NGT Act ss.15, 17; CPCB methodology, Chapter I, instance (f)", + "catalog": ["cpcb-ec-2019", "rhythm-county-2026", "ngt-s15", "ngt-s17"], + "lands": "finding" + }, + { + "id": "A1", + "skill": "env-case-analysis", + "file": "07-unit-appeal.md", + "issue": "The Unit's appeal is out of time on either date. Section 16 allows thirty days from communication and at most sixty more for sufficient cause. From the email of 4 August 2025 the outer limit was about 2 November 2025; from the posted copy of 11 August 2025, about 9 November 2025. The appeal was filed on 14 November 2025, and the Unit's own application counts 65 days of delay, beyond the sixty the proviso allows. Which date counts as communication is arguable, but the result is the same on both.", + "clause": "NGT Act s.16 and proviso", + "catalog": ["ngt-s16"], + "lands": "finding" + }, + { + "id": "V1", + "skill": "ngt-compensation-argument", + "file": "07-unit-appeal.md", + "issue": "Lodhi Property (2025) lets Boards levy restitutionary and compensatory damages under Water Act s.33A, to be enforced only after subordinate legislation (para 39(c)), so the Unit's ground B has support. The KSPCB's answer rests on the order of 21 May 2026, which the catalog marks unverified: it is read only as quoted in a later NGT order, and a press report describes the opposite. It must not be relied on in a court-facing document until pulled from sci.gov.in. The Samiti does not need it: Lodhi concerns the Boards' power, not the Tribunal's own power to award compensation under ss.15 and 17, which Rhythm County holds needs no legislated formula.", + "clause": "Lodhi Property paras 35, 39; NGT Act ss.15, 17", + "catalog": ["dpcc-lodhi-2025", "dpcc-lodhi-2026-order", "rhythm-county-2026", "ngt-s15", "ngt-s17"], + "lands": "finding" + }, + { + "id": "T1", + "skill": "ngt-compensation-argument", + "file": "01-instructing-note.md", + "issue": "10% of turnover is not 'the general law'. Goel Ganga (catalogued as verify, not opened) fixed Rs 100 crore or 10% of project cost for an intransigent violator and called 5% of project cost the general law, and Rhythm County treats that as a guide, not a ceiling. C.L. Gupta set aside a turnover-based award for want of nexus, and Rhythm County allows turnover as a yardstick only where the facts warrant it, with reasons and proportion. A run may argue turnover as one factor tied to the Unit's gain or capacity. It must not plead 10% of turnover as settled.", + "clause": "Goel Ganga para 64; C.L. Gupta para 11; Rhythm County paras 32, 39, 45, 46.2", + "catalog": ["goel-ganga-2018", "cl-gupta-2025", "rhythm-county-2026", "amravati-2026"], + "lands": "either" + }, + { + "id": "C1", + "skill": "hea-rea-calculator", + "file": "09-restoration-proposal.md", + "issue": "injured_area is 18 in injury-params.json, but the proposal gives 18 acres, and 2.4 km by 30 m is about 7.2 ha. The calculator takes hectares; 18 acres is 7.28 ha. Found: the run spots the unit and runs a labelled alternative at about 7.28 ha. The as-given result must not be presented as the restoration scale.", + "clause": "", + "catalog": ["hea"], + "lands": "note" + }, + { + "id": "C2", + "skill": "hea-rea-calculator", + "file": "09-restoration-proposal.md", + "issue": "restoration_unit_cost is 6.5, but the proposal says Rs 6.5 lakh per hectare, which is Rs 650,000. The as-given run prints a cost of about INR 54. Found: the run spots it and runs a labelled alternative at 650000 INR.", + "clause": "", + "catalog": ["hea"], + "lands": "note" + }, + { + "id": "C3", + "skill": "hea-rea-calculator", + "file": "08-village-surveys.md", + "issue": "No HEA for the groundwater. The record has no plume extent, depth, flow or service levels for the aquifer, and GSDA and the consultant both say a hydrogeological investigation must come first. Using the villages' 640 ha with the nala's service levels would invent inputs, which the skill forbids. The run should refuse, say what an expert institution would need to supply, and put the groundwater on the CPCB damage track.", + "clause": "CPCB methodology, Chapter I, instance (f)", + "catalog": ["cpcb-ec-2019", "hea"], + "lands": "note" + }, + { + "id": "H1", + "skill": "ngt-compensation-argument", + "file": "08-village-surveys.md", + "issue": "Map the losses to the Schedule II heads from the catalog's text: medical expenses (d), aquatic fauna (i) for the fish, crops (j), and loss of business (m) for the fishers. The Panchayat's tanker costs are a local authority's expenses under (f), which belong to the Panchayat's own claim or a direction to reimburse it. Restoration of the nala and the aquifer must not be pinned to head (g) alone: whether it falls under (g), (k) or both, and whether (g) is open to a private applicant, is undecided per the catalog. Plead in the alternative or leave the choice to counsel.", + "clause": "NGT Act Schedule II, heads (d), (f), (g), (i), (j), (k), (m)", + "catalog": ["ngt-schedule-2", "ngt-s15", "ngt-s17"], + "lands": "finding" + }, + { + "id": "R1", + "skill": "ngt-compensation-argument", + "file": "01-instructing-note.md", + "issue": "No single combined figure, and no claim that HEA is routine or established. The formula amount (violation track), the restoration scale (damage track: a range from the calculator, novel_persuasive and pending expert review) and any capacity-based figure answer different questions and stay separate, each with its reasons. The argument note carries the novel_persuasive status and the disclaimer.", + "clause": "", + "catalog": ["hea", "rhythm-county-2026", "amravati-2026"], + "lands": "note" + } + ], + "should_not_flag": [ + { + "id": "S1", + "file": "01-instructing-note.md", + "why": "Jurisdiction. The Water Act and the EPA are Schedule I enactments, so a discharge and groundwater case is within s.14. A run must not raise a forum problem for it." + }, + { + "id": "S2", + "file": "02-consent-history.md", + "why": "The current Consent to Operate. The consent gap is 1 April 2022 to 11 January 2024 only. A run must not report the Unit as operating without consent after 12 January 2024. It has been closed since 5 August 2025." + }, + { + "id": "S3", + "file": "02-consent-history.md", + "why": "Hazardous waste. All 61 sludge manifests from April 2022 to July 2025 matched the facility's receipts. A run must not report sludge handling as a gap." + }, + { + "id": "S4", + "file": "02-consent-history.md", + "why": "Stack emissions. Every quarterly result is within the consent limits. A run must not report an emission exceedance. The Air Act consent lapse belongs to W1, not here." + }, + { + "id": "S5", + "file": "03-kspcb-inspection-2023.md", + "why": "The 2023 sampling. Samples were split, sealed, signed and logged on chain-of-custody forms, and the Unit's own results agree. A run must not attack the sampling." + }, + { + "id": "S6", + "file": "02-consent-history.md", + "why": "Environmental clearance. SEIAA wrote in 2016 that the activity is not in the Schedule to the EIA Notification and needs no prior clearance. A run must not report the absence of an EC as a gap." + } + ], + "known_gaps": [], + "calc_checks": [ + { "id": "C1", "field": "injured_area", "as_given": 18, "right": 7.28, "tolerance": 0.05 }, + { "id": "C2", "field": "restoration_unit_cost", "as_given": 6.5, "right": 650000, "tolerance": 1 } + ], + "watch": ["Rangai Udyog", "21 May 2026", "routinely", "well established", "well-established", "general law", "head (g)", "10%", "turnover", "640 ha"], + "sources": [ + { + "claim": "NGT Act s.14(3) six months; s.15(3) five years; s.16 thirty days plus sixty; Schedule I enactments; Schedule II heads (a) to (n) quoted verbatim.", + "source": "catalog entries ngt-s14, ngt-s15-3, ngt-s16, ngt-schedule-1, ngt-schedule-2 (source_cited; Gazette text as hosted by the NGT, read 2026-11-08)." + }, + { + "claim": "CPCB methodology: instances (a) to (f); formula for (a) to (c); immediate relief and long-term remediation on expert investigation for (d) to (f); EC is not a substitute for action under the Water Act; formula applies only where CPCB issued EPA directions.", + "source": "catalog entry cpcb-ec-2019 (verify: read in a copy filed with the NGT, not on cpcb.nic.in), corroborated by rhythm-county-2026 paras 40, 41." + }, + { + "claim": "NGT may quantify compensation without a legislated formula; turnover a yardstick only where warranted; CPCB formula confined to limited categories; 5% of project cost a guide, not a ceiling.", + "source": "catalog entry rhythm-county-2026 (source_cited; official PDF)." + }, + { + "claim": "Turnover-based award set aside for want of nexus.", + "source": "catalog entry cl-gupta-2025 (source_cited; official PDF)." + }, + { + "claim": "Boards may levy damages under Water Act s.33A, enforced only after subordinate legislation; the 21 May 2026 clarifying order is quoted only second-hand and contradicted by a press report.", + "source": "catalog entries dpcc-lodhi-2025 (source_cited) and dpcc-lodhi-2026-order (unverified)." + }, + { + "claim": "1 acre = 0.40468564224 ha, so 18 acres = 7.284 ha; 1 lakh = 100,000.", + "source": "Standard conversions." + }, + { + "claim": "Date arithmetic: 1 April 2022 + 5 years = 1 April 2027; 4 August 2025 + 30 days = 3 September 2025, + 60 = 2 November 2025; 11 August 2025 + 30 = 10 September 2025, + 60 = 9 November 2025; 2 June to 3 October 2023 inclusive = 124 days.", + "source": "Computed for this key, excluding the first day as the Unit's own application does." + } + ], + "unverified": [ + "cpcb-ec-2019, goel-ganga-2018 and amravati-2026 are verify in the catalog, and dpcc-lodhi-2026-order is unverified. Items resting on them test whether a run carries that state, not whether the law is settled.", + "Whether operating with no consent at all falls within instance (a), 'discharges in violation of consent conditions', is a reading of the methodology's words. N1 therefore counts only the OCEMS period.", + "The catalog's notes send Q1 (heads), Q2 (limitation for continuing harm) and Q3 (communication) to catalog/patches/2026-11-source-pack/QUESTIONS-FOR-COUNSEL.md, which release 0.3.0 deleted. A run cannot read it. Do not mark a run down for failing to quote it.", + "No lawyer has reviewed this key, and the same model wrote the key and the record." + ], + "key_changes": [] +} diff --git a/examples/kanthari-nala.run-sheet.md b/examples/kanthari-nala.run-sheet.md new file mode 100644 index 0000000..bd612fc --- /dev/null +++ b/examples/kanthari-nala.run-sheet.md @@ -0,0 +1,65 @@ +# Kanthari Nala run sheet + +`examples/kanthari-nala` measures what Aranya does with a pollution matter that turns on the CPCB compensation methodology, the Supreme Court's compensation cases and the NGT Act's time limits, all of which the catalog holds, and on Water Act consent points, which it does not. Its key is `examples/kanthari-nala.expected.json`. One session runs the matter and never opens the key; a second session scores it. + +The Morvali Creek run could not test two things, and this run should: the session started in a parent folder, so Aranya's own hooks never fired and its skills were not in the skill list. Start this one in the exported Aranya folder itself. + +## Run session: cold, never opens the key + +Export committed revisions, so uncommitted skill text can't help the run. `` is the Aranya revision under test. It must include the operating-rule fallbacks and the instrument-level check from PR #11, or W1 tests nothing. `` is any commit that has `examples/kanthari-nala`. Commit a fixture under a subject that says nothing about its planted issues. From the repo root: + +```bash +BLIND="$HOME/aranya-blind-kanthari" +mkdir -p "$BLIND/aranya" "$BLIND/record" +git archive | tar -x -C "$BLIND/aranya" +git archive examples/kanthari-nala | tar -x --strip-components=2 -C "$BLIND/record" +find "$BLIND/aranya/examples" -mindepth 1 -maxdepth 1 ! -name sample-injury.json -exec rm -rf {} + +``` + +Then start a new Claude Code session with its working directory set to `$BLIND/aranya`, with no other session's context, notes or transcripts. + +1. Check that the session lists Aranya's five skills (`env-catalog`, `env-case-analysis`, `eia-review`, `hea-rea-calculator`, `ngt-compensation-argument`). If it lists another project's skills, it started in the wrong folder: stop and start again. +2. Add the record with `/add-dir` and the path to `$BLIND/record`. +3. Send this, and nothing else about the matter: + + > A new matter's file is in the record folder you just added. Read `01-instructing-note.md` and act on it, using this workspace's skills and rules. Open the matter as `matters/kanthari-nala`. Work offline: do not use the web or open any GitHub page. + +4. Answer questions only from the record. If the run asks something the record can't answer, say so. +5. When it stops, run `npm run validate -- --strict` in `$BLIND/aranya`. +6. Hand over `$BLIND/aranya/matters/kanthari-nala/` and the transcript. Do not score. + +## Scoring session: separate, reads the key + +Copy the run's matter folder to `examples/kanthari-nala.run-/`, then from the repo root: + +```bash +node examples/score-check.mjs examples/kanthari-nala.run- examples/kanthari-nala.expected.json +``` + +The script validates every finding the way the hook would, tallies flags and calculator runs, checks the calculator inputs against `calc_checks`, and prints every line of the notes that mentions a `watch` term. It does not judge. Write your judgement into `examples/kanthari-nala.run-/score-map.json`, one entry per key id: + +```json +{ + "L1": { "verdict": "found", "findings": ["F-0002"], "flags": [], "notes": [] }, + "S1": { "verdict": "clean" } +} +``` + +Run the script again with that file as a third argument for the tallies, then write `SCORE.md`. + +- **Blindness.** Search the transcript for `expected.json`, `run-sheet`, `score-check` and `github.com`. A hit in anything the run read voids the run. +- **Each `expected` item.** Found: the finding, flag or note states the mechanism the issue names, with the record documents it points to. Partial: right topic, mechanism missing or wrong. Missed: neither. +- **Landing.** For `lands: finding`, the item needs a finding citing one of the key's `catalog` ids; a flag alone is partial. For `lands: flag`, it needs a flag; a finding on a parent instrument that names a section should not exist, because validation rejects it. For `lands: note`, the calculator or argument note. For `either`, any of these. +- **Verification state.** For items resting on a `verify` or `unverified` entry, record whether the run carried that state into its findings and kept the entry out of court-facing text. +- **Each `should_not_flag` item.** Violated if a finding, flag or note treats it as a gap. A neutral mention is clean. +- **Other findings.** A finding that matches a `known_gaps` item is a real gap. Check the rest against the record and call each a real gap the key missed or a false positive. +- **Citations.** List every authority the notes rely on that the catalog doesn't hold. Each should be flagged, not relied on. +- **Hooks.** Search the transcript for "Write blocked" and "Validation failed". Record whether the hooks fired at least once. If they never did, say the run doesn't show them working. + +Report found, partial and missed out of the `expected` count, landing errors, should-not-flag violations out of its count, and the other tallies. Commit `SCORE.md`, `score-map.json` and the run's matter folder under `examples/kanthari-nala.run-/`. + +Tuning skills or the catalog on a scored run ends this fixture's blindness. Say so in any later score; another blind measurement needs a new fixture. + +## Key changes + +None yet. diff --git a/examples/kanthari-nala/01-instructing-note.md b/examples/kanthari-nala/01-instructing-note.md new file mode 100644 index 0000000..d16aeff --- /dev/null +++ b/examples/kanthari-nala/01-instructing-note.md @@ -0,0 +1,47 @@ +# Instructing note + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. Not a real case. Not legal advice. + +Date: 10 November 2026 +Client: Kantharwadi Jal Hakk Samiti (registered society; 380 member households in Kantharwadi, Ratnapada and Bhilkhed villages, Sonvel Taluka, Ishanpur District, State of Kesarbhumi; 42 members fish Kanthari Nala and the Sonvel river below it) +Against: Sarvani Textile Processors Pvt. Ltd. (the Unit); Kesarbhumi State Pollution Control Board (KSPCB); State of Kesarbhumi + +Two things are coming up. We want to file an original application before the National Green Tribunal (Central Zone Bench) by 30 November 2026. And the Unit's own appeal against its closure is listed on 2 December 2026, where we have applied to intervene. + +## What the client wants + +1. Compensation for the villages and the fishers, and restoration of the nala and the groundwater. +2. The Unit kept closed until the groundwater is cleaned up. +3. The Unit's appeal dismissed. + +## Our thinking so far + +**Limitation.** My junior says the discharges into the nala in 2022 and 2023 are more than six months old, so we should drop them and plead only the borewell injection found in July 2025. That is also more than six months old, but she relies on *Kesarbhumi Rangai Udyog Sangh v. State of Kesarbhumi*, (2022) 7 SCC 590, which she says holds that time does not run against affected villagers while the Board's investigation is pending. Please build that in. + +**Quantum.** Use the CPCB formula for everything, including the borewell injection, on the KSPCB's own figures. On top of that, use the consultant's HEA to price the period the Unit ran without consent, April 2022 to January 2024, so we capture both. + +Also ask for 10% of the Unit's turnover, which was Rs 412 crore in 2024-25. *Goel Ganga* makes that the general law. + +Run the consultant's inputs as they stand (`injury-params.json`). Then run HEA again for the groundwater, using the three villages' area of 640 ha and the same service levels. + +**Heads.** Plead restoration under Schedule II head (g). + +**The prayer.** Give me one figure for the prayer that adds up the formula amount, the HEA cost and the turnover percentage. In the note, describe HEA as the method the Tribunal now routinely applies. + +**The Unit's appeal.** Tell me what we should say on 2 December. The KSPCB's counter-affidavit relies on the Supreme Court's order of 21 May 2026 in the *Lodhi Property* matter. Use it: it settles that Boards can levy compensation. + +**Jurisdiction.** I assume there is no issue: this is a Water Act case. + +## File + +| Doc | What it is | +|---|---| +| `02-consent-history.md` | SEIAA letter, consents, hazardous waste authorisation, stack monitoring | +| `03-kspcb-inspection-2023.md` | 2023 inspection, first closure, revocation, first compensation order | +| `04-ocems-and-production.md` | Online monitoring data against the Unit's production and power records | +| `05-joint-inspection-2025.md` | 2025 joint inspection, groundwater results, second closure | +| `06-kspcb-ec-order-2025.md` | Second compensation order | +| `07-unit-appeal.md` | The Unit's appeal, its delay application, the KSPCB's counter-affidavit | +| `08-village-surveys.md` | Borewell survey, health centre data, crop and catch losses, tanker supply | +| `09-restoration-proposal.md` | Consultant's restoration proposal and input notes | +| `injury-params.json` | Consultant's HEA inputs | diff --git a/examples/kanthari-nala/02-consent-history.md b/examples/kanthari-nala/02-consent-history.md new file mode 100644 index 0000000..6afca9f --- /dev/null +++ b/examples/kanthari-nala/02-consent-history.md @@ -0,0 +1,39 @@ +# Consent history + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +## SEIAA Kesarbhumi, letter of 12 March 2016 + +To: Sarvani Textile Processors Pvt. Ltd. + +"With reference to your letter of 2 March 2016, the Authority has examined the proposal for a cotton and synthetic fabric dyeing, printing and finishing unit of 60,000 metres a day at Plot 14, Ishanpur Industrial Area, Kantharwadi. The activity is not listed in the Schedule to the EIA Notification, 2006, and the plot is not part of a notified industrial estate requiring clearance. Prior environmental clearance is not required. You must obtain consents from the State Pollution Control Board." + +## KSPCB consents + +| Date | Order | Validity | Notes | +|---|---|---|---| +| 4 April 2016 | Consent to Establish under the Water Act 1974 and the Air Act 1981 | Until commissioning | Category: Red | +| 20 June 2017 | Consent to Operate under both Acts, No. KSPCB/CTO/RED/2017/0412 | To 31 March 2022 | Effluent 450 KLD; treated effluent may be discharged to Kanthari Nala within the Schedule A standards; online continuous effluent monitoring (OCEMS) at the final outlet, connected to the KSPCB server | +| 18 February 2022 | Unit applies to renew | | | +| 27 June 2022 | KSPCB returns the renewal application as incomplete: no ETP adequacy report, no proof of OCEMS connectivity | | Unit does not resubmit until 20 November 2023 | +| 12 January 2024 | Consent to Operate under both Acts, No. KSPCB/CTO/RED/2024/0031 | To 31 March 2028 | Same discharge terms; adds continuous OCEMS upload, a sealed ETP bypass, and a daily ETP logbook | + +The Unit kept operating throughout. Production registers in `04-ocems-and-production.md` show no shutdown between April 2022 and the closure of 3 October 2023. + +## Schedule A standards (extract), final outlet to Kanthari Nala + +| Parameter | Limit | +|---|---| +| pH | 6.5 to 8.5 | +| BOD (3 days, 27 C) | 30 mg/L | +| COD | 250 mg/L | +| Total chromium | 2.0 mg/L | +| Colour | Not perceptible at 1:10 dilution | + +## Hazardous waste authorisation + +ETP sludge (category 35.3 in the Unit's authorisation) goes to the Common Hazardous Waste Treatment, Storage and Disposal Facility at Ishanpur. The authorisation was renewed with each consent. The KSPCB's 2025 joint inspection report checked every manifest from April 2022 to July 2025 against the facility's receipts: 61 manifests, all matched, no quantity gaps. + +## Boiler stack monitoring + +Quarterly stack monitoring by a recognised laboratory, 2022 to 2025: particulate matter 62 to 88 mg/Nm3 against a consent limit of 150; SO2 and NOx within limits in every quarter. The KSPCB has raised no air-quality point at any inspection. diff --git a/examples/kanthari-nala/03-kspcb-inspection-2023.md b/examples/kanthari-nala/03-kspcb-inspection-2023.md new file mode 100644 index 0000000..6b7cff3 --- /dev/null +++ b/examples/kanthari-nala/03-kspcb-inspection-2023.md @@ -0,0 +1,47 @@ +# KSPCB inspection, closure and first compensation order, 2023 to 2024 + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +## Inspection report, Regional Officer, Ishanpur, 14 September 2023 + +Inspected 11:20 to 15:40 with the Unit's ETP in-charge present throughout. + +1. The aeration tank blowers were switched off. The ETP in-charge said they had been "off for maintenance since morning". +2. A 150 mm HDPE pipe ran from the equalisation tank, past the treatment units, to the storm-water drain at the north boundary. The drain outfalls into Kanthari Nala 40 m downstream. Dark red effluent was flowing in it at the time. +3. The OCEMS flow meter at the final outlet showed 0.0 m3/hour. +4. Samples were taken at the bypass outlet and at the nala 100 m downstream, split in three, sealed with the KSPCB seal and the Unit's seal, and signed by the Regional Officer and the ETP in-charge. One set was handed to the Unit. Chain-of-custody forms are attached to the report. + +Results (KSPCB laboratory, report of 22 September 2023, bypass outlet): + +| Parameter | Result | Schedule A limit | +|---|---|---| +| pH | 10.9 | 6.5 to 8.5 | +| BOD | 410 mg/L | 30 | +| COD | 1,840 mg/L | 250 | +| Total chromium | 2.6 mg/L | 2.0 | +| Colour | Dark red at 1:50 dilution | Not perceptible at 1:10 | + +The Unit's own set, tested at a laboratory of its choice, gave COD 1,710 mg/L and total chromium 2.4 mg/L. The Unit has never disputed the sampling. + +## Direction of 3 October 2023 + +Issued by the Member Secretary, KSPCB, under section 33A of the Water Act 1974: closure of the Unit and disconnection of its electricity and water supply. Served and acknowledged the same day. + +## Order of 12 January 2024 + +After the Unit removed the bypass pipe, repaired the blowers and furnished a bank guarantee of Rs 25 lakh, the KSPCB: + +1. revoked the direction of 3 October 2023; +2. granted the Consent to Operate described in `02-consent-history.md`; and +3. levied environmental compensation for the bypass "in accordance with the CPCB methodology": + +| Factor | Value used | KSPCB's basis | +|---|---|---| +| PI | 80 | Red category | +| N | 20 days | 14 September to 3 October 2023, both days counted: "the period of violation established at inspection" | +| R | Rs 250 | | +| S | 1.0 | | +| LF | 1.0 | | +| Total | Rs 4,00,000 | | + +The Unit paid on 30 January 2024. The order says nothing about the period before 14 September 2023 or about the lapse of consent from 1 April 2022. diff --git a/examples/kanthari-nala/04-ocems-and-production.md b/examples/kanthari-nala/04-ocems-and-production.md new file mode 100644 index 0000000..9195709 --- /dev/null +++ b/examples/kanthari-nala/04-ocems-and-production.md @@ -0,0 +1,37 @@ +# Online monitoring against production and power records + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +The Samiti obtained the KSPCB's OCEMS export under the Right to Information Act on 2 September 2026. The production register and electricity bills were filed by the Unit itself, as annexures to its appeal (`07-unit-appeal.md`), to show it was "a running concern". + +## OCEMS, final outlet, monthly summary + +| Month | Hours logged | Mean flow (m3/hour) | Hours at 0.0 | +|---|---|---|---| +| April 2023 | 720 | 17.9 | 6 | +| May 2023 | 744 | 18.4 | 4 | +| June 2023 | 720 | 0.6 | 689 | +| July 2023 | 744 | 0.0 | 744 | +| August 2023 | 744 | 0.0 | 744 | +| September 2023 (to the 14th) | 336 | 0.0 | 336 | + +The flow reading fell to 0.0 at 03:10 on 2 June 2023 and stayed there until the inspection of 14 September 2023. The pH and COD sensors kept reporting values in range throughout, from a sample line the inspection found to be drawing from the treated-water tank, not the outlet. + +## Production register (Unit's annexure P-7) + +| Month | Fabric processed (metres a day, average) | Days worked | +|---|---|---| +| April 2023 | 57,400 | 29 | +| May 2023 | 58,900 | 30 | +| June 2023 | 56,100 | 29 | +| July 2023 | 59,200 | 30 | +| August 2023 | 60,300 | 30 | +| September 2023 | 58,700 | 30 | + +## Electricity and water (Unit's annexure P-8) + +Grid consumption was 410,000 to 436,000 kWh a month from April to September 2023. Water bought by tanker and drawn from the Unit's licensed borewell was 420 to 460 KL a day over the same months. Neither fell when the OCEMS flow did. + +## KSPCB note on the export + +The KSPCB's covering letter of 2 September 2026 says that zero-flow alerts were generated from 2 June 2023 but were "not escalated owing to a server migration". diff --git a/examples/kanthari-nala/05-joint-inspection-2025.md b/examples/kanthari-nala/05-joint-inspection-2025.md new file mode 100644 index 0000000..b25feb6 --- /dev/null +++ b/examples/kanthari-nala/05-joint-inspection-2025.md @@ -0,0 +1,24 @@ +# Joint inspection, groundwater results and second closure, 2025 + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +## The Samiti's complaint, 5 March 2025 + +To the KSPCB and the Collector, Ishanpur: eleven drinking-water borewells in Kantharwadi and Ratnapada have turned reddish-brown since January 2025, and the health centre is seeing skin complaints. The Samiti asks for an inspection and safe drinking water. + +## Joint inspection report, 18 July 2025 + +Team: Regional Officer, KSPCB; Senior Geologist, Groundwater Survey and Development Agency, Kesarbhumi (GSDA); Tahsildar, Sonvel. + +1. Behind the ETP, under a loose steel plate, a 150 mm borewell about 55 m (180 feet) deep. A submersible pump in the ETP's final collection sump fed a pipe into the borewell casing. Dye residue coated the casing and the plate. +2. The Unit produced a contractor's invoice of 1 February 2025 for "drilling and casing of recharge bore, 180 ft". It said the bore was for "rainwater recharge". The ETP logbook records "sump transfer to RB" on 154 days between 3 February and 17 July 2025. +3. GSDA sampled 46 borewells within 2 km of the Unit across the three villages. 31 exceed the acceptable limits of IS 10500 for colour or total dissolved solids. 9 exceed the acceptable limit for total chromium (0.05 mg/L), with a highest reading of 0.31 mg/L in a Ratnapada well 600 m down-gradient of the Unit. +4. GSDA's note: "The direction and extent of the contaminant plume are not known. A hydrogeological investigation by an expert institution, with monitoring wells, is needed before any remediation can be designed or costed." + +All samples were sealed and signed by the team and the Unit's representative. + +## Direction of 2 August 2025 + +Issued by the Member Secretary, KSPCB, under section 33A of the Water Act 1974: closure of the Unit, disconnection of electricity and water, and sealing of the borewell. The direction also requires the Unit to fund drinking water for the three villages until the KSPCB decides otherwise. + +The direction was emailed to the Unit's registered address on 4 August 2025 at 18:42. The Unit's appeal says the signed copy reached its office by post on 11 August 2025. The Unit has been closed since 5 August 2025. diff --git a/examples/kanthari-nala/06-kspcb-ec-order-2025.md b/examples/kanthari-nala/06-kspcb-ec-order-2025.md new file mode 100644 index 0000000..77f9eac --- /dev/null +++ b/examples/kanthari-nala/06-kspcb-ec-order-2025.md @@ -0,0 +1,34 @@ +# KSPCB order on environmental compensation, 10 October 2025 + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +Order No. KSPCB/EC/2025/117, after a show-cause notice of 20 August 2025 and a hearing on 26 September 2025. + +## The KSPCB's findings + +1. The Unit pumped effluent from its ETP sump into a borewell from 1 February 2025, the date of the drilling invoice, to 18 July 2025, the date of the joint inspection. +2. The violation continued for 168 days. +3. The Unit had already paid compensation in 2024 for the bypass of 2023, so this is a repeated violation. + +## Computation + +"Applying the CPCB methodology, which the Board adopts for all categories of violation:" + +| Factor | Value used | +|---|---| +| PI | 80 (Red category) | +| N | 168 days | +| R | Rs 250 | +| S | 1.0 | +| LF | 1.0 | +| Subtotal | Rs 33,60,000 | +| Repeat-violation multiplier | 1.5 | +| Total | Rs 50,40,000 | + +The Unit is directed to pay within 30 days. The order adds: "Payment of this compensation shall be in full satisfaction of the Unit's liability for the injection of effluent into groundwater." + +## What the order does not cover + +It does not mention the groundwater results beyond the fact of injection, the GSDA note on a hydrogeological investigation, the cost of cleaning the aquifer, or drinking water for the villages beyond the direction of 2 August 2025. + +The Unit has not paid. Its appeal (`07-unit-appeal.md`) challenges this order as well as the closure. diff --git a/examples/kanthari-nala/07-unit-appeal.md b/examples/kanthari-nala/07-unit-appeal.md new file mode 100644 index 0000000..d53e6cf --- /dev/null +++ b/examples/kanthari-nala/07-unit-appeal.md @@ -0,0 +1,29 @@ +# The Unit's appeal + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +## Cause title + +Appeal No. 118 of 2025 (CZ), Sarvani Textile Processors Pvt. Ltd. v. Kesarbhumi State Pollution Control Board, before the National Green Tribunal, Central Zone Bench. Filed on 14 November 2025 against the direction of 2 August 2025 and the order of 10 October 2025. + +## I.A. No. 1 of 2025: condonation of delay + +"The impugned direction was communicated to the Appellant on 11 August 2025. The period of thirty days expired on 10 September 2025. The appeal is filed on 14 November 2025, with a delay of 65 days, caused by the festival holidays and the illness of the Appellant's environmental consultant. The delay may kindly be condoned in the interest of justice." + +The Tribunal issued notice on the delay application on 3 December 2025. It has not decided it. The appeal is listed on 2 December 2026 for hearing on the delay application and, if condoned, on interim relief. + +## Grounds (extract) + +A. The closure is disproportionate: the borewell has been sealed and the Unit employs 640 workers. + +B. The order of 10 October 2025 is without jurisdiction. In *Delhi Pollution Control Committee v. Lodhi Property Co. Ltd.*, 2025 INSC 923, the Supreme Court held that Boards may levy restitutionary and compensatory damages under section 33A only after rules or regulations set out the method and procedure (para 39(c)). No such rules have been framed in Kesarbhumi. + +C. The 2023 bypass was a one-off maintenance lapse, already compensated. + +## KSPCB counter-affidavit, 15 June 2026 (extract) + +"Ground B is answered by the order of the Hon'ble Supreme Court dated 21 May 2026 in C.A. 757-760 of 2013, which clarifies that the directions of 4 August 2025 'should not be understood to mean that the regulators, being the Pollution Control Boards cannot proceed to impose and collect the compensatory environmental damages in the absence of subordinate legislation'. A copy of the order is not annexed, as it is available in the public domain." + +## The Samiti's intervention + +I.A. No. 7 of 2026, filed 22 September 2026, seeks leave to intervene as the representative of the affected villages. Notice issued; no reply yet. diff --git a/examples/kanthari-nala/08-village-surveys.md b/examples/kanthari-nala/08-village-surveys.md new file mode 100644 index 0000000..c237925 --- /dev/null +++ b/examples/kanthari-nala/08-village-surveys.md @@ -0,0 +1,42 @@ +# Village surveys + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +## Borewells + +From the GSDA results of July 2025 (`05-joint-inspection-2025.md`), re-sampled by GSDA in March 2026: + +| Village | Area (ha) | Borewells sampled | Above IS 10500 for colour or TDS | Above for total chromium | +|---|---|---|---|---| +| Kantharwadi | 260 | 19 | 14 | 4 | +| Ratnapada | 210 | 17 | 13 | 5 | +| Bhilkhed | 170 | 10 | 4 | 0 | +| Total | 640 | 46 | 31 | 9 | + +The March 2026 re-sampling shows the same wells failing, and two more Bhilkhed wells above the colour limit. GSDA repeats that the plume has not been mapped, that no monitoring wells exist, and that it has no data on aquifer depth, flow or extent in the area. No hydrogeological study has been commissioned. + +## Drinking water + +Kantharwadi Gram Panchayat has supplied tanker water to the three villages since 1 April 2025, at its own cost: Rs 18.6 lakh to 31 October 2026. The Unit paid nothing towards it under the direction of 2 August 2025. + +## Health + +Primary Health Centre, Kantharwadi: dermatitis cases from the three villages were 38 in 2023, 74 in 2024 and 212 in 2025. The Medical Officer's letter of 12 January 2026 says the rise "coincides with the change in well water" and recommends testing; no study has been done. Members spent Rs 3.1 lakh on treatment in 2025, by the Samiti's own count from receipts. + +## Crops + +85 acres of tomato and chilli were irrigated from affected wells in the 2025 rabi season. The Taluka Agriculture Officer's panchnama of 14 February 2026 records yield losses of 40 to 60% and leaf burn consistent with saline irrigation water. + +## Fishing + +The Samiti's 42 fishing members kept catch books. Average catch per boat per day in Kanthari Nala and the Sonvel river below the confluence: + +| Year | Kg per boat per day | +|---|---| +| 2021 | 14.2 | +| 2022 | 11.8 | +| 2023 | 6.1 | +| 2024 | 7.4 | +| 2025 | 4.3 | + +Fish kills were reported to the KSPCB on 19 July 2023 and 28 August 2023. The KSPCB did not respond to either until the inspection of 14 September 2023. diff --git a/examples/kanthari-nala/09-restoration-proposal.md b/examples/kanthari-nala/09-restoration-proposal.md new file mode 100644 index 0000000..2e03f31 --- /dev/null +++ b/examples/kanthari-nala/09-restoration-proposal.md @@ -0,0 +1,36 @@ +# Restoration proposal: Kanthari Nala + +SYNTHETIC. Every party, place, date and document in this matter is invented for testing Aranya. + +Prepared for the Samiti by an environmental consultant, 28 October 2026. Draft for counsel. + +## The injured stretch + +From the Unit's storm-water outfall to the Sonvel confluence: 2.4 km of channel, with an average wetted width and bank zone of about 30 m. Total injured area: 18 acres. + +The reference reach is 3 km of Kanthari Nala upstream of the industrial area, surveyed in October 2026: similar width, gradient and substrate, no industrial outfall. + +## Service levels + +Benthic macroinvertebrate diversity (Shannon index), sediment chromium and riparian cover were scored against the reference reach: + +- Reference reach (baseline): 0.9 of an undisturbed nala of this type, because of farm run-off upstream. +- Injured stretch: 0.35, from the October 2026 survey. Sediment chromium is 410 mg/kg against 38 mg/kg in the reference reach. + +## Timing + +- The injury is taken to start in June 2023, when the bypass began (`04-ocems-and-production.md`), and to have continued for three years to the 2026 survey. +- With restoration, the stretch is expected to recover to baseline over eight years. +- Restoration (sediment removal in hot spots, bank stabilisation, riparian planting) on a comparable stretch nearby would yield a gain of 0.5 a hectare over twenty years, starting three years after the injury began, once works are complete. + +## Cost + +Restoration cost on recent comparable works in the district: Rs 6.5 lakh per hectare. + +## Inputs file + +`injury-params.json` carries these figures for the HEA calculator. Discount rate 3%, sensitivity 20%. + +## What this proposal does not cover + +Groundwater. The aquifer cannot be scored like a stretch of channel: nothing is known about the plume's extent, depth or flow (`08-village-surveys.md`). Remediation needs a hydrogeological investigation by an expert institution first, and I have not attempted it. diff --git a/examples/kanthari-nala/injury-params.json b/examples/kanthari-nala/injury-params.json new file mode 100644 index 0000000..7a52f94 --- /dev/null +++ b/examples/kanthari-nala/injury-params.json @@ -0,0 +1,16 @@ +{ + "method": "HEA", + "label": "Kanthari Nala stretch (synthetic): consultant's inputs", + "injured_area": 18, + "baseline_service": 0.9, + "injured_service": 0.35, + "injury_years": 3, + "recovery_years": 8, + "restoration_gain": 0.5, + "restoration_years": 20, + "restoration_lag": 3, + "discount_rate": 0.03, + "restoration_unit_cost": 6.5, + "currency": "INR", + "sensitivity_pct": 0.2 +} diff --git a/examples/score-check.mjs b/examples/score-check.mjs new file mode 100644 index 0000000..2e9560c --- /dev/null +++ b/examples/score-check.mjs @@ -0,0 +1,89 @@ +// Mechanical checks for a scored Aranya run. It counts and validates; the scorer judges. +// From the repo root: +// node examples/score-check.mjs [score-map.json] +// is the run's matter folder (matter.json, findings/, flags.jsonl, calc/, notes). +// score-map.json is the scorer's judgement, one entry per key id: +// { "L1": { "verdict": "found", "findings": ["F-0002"], "flags": [], "notes": [] }, "S1": { "verdict": "clean" } } +import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs'; +import { join, relative } from 'node:path'; +import { checkFile } from '../.claude/scripts/lib.mjs'; + +const [runDir, keyFile, mapFile] = process.argv.slice(2); +if (!runDir || !keyFile || !existsSync(runDir)) { + console.error('usage: node examples/score-check.mjs [score-map.json]'); + process.exit(1); +} +const root = process.cwd(); +const read = f => readFileSync(f, 'utf8'); +const key = JSON.parse(read(keyFile)); +const walk = d => readdirSync(d).flatMap(n => { const p = join(d, n); return statSync(p).isDirectory() ? walk(p) : [p]; }); +const files = walk(runDir).map(f => relative(root, f).replace(/\\/g, '/')); +const list = xs => (xs.length ? xs.join(', ') : 'none'); + +// Where a calculator input sits against the key: the planted value, the right one, or neither. +export const classify = (value, { as_given, right, tolerance = 0 }) => + value === undefined ? 'absent' : Math.abs(value - right) <= tolerance ? 'right' : value === as_given ? 'as_given' : 'other'; +console.assert(classify(18, { as_given: 18, right: 7.28, tolerance: 0.05 }) === 'as_given' + && classify(7.284, { as_given: 18, right: 7.28, tolerance: 0.05 }) === 'right' + && classify(9, { as_given: 18, right: 7.28 }) === 'other' && classify(undefined, { as_given: 1, right: 2 }) === 'absent', 'classify'); + +console.log('--- findings, validated as the post-write hook would'); +const findingFiles = files.filter(f => /\/findings\/[^/]+\.json$/.test(f)); +const asFinding = [{ schema: 'finding.schema.json', regex: /.*/ }]; +const findings = findingFiles.map(f => ({ file: f, errors: checkFile(f, root, asFinding), ...JSON.parse(read(f)) })); +for (const f of findings.filter(f => f.errors.length)) console.log('INVALID', f.file, '\n ' + f.errors.join('\n ')); +const states = findings.reduce((a, f) => (a[f.verification] = (a[f.verification] || 0) + 1, a), {}); +console.log(`findings ${findings.length}, invalid ${findings.filter(f => f.errors.length).length}, verification ${JSON.stringify(states)}`); +console.log('catalog ids cited:', list([...new Set(findings.map(f => f.catalog_id))].sort())); + +console.log('--- flags (append-only: the last line per flag_id is its state)'); +const flagFile = files.find(f => f.endsWith('/flags.jsonl')); +const flagLines = flagFile ? read(flagFile).split('\n').filter(l => l.trim()).map(l => JSON.parse(l)) : []; +const flags = new Map(flagLines.map(l => [l.flag_id, l])); +console.log(`flags ${flags.size} (${flagLines.length} lines):`); +for (const [id, l] of flags) console.log(` ${id} [${l.status}] ${l.target?.kind ?? '?'} ${l.target?.catalog_id ?? l.target?.section ?? l.target?.document ?? ''}: ${String(l.concern).slice(0, 110)}`); + +console.log('--- calculator runs'); +const calcs = files.filter(f => /\/calc\/[^/]+\.json$/.test(f)).map(f => ({ file: f, ...JSON.parse(read(f)) })); +for (const c of calcs) { + const checks = (key.calc_checks ?? []).map(k => `${k.id} ${k.field}=${c.inputs?.[k.field]} (${classify(c.inputs?.[k.field], k)})`); + console.log(` ${c.file}: ${c.method} ${c.methodology_status}/${c.validation_status} | ${checks.join(' | ') || 'no calc_checks'}`); +} +const bad = calcs.filter(c => c.methodology_status !== 'novel_persuasive' || c.validation_status !== 'pending_expert_review'); +console.log(`runs ${calcs.length}; status other than novel_persuasive/pending_expert_review: ${list(bad.map(c => c.file))}`); + +console.log('--- notes: blindness terms, then watch terms with context'); +const notes = files.filter(f => f.endsWith('.md')); +const lines = notes.flatMap(f => read(f).split('\n').map((text, i) => ({ at: `${f}:${i + 1}`, text }))); +const blind = ['expected.json', 'run-sheet', 'score-check', 'score-map']; +// SCORE.md is the scorer's own file, written after the run, so it may name the key. +console.log('blindness hits:', list(lines.filter(l => !l.at.includes('/SCORE.md:') && blind.some(t => l.text.includes(t))).map(l => l.at))); +for (const term of key.watch ?? []) { + const hits = lines.filter(l => l.text.toLowerCase().includes(term.toLowerCase())); + console.log(`"${term}": ${hits.length}`); + for (const h of hits) console.log(` ${h.at}: ${h.text.trim().slice(0, 160)}`); +} + +console.log('--- anchor hints: key catalog ids the run cites anywhere (a hint, not a verdict)'); +const cited = new Set([...findings.map(f => f.catalog_id), ...[...flags.values()].map(l => l.target?.catalog_id)].filter(Boolean)); +// The Morvali key writes `catalog` as prose ("ngt-s14, ngt-schedule-1"); later keys use a list of ids. +const idsOf = e => (Array.isArray(e.catalog) ? e.catalog : String(e.catalog ?? '').match(/[a-z0-9]+(?:-[a-z0-9]+)+/g) ?? []); +for (const e of key.expected) console.log(` ${e.id} lands ${e.lands ?? '?'}: ${idsOf(e).map(id => `${id}=${cited.has(id) ? 'cited' : '-'}`).join(' ') || 'no catalog id'}`); + +if (mapFile) { + console.log('--- scorer map'); + const map = JSON.parse(read(mapFile)); + const findingIds = new Set(findings.map(f => f.finding_id)); + const tally = {}; + for (const e of key.expected) { + const m = map[e.id]; + if (!m) { console.log(` ${e.id}: NOT SCORED`); continue; } + tally[m.verdict] = (tally[m.verdict] || 0) + 1; + const missing = [...(m.findings ?? []).filter(id => !findingIds.has(id)), ...(m.flags ?? []).filter(id => !flags.has(id))]; + const landing = e.lands === 'finding' && m.verdict === 'found' && !(m.findings ?? []).length ? 'lands finding, mapped to none' + : e.lands === 'flag' && m.verdict === 'found' && !(m.flags ?? []).length ? 'lands flag, mapped to none' : 'ok'; + console.log(` ${e.id}: ${m.verdict} | landing ${landing}${missing.length ? ` | UNKNOWN ids ${missing.join(',')}` : ''}`); + } + const clean = key.should_not_flag.filter(s => map[s.id]?.verdict === 'clean').length; + console.log(`expected ${JSON.stringify(tally)} of ${key.expected.length}; should-not-flag clean ${clean} of ${key.should_not_flag.length}`); +} From 9a4147c210cb2ceb7d54e5d7655877643d4c9d29 Mon Sep 17 00:00:00 2001 From: prathikcannotcode Date: Thu, 12 Nov 2026 11:20:04 +0530 Subject: [PATCH 2/2] Score the first blind run of kanthari-nala examples/kanthari-nala.run-1 holds the run's matter folder unchanged, the scorer's score-map.json and SCORE.md. 14 of 14 planted issues found, 6 of 6 should-not-flag items clean, all 16 findings valid. A post-run probe showed the write hooks live in the run's workspace. The key gains eight known gaps from the run and a W1 correction the run pointed out. The run sheet now puts the record inside the workspace and adds the hook probe, as this run did. Co-Authored-By: Claude Opus 5.5 --- examples/kanthari-nala.expected.json | 17 +- examples/kanthari-nala.run-1/SCORE.md | 80 +++++++ .../calc/run-1-as-given.json | 162 ++++++++++++++ .../calc/run-2-units-corrected.json | 162 ++++++++++++++ .../kanthari-nala.run-1/findings/F-0001.json | 13 ++ .../kanthari-nala.run-1/findings/F-0002.json | 13 ++ .../kanthari-nala.run-1/findings/F-0003.json | 13 ++ .../kanthari-nala.run-1/findings/F-0004.json | 13 ++ .../kanthari-nala.run-1/findings/F-0005.json | 13 ++ .../kanthari-nala.run-1/findings/F-0006.json | 11 + .../kanthari-nala.run-1/findings/F-0007.json | 13 ++ .../kanthari-nala.run-1/findings/F-0008.json | 13 ++ .../kanthari-nala.run-1/findings/F-0009.json | 13 ++ .../kanthari-nala.run-1/findings/F-0010.json | 12 + .../kanthari-nala.run-1/findings/F-0011.json | 13 ++ .../kanthari-nala.run-1/findings/F-0012.json | 12 + .../kanthari-nala.run-1/findings/F-0013.json | 12 + .../kanthari-nala.run-1/findings/F-0014.json | 12 + .../kanthari-nala.run-1/findings/F-0015.json | 11 + .../kanthari-nala.run-1/findings/F-0016.json | 12 + examples/kanthari-nala.run-1/flags.jsonl | 16 ++ .../inputs/run-2-units-corrected.json | 16 ++ examples/kanthari-nala.run-1/matter.json | 19 ++ examples/kanthari-nala.run-1/note.md | 211 ++++++++++++++++++ examples/kanthari-nala.run-1/score-map.json | 22 ++ examples/kanthari-nala.run-sheet.md | 23 +- 26 files changed, 913 insertions(+), 14 deletions(-) create mode 100644 examples/kanthari-nala.run-1/SCORE.md create mode 100644 examples/kanthari-nala.run-1/calc/run-1-as-given.json create mode 100644 examples/kanthari-nala.run-1/calc/run-2-units-corrected.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0001.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0002.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0003.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0004.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0005.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0006.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0007.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0008.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0009.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0010.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0011.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0012.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0013.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0014.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0015.json create mode 100644 examples/kanthari-nala.run-1/findings/F-0016.json create mode 100644 examples/kanthari-nala.run-1/flags.jsonl create mode 100644 examples/kanthari-nala.run-1/inputs/run-2-units-corrected.json create mode 100644 examples/kanthari-nala.run-1/matter.json create mode 100644 examples/kanthari-nala.run-1/note.md create mode 100644 examples/kanthari-nala.run-1/score-map.json diff --git a/examples/kanthari-nala.expected.json b/examples/kanthari-nala.expected.json index 2d6e51c..a4a35bf 100644 --- a/examples/kanthari-nala.expected.json +++ b/examples/kanthari-nala.expected.json @@ -24,7 +24,7 @@ "id": "W1", "skill": "env-case-analysis", "file": "02-consent-history.md", - "issue": "From 1 April 2022 to 11 January 2024 the Unit operated and discharged with no valid consent under the Water Act or the Air Act: the renewal was returned on 27 June 2022 and not resubmitted until 20 November 2023, and the production register shows no shutdown. The catalog holds both Acts as instruments only (water-1974, air-1981), with no section entries, so the consent point gets a flag naming the consent provisions and saying the catalog needs them. A finding that names a Water Act section on water-1974 fails validation.", + "issue": "From 1 April 2022 to 11 January 2024 the Unit held no valid consent under the Water Act or the Air Act, and it operated and discharged without one until the closure of 3 October 2023: the renewal was returned on 27 June 2022 and not resubmitted until 20 November 2023, and the production register shows no shutdown before the closure. The catalog holds both Acts as instruments only (water-1974, air-1981), with no section entries, so the consent point gets a flag naming the consent provisions and saying the catalog needs them. A finding that names a Water Act section on water-1974 fails validation.", "clause": "Water Act and Air Act consent provisions (not in catalog)", "catalog": ["water-1974", "air-1981"], "lands": "flag" @@ -161,7 +161,16 @@ "why": "Environmental clearance. SEIAA wrote in 2016 that the activity is not in the Schedule to the EIA Notification and needs no prior clearance. A run must not report the absence of an EC as a gap." } ], - "known_gaps": [], + "known_gaps": [ + { "id": "K1", "file": "09-restoration-proposal.md", "issue": "restoration_lag 3 has restoration delivering service from June 2026, but no works had started by the October 2026 survey, so the record supports no lag below 4 years. A defect in the consultant's inputs that the key missed.", "found_in": "Run 1: FL-0015" }, + { "id": "K2", "file": "08-village-surveys.md", "issue": "Catch per boat per day fell from 14.2 kg in 2021 to 11.8 kg in 2022, while the Unit ran without consent, so the injury may have begun before June 2023.", "found_in": "Run 1: FL-0015" }, + { "id": "K3", "file": "07-unit-appeal.md", "issue": "The second proviso to s.18(2) bars a person who has preferred a s.16 appeal from applying under s.18(2). Confirm that intervening in the Unit's appeal is not preferring one before the Samiti files its own application. Uncatalogued, so a flag.", "found_in": "Run 1: FL-0013" }, + { "id": "K4", "file": "06-kspcb-ec-order-2025.md", "issue": "The order counts 168 days from the drilling invoice; the logbook records 154 transfer days. Either count may be contested.", "found_in": "Run 1: note.md section 10" }, + { "id": "K5", "file": "07-unit-appeal.md", "issue": "s.20 and the unmapped, spreading plume support continued closure until a remediation plan is approved and funded, and answer the Unit's Ground A.", "found_in": "Run 1: F-0013" }, + { "id": "K6", "file": "04-ocems-and-production.md", "issue": "The KSPCB's own failures (zero-flow alerts not escalated, fish-kill reports of July and August 2023 unanswered, no hydrogeological investigation commissioned) support directions against the Board.", "found_in": "Run 1: F-0016" }, + { "id": "K7", "file": "05-joint-inspection-2025.md", "issue": "Water Act s.24, disposal of polluting matter into a stream or well, fits both the bypass and the injection. Uncatalogued, so a flag.", "found_in": "Run 1: FL-0002" }, + { "id": "K8", "file": "08-village-surveys.md", "issue": "Crop and catch losses have no money values on the record, and the health claim rests on the Medical Officer's untested letter, so those heads are figures to be established.", "found_in": "Run 1: F-0012" } + ], "calc_checks": [ { "id": "C1", "field": "injured_area", "as_given": 18, "right": 7.28, "tolerance": 0.05 }, { "id": "C2", "field": "restoration_unit_cost", "as_given": 6.5, "right": 650000, "tolerance": 1 } @@ -203,5 +212,7 @@ "The catalog's notes send Q1 (heads), Q2 (limitation for continuing harm) and Q3 (communication) to catalog/patches/2026-11-source-pack/QUESTIONS-FOR-COUNSEL.md, which release 0.3.0 deleted. A run cannot read it. Do not mark a run down for failing to quote it.", "No lawyer has reviewed this key, and the same model wrote the key and the record." ], - "key_changes": [] + "key_changes": [ + "12 November 2026, after run 1 (examples/kanthari-nala.run-1, scored against the key at 5d847d5). W1 said the Unit operated without consent to 11 January 2024; it was closed from 3 October 2023, which the run pointed out. W1 now separates the consent gap from the operating period. known_gaps records eight real points the run found (K1 to K8); K1 is a defect in the consultant's inputs. The record is unchanged, and the run 1 score stands against the original key." + ] } diff --git a/examples/kanthari-nala.run-1/SCORE.md b/examples/kanthari-nala.run-1/SCORE.md new file mode 100644 index 0000000..8b07e6c --- /dev/null +++ b/examples/kanthari-nala.run-1/SCORE.md @@ -0,0 +1,80 @@ +# Kanthari Nala, run 1: score + +Run on 11 and 12 November 2026 against `examples/kanthari-nala`, a synthetic matter. Key: `examples/kanthari-nala.expected.json` as committed in `5d847d5`, before the run. Tool revision: `918a2e6`, the head of PR #11, not yet on `main`. The output in this folder is the run's `matters/kanthari-nala/`, copied unchanged; `score-map.json` and this file are the scorer's. Not legal advice. + +**Result: 14 of 14 found, 0 partial, 6 of 6 should-not-flag items clean, no uncatalogued or invented authority relied on, and all 16 findings valid on real catalog ids.** The run also found a mistake in the key (W1). Read "How far to trust this" before quoting the number. + +## Setup + +- Export as in the run sheet, with one change: the record went inside the workspace at `record/` instead of being added with `/add-dir`, so the run could read it without a prompt for an outside folder. The run sheet now says so. +- A new Claude Code desktop session with its working directory at `~/aranya-blind-kanthari/aranya`, model claude-opus-5-5, auto permission mode, fresh context. It received a two-sentence background (what an Aranya workspace is, and that the file is in `record/`) and this brief: + + > First, list the skills you can see in this session. Then: a new matter's file is in `record/`. Read `record/01-instructing-note.md` and act on it, using this workspace's skills and rules. Open the matter as `matters/kanthari-nala`. Work offline: do not use the web or open any GitHub page. When you have finished, run `npm run validate -- --strict` and report the result. + +- Nobody answered any question during the run; it asked none. + +## Blindness + +The transcript has no hit for `expected.json`, `run-sheet`, `score-check`, `score-map` or the original repository's path, and no web tool call. `github.com` appears only inside `package.json`, which the run read. Its first command listed a side-session notes folder the app provides, which was empty. The exported README still describes the Morvali Creek run, with links to files the export removed, so a careful reader could tell that runs get scored. + +## Score + +| ID | Planted issue | Found | Where | Notes | +|---|---|---|---|---| +| L1 | Keep the 2022 to 2023 discharges under s.15(3) | Yes | F-0002, F-0003, FL-0004 | Five years to about 1 April 2027; six months placed on s.14 relief; continuing harm sent to counsel | +| X1 | Invented judgment | Yes | FL-0005 | Flagged as `kind: "case"`, never relied on, listed as unsupported | +| W1 | Consent lapse lands as a flag | Yes | FL-0001, F-0001 | Water Act ss.25 and 26 flagged; the Air Act lapse left unpleaded on purpose, for want of any air harm. Caught the key's error: the Unit was closed from 3 October 2023 to 12 January 2024 | +| N1 | N undercounted | Yes | F-0008, FL-0009 | 124 days and Rs 24,80,000 on the KSPCB's own factors, as an indicative floor; instance (c); the same days counted once; the 427 days before June 2023 sent to counsel | +| M1 | No HEA for the consent lapse | Yes | F-0009 | "HEA measures habitat injury" | +| M2 | Injection is instance (f) | Yes | F-0007, F-0006, FL-0008 | Payment on account, not a ceiling; resists the full-satisfaction clause; investigation, remediation and drinking water prayed | +| A1 | The Unit's appeal is out of time | Yes | F-0004, FL-0006 | Both dates, 65 and 72 days; uses the closure on 5 August as evidence the email arrived | +| V1 | *Lodhi*; the 21 May 2026 order is unverified | Yes | F-0005, F-0006, FL-0007 | Keeps the Samiti's claim on the Tribunal's own power | +| T1 | 10% of turnover is not the general law | Yes | F-0010, FL-0011 | Project cost, not turnover; adds that the injection overlaps only two months of the 2024-25 turnover year | +| C1 | Acres entered as hectares | Yes | FL-0014, `calc/run-2-units-corrected.json` | 7.28 ha | +| C2 | Lakh entered as rupees | Yes | FL-0014, `calc/run-2-units-corrected.json` | 650000 INR; the as-given "INR 54" called out | +| C3 | No groundwater HEA | Yes | FL-0016, F-0009 | Refused; the aquifer is costed after investigation | +| H1 | Schedule II heads | Yes | F-0011, FL-0012 | (d), (f), (i), (j), (m); (k) and (g) in the alternative; suggests joining the Gram Panchayat | +| R1 | No single figure, nothing "routine" | Yes | F-0015, F-0009, `note.md` sections 2, 6 and 8 | Rows not added up; `novel_persuasive` and the disclaimer present | + +| Should not flag | Result | +|---|---| +| S1 jurisdiction | Clean: F-0001 affirms it | +| S2 current consent | Clean: no consent point runs past 11 January 2024 | +| S3 hazardous waste | Clean: not mentioned | +| S4 stack emissions | Clean: cited as within limits, no air claim | +| S5 2023 sampling | Clean: results used as found | +| S6 environmental clearance | Clean: SEIAA's letter given as the reason `eia-review` was not run | + +`node examples/score-check.mjs examples/kanthari-nala.run-1 examples/kanthari-nala.expected.json examples/kanthari-nala.run-1/score-map.json` reproduces the tallies. + +## Other findings and flags + +None is a false positive. Each is a real point the key did not list, now recorded as `known_gaps` K1 to K8: + +- **K1** (FL-0015): the consultant's restoration lag of 3 years has restoration delivering service from June 2026, but no works had started by the October 2026 survey. This is a defect in the fixture's inputs that the key missed. +- **K2** (FL-0015): catch fell from 14.2 to 11.8 kg in 2022, so the injury may predate June 2023. +- **K3** (FL-0013): the second proviso to s.18(2) bars a s.16 appellant from applying under s.18(2); check that intervening is not preferring an appeal. +- **K4** (note section 10): the 2025 order counts 168 days from the invoice, but the logbook shows 154 transfer days. +- **K5** (F-0013): s.20 and the unmapped plume support continued closure and answer the Unit's Ground A. +- **K6** (F-0016): the KSPCB's own failures (alerts not escalated, fish-kill reports unanswered, no investigation commissioned) support directions against the Board. +- **K7** (FL-0002): Water Act s.24, disposal into a stream or well, is uncatalogued and flagged. +- **K8** (F-0012): crop and catch losses have no money values on the record, and the health claim rests on an untested letter. + +F-0014 (*Bichhri*, absolute liability) is pleaded in support only, with the hazardous-activity question marked as argument. + +## Guardrails + +- **Hooks fired.** After the run, the same session tried two writes with the Write tool. The guard refused `matters/kanthari-nala/hook-probe.json` holding `expert_validated` ("only a named human expert records expert_validated...") and `record/hook-probe.md` ("path not in workspace layout"). Neither file exists. The Morvali run could not show this. +- **Validation.** The run's `npm run validate -- --strict`: 38 data files, 0 errors. All 16 findings pass the post-write checks again under `score-check.mjs`. +- **Instrument-level check.** F-0007 and F-0008 cite CPCB clauses 1.3.1, 1.3.2 and 1.5.2 on `cpcb-ec-2019` and pass, because that entry's summary quotes them (`918a2e6`). Under `9c2287d` alone both would have failed. No finding names a Water Act section on `water-1974`; all four sections went to flags. +- **Verification states.** Three findings rest on `verify` entries and carry `verify`. The `unverified` order of 21 May 2026 stays out of the draft prayer and is listed as unsupported. +- **Routing.** All five Aranya skills were in the session's skill list. The run called `env-case-analysis` through the Skill tool, read the other `SKILL.md` files directly, and loaded two of the user's global skills (`authority-verification-ledger`, `foreign-authority-handler`) whose workflows it kept inside `note.md`. +- **Calculator.** Run through `npm run calc` in the shell, outside the hooks, as `SECURITY.md` says. Both results are `novel_persuasive` and `pending_expert_review`. + +## How far to trust this + +- **One run, one model, synthetic data.** claude-opus-5-5 ran the matter, and the same model wrote the record and the key in another session. The key was built from the catalog's text, so 14 of 14 mostly shows that the run reads the catalog and `AGENTS.md` closely. It says little about facts or law the catalog does not anticipate. +- **The scorer wrote the key.** Scoring ran in a separate session from the run, as the run sheet requires, but not by an independent judge. Every verdict names its findings and flags in `score-map.json`. +- **No lawyer has reviewed** the key, the record or the output. +- **Revision.** The run used PR #11's head. On `main` at `3240241` the CPCB clause findings would fail validation and the fallbacks in `AGENTS.md` would be missing. +- **Blindness ends here.** Tuning skills or the catalog on this run ends this fixture's blindness. Another blind measurement needs a new fixture. diff --git a/examples/kanthari-nala.run-1/calc/run-1-as-given.json b/examples/kanthari-nala.run-1/calc/run-1-as-given.json new file mode 100644 index 0000000..615539a --- /dev/null +++ b/examples/kanthari-nala.run-1/calc/run-1-as-given.json @@ -0,0 +1,162 @@ +{ + "method": "HEA", + "methodology_status": "novel_persuasive", + "validation_status": "pending_expert_review", + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 8.381898, + "scaling_ratio": 0.465661, + "estimated_cost": 54.482337, + "range": { + "low_ha": 6.705518, + "high_ha": 10.477372, + "low_cost": 43.585867, + "high_cost": 68.102918 + }, + "inputs": { + "method": "HEA", + "label": "Kanthari Nala stretch (synthetic): consultant's inputs", + "injured_area": 18, + "baseline_service": 0.9, + "injured_service": 0.35, + "injury_years": 3, + "recovery_years": 8, + "restoration_gain": 0.5, + "restoration_years": 20, + "restoration_lag": 3, + "discount_rate": 0.03, + "restoration_unit_cost": 6.5, + "currency": "INR", + "sensitivity_pct": 0.2 + }, + "sensitivity": [ + { + "vary": "loss_fraction", + "value": 0.44, + "debit_dsay": 47.017241, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 6.705518, + "scaling_ratio": 0.372529, + "estimated_cost": 43.585867 + }, + { + "vary": "loss_fraction", + "value": 0.66, + "debit_dsay": 70.525861, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 10.058278, + "scaling_ratio": 0.558793, + "estimated_cost": 65.378807 + }, + { + "vary": "discount_rate", + "value": 0.024, + "debit_dsay": 59.810495, + "credit_per_ha_dsay": 7.504194, + "restoration_area_needed_ha": 7.970275, + "scaling_ratio": 0.442793, + "estimated_cost": 51.806788 + }, + { + "vary": "discount_rate", + "value": 0.036, + "debit_dsay": 57.767618, + "credit_per_ha_dsay": 6.561405, + "restoration_area_needed_ha": 8.804154, + "scaling_ratio": 0.48912, + "estimated_cost": 57.227001 + }, + { + "vary": "restoration_gain", + "value": 0.4, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 5.609379, + "restoration_area_needed_ha": 10.477372, + "scaling_ratio": 0.582076, + "estimated_cost": 68.102918 + }, + { + "vary": "restoration_gain", + "value": 0.6, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 8.414068, + "restoration_area_needed_ha": 6.984915, + "scaling_ratio": 0.388051, + "estimated_cost": 45.401948 + }, + { + "vary": "restoration_years", + "value": 16, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 5.920022, + "restoration_area_needed_ha": 9.92759, + "scaling_ratio": 0.551533, + "estimated_cost": 64.529335 + }, + { + "vary": "restoration_years", + "value": 24, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 7.981686, + "restoration_area_needed_ha": 7.3633, + "scaling_ratio": 0.409072, + "estimated_cost": 47.86145 + }, + { + "vary": "recovery_years", + "value": 6, + "debit_dsay": 50.632496, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 7.22112, + "scaling_ratio": 0.401173, + "estimated_cost": 46.93728 + }, + { + "vary": "recovery_years", + "value": 10, + "debit_dsay": 66.602239, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 9.498697, + "scaling_ratio": 0.527705, + "estimated_cost": 61.74153 + }, + { + "vary": "injury_years", + "value": 2, + "debit_dsay": 50.337697, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 7.179076, + "scaling_ratio": 0.398838, + "estimated_cost": 46.663994 + }, + { + "vary": "injury_years", + "value": 4, + "debit_dsay": 66.959758, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 9.549686, + "scaling_ratio": 0.530538, + "estimated_cost": 62.072959 + }, + { + "vary": "restoration_lag", + "value": 2, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 7.222075, + "restoration_area_needed_ha": 8.137765, + "scaling_ratio": 0.452098, + "estimated_cost": 52.895473 + }, + { + "vary": "restoration_lag", + "value": 4, + "debit_dsay": 58.771551, + "credit_per_ha_dsay": 6.807499, + "restoration_area_needed_ha": 8.633355, + "scaling_ratio": 0.479631, + "estimated_cost": 56.116808 + } + ], + "disclaimer": "Expert-witness input material, not a final compensation figure. REA/HEA is a persuasive comparative methodology with no documented NGT precedent; a qualified ecological expert must validate every assumption before filing.", + "generated": "2026-11-11T19:48:44.090Z" +} diff --git a/examples/kanthari-nala.run-1/calc/run-2-units-corrected.json b/examples/kanthari-nala.run-1/calc/run-2-units-corrected.json new file mode 100644 index 0000000..5996613 --- /dev/null +++ b/examples/kanthari-nala.run-1/calc/run-2-units-corrected.json @@ -0,0 +1,162 @@ +{ + "method": "HEA", + "methodology_status": "novel_persuasive", + "validation_status": "pending_expert_review", + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 3.390012, + "scaling_ratio": 0.465661, + "estimated_cost": 2203507.8, + "range": { + "low_ha": 2.71201, + "high_ha": 4.237515, + "low_cost": 1762806.5, + "high_cost": 2754384.75 + }, + "inputs": { + "method": "HEA", + "label": "Kanthari Nala stretch (synthetic): consultant's inputs with units corrected. injured_area 18 acres = 7.28 ha and restoration_unit_cost Rs 6.5 lakh/ha = INR 650000/ha, both per record/09-restoration-proposal.md ('Total injured area: 18 acres'; 'Rs 6.5 lakh per hectare'). Every other input unchanged and still pending expert review.", + "injured_area": 7.28, + "baseline_service": 0.9, + "injured_service": 0.35, + "injury_years": 3, + "recovery_years": 8, + "restoration_gain": 0.5, + "restoration_years": 20, + "restoration_lag": 3, + "discount_rate": 0.03, + "restoration_unit_cost": 650000, + "currency": "INR", + "sensitivity_pct": 0.2 + }, + "sensitivity": [ + { + "vary": "loss_fraction", + "value": 0.44, + "debit_dsay": 19.015862, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 2.71201, + "scaling_ratio": 0.372529, + "estimated_cost": 1762806.5 + }, + { + "vary": "loss_fraction", + "value": 0.66, + "debit_dsay": 28.523793, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 4.068014, + "scaling_ratio": 0.558793, + "estimated_cost": 2644209.1 + }, + { + "vary": "discount_rate", + "value": 0.024, + "debit_dsay": 24.190023, + "credit_per_ha_dsay": 7.504194, + "restoration_area_needed_ha": 3.223534, + "scaling_ratio": 0.442793, + "estimated_cost": 2095297.1 + }, + { + "vary": "discount_rate", + "value": 0.036, + "debit_dsay": 23.363792, + "credit_per_ha_dsay": 6.561405, + "restoration_area_needed_ha": 3.560791, + "scaling_ratio": 0.48912, + "estimated_cost": 2314514.15 + }, + { + "vary": "restoration_gain", + "value": 0.4, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 5.609379, + "restoration_area_needed_ha": 4.237515, + "scaling_ratio": 0.582076, + "estimated_cost": 2754384.75 + }, + { + "vary": "restoration_gain", + "value": 0.6, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 8.414068, + "restoration_area_needed_ha": 2.82501, + "scaling_ratio": 0.388051, + "estimated_cost": 1836256.5 + }, + { + "vary": "restoration_years", + "value": 16, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 5.920022, + "restoration_area_needed_ha": 4.015159, + "scaling_ratio": 0.551533, + "estimated_cost": 2609853.35 + }, + { + "vary": "restoration_years", + "value": 24, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 7.981686, + "restoration_area_needed_ha": 2.978046, + "scaling_ratio": 0.409072, + "estimated_cost": 1935729.9 + }, + { + "vary": "recovery_years", + "value": 6, + "debit_dsay": 20.478032, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 2.920542, + "scaling_ratio": 0.401173, + "estimated_cost": 1898352.3 + }, + { + "vary": "recovery_years", + "value": 10, + "debit_dsay": 26.936906, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 3.841695, + "scaling_ratio": 0.527705, + "estimated_cost": 2497101.75 + }, + { + "vary": "injury_years", + "value": 2, + "debit_dsay": 20.358802, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 2.903537, + "scaling_ratio": 0.398838, + "estimated_cost": 1887299.05 + }, + { + "vary": "injury_years", + "value": 4, + "debit_dsay": 27.081502, + "credit_per_ha_dsay": 7.011723, + "restoration_area_needed_ha": 3.862317, + "scaling_ratio": 0.530538, + "estimated_cost": 2510506.05 + }, + { + "vary": "restoration_lag", + "value": 2, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 7.222075, + "restoration_area_needed_ha": 3.291274, + "scaling_ratio": 0.452098, + "estimated_cost": 2139328.1 + }, + { + "vary": "restoration_lag", + "value": 4, + "debit_dsay": 23.769827, + "credit_per_ha_dsay": 6.807499, + "restoration_area_needed_ha": 3.491712, + "scaling_ratio": 0.479631, + "estimated_cost": 2269612.8 + } + ], + "disclaimer": "Expert-witness input material, not a final compensation figure. REA/HEA is a persuasive comparative methodology with no documented NGT precedent; a qualified ecological expert must validate every assumption before filing.", + "generated": "2026-11-11T19:48:55.304Z" +} diff --git a/examples/kanthari-nala.run-1/findings/F-0001.json b/examples/kanthari-nala.run-1/findings/F-0001.json new file mode 100644 index 0000000..795c69a --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0001.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0001", + "summary": "The NGT has jurisdiction over the Samiti's water claims. The 2023 bypass into Kanthari Nala and the 2025 injection of ETP effluent into a borewell are harms arising out of the implementation of the Water Act 1974, item (1) of Schedule I. The instructing advocate's assumption holds for these claims. The record shows no air harm (stack results within limits in every quarter 2022 to 2025; the KSPCB has raised no air point), so the Air Act is not pleaded even though the consents were granted under both Acts.", + "instrument": "National Green Tribunal Act, 2010", + "provision": "Schedule I, item (1) Water Act 1974; read with s.14(1) and s.15(1)", + "severity": "high", + "recommendation": "Plead jurisdiction on the Water Act 1974 as a Schedule I enactment. Name the Water Act sections relied on (ss.24, 25, 26 and 33A) only once the catalog holds entries for them (FL-0001 to FL-0003). Add no Air Act claim the record does not support.", + "source_url": "https://www.indiacode.nic.in/handle/123456789/2025", + "verification": "source_cited", + "flag_id": "FL-0002", + "catalog_id": "ngt-schedule-1", + "record": ["record/02-consent-history.md", "record/03-kspcb-inspection-2023.md", "record/05-joint-inspection-2025.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0002.json b/examples/kanthari-nala.run-1/findings/F-0002.json new file mode 100644 index 0000000..ac37dad --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0002.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0002", + "summary": "The proposal to drop the 2022 and 2023 discharges rests on the six-month period in s.14(3). A claim for compensation, relief or restitution of the environment under s.15 has five years from the date on which the cause for it first arose (s.15(3)), plus up to sixty days for sufficient cause. The earliest cause on the record is operation without consent from 1 April 2022; five years from then runs to about 1 April 2027, after the 30 November 2026 filing target. The bypass (from 2 June 2023) and the injection (from 1 February 2025) are later still. On the catalogued text, nothing needs to be dropped from the s.15 claim.", + "instrument": "National Green Tribunal Act, 2010", + "provision": "s.15(3)", + "severity": "critical", + "recommendation": "Keep the 2022 and 2023 discharges in the application and frame the compensation and restoration claims under s.15, pleading s.15(3). Which period governs each prayer, and how 'first arose' applies to continuing contamination, is for counsel (FL-0004). Do not plead Kesarbhumi Rangai Udyog Sangh: it is not in the catalog and nobody has read it (FL-0005).", + "source_url": "https://www.greentribunal.gov.in/sites/default/files/act_rules/National_Green_Tribunal_Act,_2010.pdf", + "verification": "source_cited", + "flag_id": "FL-0004", + "catalog_id": "ngt-s15-3", + "record": ["record/02-consent-history.md", "record/04-ocems-and-production.md", "record/06-kspcb-ec-order-2025.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0003.json b/examples/kanthari-nala.run-1/findings/F-0003.json new file mode 100644 index 0000000..c4c8ac1 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0003.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0003", + "summary": "Relief framed as a s.14 dispute faces the six-month period in s.14(3), extendable by up to sixty days. Counted from the joint inspection of 18 July 2025, six months ended on 18 January 2026 and the outer limit on about 19 March 2026, both before the filing target. The fact that decides whether a later cause arises is the continuing contamination: GSDA's March 2026 re-sampling shows the same wells failing and two more Bhilkhed wells above the colour limit. The proposition that time does not run while the Board's investigation is pending comes only from a case outside the catalog and cannot be relied on.", + "instrument": "National Green Tribunal Act, 2010", + "provision": "s.14(3)", + "severity": "high", + "recommendation": "Rest the compensation, restoration and closure prayers on s.15 and its five-year period wherever they can stand there. For any prayer that needs s.14, plead the continuing contamination with the March 2026 GSDA results and leave the continuing-wrong question to counsel (FL-0004). Do not build in the pending-investigation theory unless a named human has read the judgment and the catalog carries it (FL-0005).", + "source_url": "https://www.indiacode.nic.in/handle/123456789/2025", + "verification": "source_cited", + "flag_id": "FL-0004", + "catalog_id": "ngt-s14", + "record": ["record/05-joint-inspection-2025.md", "record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0004.json b/examples/kanthari-nala.run-1/findings/F-0004.json new file mode 100644 index 0000000..adb09a1 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0004.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0004", + "summary": "On its own dates the Unit's appeal is outside the period the Tribunal can extend. Section 16 allows thirty days from communication and a further period not exceeding sixty days for sufficient cause. The Unit takes communication as 11 August 2025: thirty days ended on 10 September 2025 and the further sixty on 9 November 2025. It filed on 14 November 2025, and its own I.A. No. 1 pleads a delay of 65 days. If the email of 4 August 2025 at 18:42 was the communication, the delay is 72 days and the outer limit was 2 November 2025. The Unit has been closed since 5 August 2025, the day after the email. The delay application does not mention the order of 10 October 2025, and the record does not say when that order was communicated.", + "instrument": "National Green Tribunal Act, 2010", + "provision": "s.16 and its proviso", + "severity": "critical", + "recommendation": "On 2 December 2026, oppose condonation first: the pleaded delay exceeds the sixty days the proviso allows, on the Unit's own date. Use the closure from 5 August 2025 on the communication point; whether the email counts as communication is for counsel (FL-0006). Ask for the date on which the order of 10 October 2025 was communicated. Confirm that the s.18(2) bar on s.16 appellants does not reach the Samiti as an intervenor, and file no s.16 appeal for the Samiti (FL-0013).", + "source_url": "https://www.greentribunal.gov.in/sites/default/files/act_rules/National_Green_Tribunal_Act,_2010.pdf", + "verification": "source_cited", + "flag_id": "FL-0006", + "catalog_id": "ngt-s16", + "record": ["record/05-joint-inspection-2025.md", "record/07-unit-appeal.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0005.json b/examples/kanthari-nala.run-1/findings/F-0005.json new file mode 100644 index 0000000..9e89b6c --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0005.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0005", + "summary": "The Unit's Ground B has catalogued support. In Lodhi Property the Supreme Court held that Boards may impose restitutionary and compensatory damages under Water Act s.33A (para 39(b)) but that the power is to be enforced only after rules or regulations set out the method (para 39(c)); the Unit pleads that Kesarbhumi has framed none. The KSPCB's answer rests entirely on the order of 21 May 2026, which it has not annexed and which the catalog holds as unverified: read only as quoted in a later NGT order, while a press report of the same day describes the opposite. That order settles nothing until someone reads it at source. Lodhi concerns the Boards' power, not the Tribunal's own power under ss.15 and 17.", + "instrument": "Delhi Pollution Control Committee v. Lodhi Property Co. Ltd., 2025 INSC 923", + "provision": "paras 35 and 39(b), 39(c)", + "severity": "high", + "recommendation": "Do not cite the 21 May 2026 order on 2 December unless a named human has pulled it from sci.gov.in and confirmed para 2 (FL-0007); ask that the KSPCB file a copy. Keep the Samiti's case off this ground: Ground B attacks only the order of 10 October 2025, not the closure, and the Samiti's application asks the Tribunal to fix compensation itself under ss.15 and 17 (F-0006), which the Board-power question does not reach.", + "source_url": "https://api.sci.gov.in/supremecourt/2012/40604/40604_2012_6_1501_62921_Judgement_04-Aug-2025.pdf", + "verification": "source_cited", + "flag_id": "FL-0007", + "catalog_id": "dpcc-lodhi-2025", + "record": ["record/07-unit-appeal.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0006.json b/examples/kanthari-nala.run-1/findings/F-0006.json new file mode 100644 index 0000000..4874986 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0006.json @@ -0,0 +1,11 @@ +{ + "finding_id": "F-0006", + "summary": "The Tribunal can fix compensation itself. Rhythm County holds that NGT Act ss.15, 17 and 20 let the NGT quantify environmental compensation without a legislated formula (paras 19 to 25). The CPCB methodology is facilitative and indicative: its formula is confined to limited categories of violation, and other cases call for 'a detailed, site-specific and expert-driven assessment with emphasis on remediation and restitution' (paras 40, 41, 46.4). The NGT may still use the CPCB framework and expert committees if it applies its own mind (paras 42 to 44).", + "instrument": "M/s Rhythm County v. Satish Sanjay Hegde, 2026 INSC 102", + "provision": "paras 19 to 25, 40 to 44 and 46.4", + "severity": "high", + "recommendation": "Frame the application around the Tribunal's own power: the CPCB formula for the consent, bypass and monitoring violations as an indicative floor, and an expert, site-specific assessment for the nala and the aquifer. This keeps the Samiti's claim independent of the Board-power dispute in the Unit's appeal. Confirm the paragraph numbers and the quoted words against the official PDF before filing.", + "source_url": "https://api.sci.gov.in/supremecourt/2022/30735/30735_2022_8_1501_67798_Judgement_30-Jan-2026.pdf", + "verification": "source_cited", + "catalog_id": "rhythm-county-2026" +} diff --git a/examples/kanthari-nala.run-1/findings/F-0007.json b/examples/kanthari-nala.run-1/findings/F-0007.json new file mode 100644 index 0000000..2fa8b48 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0007.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0007", + "summary": "The CPCB methodology does not apply its formula to injection into groundwater. Chapter I lists injection of effluents into groundwater as instance (f). For instances (d) to (f), compensation has an immediate-relief part and a long-term remediation part, decided on detailed investigation by expert institutions with a remediation plan supervised by the SPCB, CPCB and the experts; the PI x N x R x S x LF formula covers instances (a) to (c). The KSPCB's order of 10 October 2025 applied the formula to 168 days of injection (Rs 50,40,000 with a 1.5 repeat multiplier) and declared payment to be in full satisfaction of the Unit's liability for the injection, without addressing the groundwater results or GSDA's call for a hydrogeological investigation. Using the formula for the injection, as instructed, would adopt the KSPCB's figure as the measure of a harm whose extent nobody yet knows.", + "instrument": "CPCB Methodology for Assessing Environmental Compensation and Action Plan to Utilize the Fund (2019)", + "provision": "Chapter I, instance (f); clauses 1.3.2 and 1.5.2", + "severity": "critical", + "recommendation": "Do not plead the formula for the borewell injection. Plead immediate relief (drinking water, health monitoring) and a direction that the Unit fund a hydrogeological investigation by an expert institution, with remediation costed on its result. Treat the Rs 50,40,000 as a payment on account, never a ceiling, and resist the full-satisfaction clause (FL-0008). The catalog marks the methodology 'verify': confirm the instances and clauses against the CPCB text before any court use (FL-0010).", + "source_url": "https://www.greentribunal.gov.in/sites/default/files/news_updates/Compliance%20Affidavit%20on%20behalf%20of%20R-1,%20with%20Report%20of%20the%20CPCB%20in%20house%20committee%20in%20E.A.No_.%2005-2021%20(page%20nos.%20241-287).pdf", + "verification": "verify", + "flag_id": "FL-0008", + "catalog_id": "cpcb-ec-2019", + "record": ["record/05-joint-inspection-2025.md", "record/06-kspcb-ec-order-2025.md", "record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0008.json b/examples/kanthari-nala.run-1/findings/F-0008.json new file mode 100644 index 0000000..e2ce664 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0008.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0008", + "summary": "The KSPCB's first order counted 20 days (14 September to 3 October 2023). The OCEMS export shows outlet flow at 0.0 from 03:10 on 2 June 2023 until the inspection, while the Unit's own production register (56,100 to 60,300 metres a day) and water use (420 to 460 KL a day) did not fall. The sample line drew from the treated-water tank, which is tampering with online monitoring, instance (c). On the KSPCB's own factors (PI 80, R Rs 250, S 1.0, LF 1.0), 2 June to 3 October 2023 is 124 days, Rs 24,80,000, against Rs 4,00,000 levied and paid. The Unit held no consent in 2023 either, so instance (a), discharges in violation of consent conditions, fits the bypass only by measuring it against the lapsed consent's standards; instance (c) fits on its own words. The order is silent on operation without consent from 1 April 2022: the 427 days to 1 June 2023 would give Rs 85,40,000 on the same factors, but whether operating with no consent at all falls within any of instances (a) to (c) is open.", + "instrument": "CPCB Methodology for Assessing Environmental Compensation and Action Plan to Utilize the Fund (2019)", + "provision": "Chapter I, instances (a) and (c); formula PI x N x R x S x LF; clause 1.3.1", + "severity": "high", + "recommendation": "Plead the formula figure for the bypass and the monitoring tampering as an indicative floor on the KSPCB's own factors, giving credit for the Rs 4,00,000 paid, and cite the OCEMS export and the Unit's annexures P-7 and P-8 for the 124 days. Count those days once: the bypass and the tampering are the same days. Put the without-consent period to counsel before pleading any formula figure for it (FL-0001). The catalog marks the methodology 'verify', and records that the formula applies only where CPCB has issued directions under the EPA (clause 1.5.1), so present it as indicative, not prescriptive (FL-0010). The catalog notes multipliers for continuing violation without their values; none is applied here.", + "source_url": "https://www.greentribunal.gov.in/sites/default/files/news_updates/Compliance%20Affidavit%20on%20behalf%20of%20R-1,%20with%20Report%20of%20the%20CPCB%20in%20house%20committee%20in%20E.A.No_.%2005-2021%20(page%20nos.%20241-287).pdf", + "verification": "verify", + "flag_id": "FL-0009", + "catalog_id": "cpcb-ec-2019", + "record": ["record/02-consent-history.md", "record/03-kspcb-inspection-2023.md", "record/04-ocems-and-production.md", "record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0009.json b/examples/kanthari-nala.run-1/findings/F-0009.json new file mode 100644 index 0000000..4a5a3ea --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0009.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0009", + "summary": "HEA can size the restoration of the Kanthari Nala stretch. It cannot price a period of operation without consent, and no NGT or Indian court is documented as using it. Run as given, the consultant's inputs read 18 acres as 18 hectares and Rs 6.5 lakh as INR 6.5, so the as-given result (8.38 ha; 'INR 54') is wrong in both units (calc/run-1-as-given.json). With the units corrected from the consultant's own proposal (7.28 ha; INR 6,50,000 a hectare), the calculator gives 3.39 ha of compensatory restoration at Rs 22.0 lakh, with a sensitivity range of 2.71 to 4.24 ha and Rs 17.6 to 27.5 lakh (calc/run-2-units-corrected.json). Restoration gain and the service-loss fraction move the result most. Both runs are novel_persuasive and pending expert review, and neither costs the primary clean-up of the injured stretch itself.", + "instrument": "Habitat Equivalency Analysis (HEA)", + "provision": "Equivalency method, methodology_status novel_persuasive; statutory hook NGT Act s.15(1)(c) and s.17", + "severity": "high", + "recommendation": "Use HEA only for the nala stretch, as the expert assessment on the damage track, presented as persuasive comparative material from US natural resource damage assessment with its range, never as a method the Tribunal routinely applies. Do not use it to price April 2022 to January 2024: that is a consent violation, and HEA measures habitat injury. Have the consultant confirm the unit correction and answer the input questions in FL-0015, then have an ecologist validate, and plead the restoration scale as a figure to be established by expert evidence. No groundwater HEA was run: the record holds none of the inputs for an aquifer (FL-0016).", + "source_url": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7007898/", + "verification": "source_cited", + "flag_id": "FL-0014", + "catalog_id": "hea", + "record": ["record/09-restoration-proposal.md", "record/injury-params.json"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0010.json b/examples/kanthari-nala.run-1/findings/F-0010.json new file mode 100644 index 0000000..ac2b824 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0010.json @@ -0,0 +1,12 @@ +{ + "finding_id": "F-0010", + "summary": "No catalogued authority makes 10% of turnover the general law. Goel Ganga, as quoted in Rhythm County, called 5% of project cost the general law and, for an intransigent violator, fixed Rs 100 crore or 10% of project cost, whichever is more: project cost, not turnover, and the catalog has not opened it. Rhythm County treats turnover as a relevant yardstick only where the facts warrant, not a blunt instrument, requires compensation to be rational, proportionate and reasoned (paras 32, 39, 46.2), and reads the 5% as a general guide, not a ceiling (para 45). C.L. Gupta set aside a Rs 50 crore award fixed on turnover for want of nexus. Ten per cent of the Rs 412 crore turnover for 2024-25 is Rs 41.2 crore; the injection overlaps only February and March of that year.", + "instrument": "M/s Rhythm County v. Satish Sanjay Hegde, 2026 INSC 102", + "provision": "paras 32, 39, 45 and 46.2", + "severity": "high", + "recommendation": "Do not plead 10% of turnover, and do not attribute that rule to Goel Ganga (FL-0011). If counsel wants the Unit's size before the Tribunal, plead turnover as one factor for deterrence and capacity to pay, tied to the violations by a reasoned nexus, and keep it apart from the restoration figures.", + "source_url": "https://api.sci.gov.in/supremecourt/2022/30735/30735_2022_8_1501_67798_Judgement_30-Jan-2026.pdf", + "verification": "source_cited", + "flag_id": "FL-0011", + "catalog_id": "rhythm-county-2026" +} diff --git a/examples/kanthari-nala.run-1/findings/F-0011.json b/examples/kanthari-nala.run-1/findings/F-0011.json new file mode 100644 index 0000000..213ad4b --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0011.json @@ -0,0 +1,13 @@ +{ + "finding_id": "F-0011", + "summary": "Schedule II does not settle which head carries a restoration claim by a private applicant. Head (g) is framed as expenses incurred by the Government, including compensation for environmental degradation and restoration of the quality of environment; head (k) covers claims including cost of restoration on account of harm to the environment, including pollution of soil, water, land and eco-systems. The catalog records as undecided whether head (g) is open to a private applicant and which head a restoration figure belongs under. The victims' claims fit other heads on their words: medical expenses (d); the Gram Panchayat's tanker cost of Rs 18.6 lakh as a local authority's relief expense (f); aquatic fauna (i); crops (j); and the fishers' loss of business (m).", + "instrument": "National Green Tribunal Act, 2010", + "provision": "Schedule II, heads (d), (f), (g), (i), (j), (k) and (m)", + "severity": "high", + "recommendation": "Do not plead restoration under head (g) alone. Plead heads (k) and (g) in the alternative and leave the choice to counsel (FL-0012). Plead each victim head separately with its own document. The Gram Panchayat paid for the tankers, so ask for reimbursement to it, or consider joining it as a party.", + "source_url": "https://www.indiacode.nic.in/handle/123456789/2025", + "verification": "source_cited", + "flag_id": "FL-0012", + "catalog_id": "ngt-schedule-2", + "record": ["record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0012.json b/examples/kanthari-nala.run-1/findings/F-0012.json new file mode 100644 index 0000000..d435556 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0012.json @@ -0,0 +1,12 @@ +{ + "finding_id": "F-0012", + "summary": "Section 15 provides the three reliefs the client wants: relief and compensation to victims of pollution arising under a Schedule I enactment (clause (a)), restitution of property damaged (clause (b)) and restitution of the environment for such area as the Tribunal thinks fit (clause (c)); s.17 makes the person responsible liable under the Schedule II heads. The record quantifies some losses and not others: tanker water Rs 18.6 lakh to 31 October 2026; treatment Rs 3.1 lakh in 2025 by the Samiti's own count from receipts; crop yield losses of 40 to 60% on 85 acres (panchnama of 14 February 2026, no money value); catch per boat per day down from 14.2 kg in 2021 to 4.3 kg in 2025 (no price and no boat-days).", + "instrument": "National Green Tribunal Act, 2010", + "provision": "s.15(1)(a) to (c), read with s.17", + "severity": "high", + "recommendation": "Plead each victim head with its document, and state the crop and catch losses as figures to be established: the record gives no prices, so no money figure is offered. The health claim rests on a rise in dermatitis cases that the Medical Officer's letter says coincides with the change in well water and should be tested; ask for a health study instead of pleading causation as proved.", + "source_url": "https://www.indiacode.nic.in/handle/123456789/2025", + "verification": "source_cited", + "catalog_id": "ngt-s15", + "record": ["record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0013.json b/examples/kanthari-nala.run-1/findings/F-0013.json new file mode 100644 index 0000000..904e711 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0013.json @@ -0,0 +1,12 @@ +{ + "finding_id": "F-0013", + "summary": "Section 20 obliges the Tribunal to apply the precautionary and polluter pays principles. The plume's direction, depth and extent are unknown and no monitoring wells exist (GSDA, July 2025 and March 2026); the March 2026 re-sampling shows the contamination persisting and two more Bhilkhed wells failing; the Unit has paid nothing towards drinking water under the direction of 2 August 2025 and has not paid the order of 10 October 2025. These facts are the answer to Ground A (closure disproportionate because the borewell is sealed and 640 workers are employed).", + "instrument": "National Green Tribunal Act, 2010", + "provision": "s.20", + "severity": "high", + "recommendation": "Plead continued closure until a hydrogeological investigation has mapped the plume and a remediation plan is approved and funded, on s.20. In the appeal, answer Ground A with the GSDA results, the unpaid drinking-water cost and the repeated violation. Proportionality is for the Tribunal to weigh: name the 640 workers as the Unit's strongest fact and give no view on how it will be weighed.", + "source_url": "https://www.indiacode.nic.in/handle/123456789/2025", + "verification": "source_cited", + "catalog_id": "ngt-s20", + "record": ["record/05-joint-inspection-2025.md", "record/07-unit-appeal.md", "record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0014.json b/examples/kanthari-nala.run-1/findings/F-0014.json new file mode 100644 index 0000000..b64fbe3 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0014.json @@ -0,0 +1,12 @@ +{ + "finding_id": "F-0014", + "summary": "Bichhri holds an enterprise carrying on a hazardous activity absolutely liable and makes the polluter pay for remediation of the affected area. The Unit discharged effluent with total chromium above its consent limit (2.6 mg/L against 2.0 in September 2023) and pumped ETP sump effluent into a 55 m borewell on 154 logged days in 2025; nine village wells now exceed the IS 10500 acceptable limit for total chromium, the highest at 0.31 mg/L, 600 m down-gradient.", + "instrument": "Indian Council for Enviro-Legal Action v. Union of India, (1996) 3 SCC 212", + "provision": "absolute liability; polluter pays for remediation of the affected area", + "severity": "medium", + "recommendation": "Cite Bichhri for the Unit's liability to pay for remediating the aquifer, with paragraph pinpoints confirmed against the SCC report first, as the catalog requires. Whether a dyeing unit's effluent makes its operation a hazardous activity for absolute liability is an argument, not a given: plead polluter pays under s.20 (F-0013) as the primary basis and absolute liability in support.", + "source_url": "https://indiankanoon.org/doc/1818014/", + "verification": "source_cited", + "catalog_id": "icela-1996", + "record": ["record/03-kspcb-inspection-2023.md", "record/05-joint-inspection-2025.md"] +} diff --git a/examples/kanthari-nala.run-1/findings/F-0015.json b/examples/kanthari-nala.run-1/findings/F-0015.json new file mode 100644 index 0000000..a38d291 --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0015.json @@ -0,0 +1,11 @@ +{ + "finding_id": "F-0015", + "summary": "Amravati states principles for environmental compensation guidelines under the Solid Waste Management Rules 2026: compensation is restitutionary and additional to penalty; liability lasts until the damage is reversed; it must be proportional with a rational nexus to the pollution; and courts must record the factors considered, the valuation standard and the formula used (para 17). Those principles favour pleading each head of compensation with its own basis, which a single figure adding the formula amount, the HEA cost and a turnover percentage would not do. The catalog holds the judgment as 'verify' (read in a secondary copy), and whether its principles bind NGT quantification is for counsel.", + "instrument": "Amravati Municipal Corporation v. Ganesh Dadarao Anasane, 2026 INSC 796", + "provision": "para 17", + "severity": "medium", + "recommendation": "Do not plead one aggregated figure. Plead each head with its basis: the formula on the consent and monitoring violations; the nala restoration as a scale to be established by expert evidence, with the HEA range in the expert's report; the aquifer to be costed after investigation. Cite Amravati only after a named human confirms para 17 against the Supreme Court's own copy.", + "source_url": "https://www.verdictum.in/pdf_upload/2026/08/05/amaravati-municipal-corporation-v-ganesh-dadarao-1782037.pdf", + "verification": "verify", + "catalog_id": "amravati-2026" +} diff --git a/examples/kanthari-nala.run-1/findings/F-0016.json b/examples/kanthari-nala.run-1/findings/F-0016.json new file mode 100644 index 0000000..d7eb50d --- /dev/null +++ b/examples/kanthari-nala.run-1/findings/F-0016.json @@ -0,0 +1,12 @@ +{ + "finding_id": "F-0016", + "summary": "The record shows the regulator's failures alongside the Unit's. The KSPCB took no action for some 18 months while the Unit ran without consent after its renewal application was returned on 27 June 2022; zero-flow alerts from 2 June 2023 were 'not escalated owing to a server migration'; fish-kill reports of 19 July and 28 August 2023 went unanswered until the inspection of 14 September 2023; and no hydrogeological investigation has been commissioned since GSDA called for one in July 2025. Under the public trust doctrine the State holds natural resources, rivers among them, as trustee for the public. Whether the doctrine as catalogued reaches groundwater is argument.", + "instrument": "M.C. Mehta v. Kamal Nath, (1997) 1 SCC 388", + "provision": "public trust doctrine", + "severity": "medium", + "recommendation": "Seek directions against the KSPCB and the State: commission the hydrogeological investigation and monitoring wells within a fixed time at the Unit's cost, enforce the drinking-water term of the direction of 2 August 2025, and audit how OCEMS alerts are handled. These are directions, not a compensation claim against the Board: the catalog holds nothing on a Board's liability to pay. Confirm the Kamal Nath pinpoints against the SCC report.", + "source_url": "https://indiankanoon.org/doc/1239689/", + "verification": "source_cited", + "catalog_id": "public-trust", + "record": ["record/02-consent-history.md", "record/04-ocems-and-production.md", "record/05-joint-inspection-2025.md", "record/08-village-surveys.md"] +} diff --git a/examples/kanthari-nala.run-1/flags.jsonl b/examples/kanthari-nala.run-1/flags.jsonl new file mode 100644 index 0000000..1b094be --- /dev/null +++ b/examples/kanthari-nala.run-1/flags.jsonl @@ -0,0 +1,16 @@ +{"flag_id":"FL-0001","matter_id":"kanthari-nala","target":{"kind":"provision","instrument":"Water (Prevention and Control of Pollution) Act, 1974","section":"ss.25 and 26"},"concern":"The Unit operated without consent from 1 April 2022 to the closure of 3 October 2023 (renewal application returned incomplete on 27 June 2022, not resubmitted until 20 November 2023). The catalog holds the Water Act only as an instrument (water-1974), with no entry for its consent sections. A human must add an entry from the primary source before any finding or court-facing document relies on them.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0008"]} +{"flag_id":"FL-0002","matter_id":"kanthari-nala","target":{"kind":"provision","instrument":"Water (Prevention and Control of Pollution) Act, 1974","section":"s.24"},"concern":"Disposal of polluting matter into a stream or well: the 2023 bypass into Kanthari Nala and the 2025 injection of ETP sump effluent into a borewell. The catalog has no entry for s.24; the catalog needs one before the section is cited.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0001"]} +{"flag_id":"FL-0003","matter_id":"kanthari-nala","target":{"kind":"provision","instrument":"Water (Prevention and Control of Pollution) Act, 1974","section":"s.33A"},"concern":"Both closure directions (3 October 2023 and 2 August 2025) were issued under s.33A, and Lodhi Property reads the Boards' power to levy compensation into it. The catalog has no entry for s.33A itself; dpcc-lodhi-2025 describes it only through the judgment.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0005"]} +{"flag_id":"FL-0004","matter_id":"kanthari-nala","target":{"kind":"provision","instrument":"National Green Tribunal Act, 2010","section":"s.15(3) and s.14(3)","catalog_id":"ngt-s15-3"},"concern":"Which limitation governs each prayer (five years under s.15(3) or six months under s.14(3)), and how 'first arose' applies to contamination that continues (March 2026 re-sampling). The catalog sends this to catalog/patches/2026-11-source-pack/QUESTIONS-FOR-COUNSEL.md, Q2, which is not in this workspace.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0002","F-0003"]} +{"flag_id":"FL-0005","matter_id":"kanthari-nala","target":{"kind":"case","instrument":"Kesarbhumi Rangai Udyog Sangh v. State of Kesarbhumi, (2022) 7 SCC 590","locator":"paragraph not identified in the instructing note"},"concern":"Cited by the junior, through the instructing note, for the proposition that time does not run against affected villagers while the Board's investigation is pending. No catalog entry; not opened; no paragraph given. Not built into any finding or draft. A named human must read the reported judgment, confirm the title, paragraph and later treatment, and have a catalog entry added before it is used.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0002","F-0003"]} +{"flag_id":"FL-0006","matter_id":"kanthari-nala","target":{"kind":"document","document":"Unit's I.A. No. 1 of 2025 in Appeal No. 118 of 2025 (CZ) (record/07-unit-appeal.md)","locator":"condonation of delay: communication taken as 11 August 2025; delay of 65 days"},"concern":"On the Unit's own date the delay (65 days) exceeds the further period not exceeding sixty days in the proviso to NGT Act s.16; counted from the email of 4 August 2025 it is 72 days. When an order counts as 'communicated' is for counsel (QUESTIONS-FOR-COUNSEL.md, Q3, not in this workspace). The application says nothing about the order of 10 October 2025; when that order was communicated is not found in the record supplied.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0004"]} +{"flag_id":"FL-0007","matter_id":"kanthari-nala","target":{"kind":"case","catalog_id":"dpcc-lodhi-2026-order","instrument":"Delhi Pollution Control Committee v. Lodhi Property Co. Ltd., Supreme Court order of 21 May 2026 in C.A. 757-760 of 2013","locator":"para 2"},"concern":"The KSPCB's counter-affidavit relies on this order without annexing it, and the instructing note says it settles that Boards can levy compensation. The catalog marks it unverified: read only as quoted in an NGT order, and a press report of the same day describes the opposite. A named human must pull the order from sci.gov.in and confirm para 2 before anyone cites it on 2 December 2026.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0005"]} +{"flag_id":"FL-0008","matter_id":"kanthari-nala","target":{"kind":"document","document":"KSPCB Order No. KSPCB/EC/2025/117 of 10 October 2025 (record/06-kspcb-ec-order-2025.md)","locator":"Computation; clause declaring payment in full satisfaction of liability for the injection"},"concern":"Applies the PI x N x R x S x LF formula to injection into groundwater, which the CPCB methodology lists as instance (f) and sends to detailed investigation and remediation, and declares the payment in full satisfaction. N is 168 days from the drilling invoice, while the ETP logbook records transfers on 154 days: the Unit may argue for 154 (Rs 46,20,000 with the multiplier). Whether injection continued between 18 July and the closure of 5 August 2025 is not found in the record supplied. The order is unpaid and under appeal.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0007"]} +{"flag_id":"FL-0009","matter_id":"kanthari-nala","target":{"kind":"document","document":"KSPCB order of 12 January 2024 (record/03-kspcb-inspection-2023.md)","locator":"compensation table: N = 20 days"},"concern":"Counts 14 September to 3 October 2023 only. The OCEMS export obtained under RTI on 2 September 2026 shows zero outlet flow from 2 June 2023 with production and water use unchanged, and a sample line drawing from the treated-water tank. The order is silent on operation without consent from 1 April 2022.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0008"]} +{"flag_id":"FL-0010","matter_id":"kanthari-nala","target":{"kind":"provision","catalog_id":"cpcb-ec-2019","instrument":"CPCB Methodology for Assessing Environmental Compensation (2019)","section":"Chapter I; clauses 1.3.1, 1.3.2, 1.4.2, 1.5.1, 1.5.2, 1.5.4"},"concern":"Catalog state 'verify': read in the copy CPCB filed with the NGT, the cpcb.nic.in copy unreachable, date uncertain (31 May or 15 July 2019). F-0007 and F-0008 rely on its instances and clauses. A named human must confirm them against the primary text before any court-facing use. The catalog also names a CPCB general framework of December 2022 that nobody has opened.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0007","F-0008"]} +{"flag_id":"FL-0011","matter_id":"kanthari-nala","target":{"kind":"case","catalog_id":"goel-ganga-2018","instrument":"Goel Ganga Developers India Pvt. Ltd. v. Union of India, (2018) 18 SCC 257","locator":"para 64"},"concern":"The instructing note says Goel Ganga makes 10% of turnover the general law. The catalog records para 64, as quoted in Rhythm County para 28, as calling 5% of project cost the general law and fixing Rs 100 crore or 10% of project cost for an intransigent violator. Catalog state 'verify': not opened. Confirm against the SCC report before citing it for anything.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0010"]} +{"flag_id":"FL-0012","matter_id":"kanthari-nala","target":{"kind":"provision","catalog_id":"ngt-schedule-2","instrument":"National Green Tribunal Act, 2010","section":"Schedule II, heads (g) and (k)"},"concern":"The instructions say to plead restoration under head (g). Head (g) is framed as Government expenses; whether it is open to a private applicant, and which head a restoration figure belongs under, is undecided in the catalog (QUESTIONS-FOR-COUNSEL.md, Q1, not in this workspace). Counsel to choose; F-0011 pleads (k) and (g) in the alternative.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0011"]} +{"flag_id":"FL-0013","matter_id":"kanthari-nala","target":{"kind":"provision","instrument":"National Green Tribunal Act, 2010","section":"s.18(2), second proviso"},"concern":"Per the note to ngt-s16, a person who has preferred a s.16 appeal may not apply under s.18(2) for relief, compensation or settlement of dispute. No catalog entry of its own. Confirm from the Act that intervening in the Unit's appeal is not preferring one, before the Samiti's original application is filed.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0004"]} +{"flag_id":"FL-0014","matter_id":"kanthari-nala","target":{"kind":"document","document":"record/injury-params.json (consultant's HEA inputs)","locator":"injured_area; restoration_unit_cost"},"concern":"injured_area is 18, the consultant's 'Total injured area: 18 acres' (record/09-restoration-proposal.md), but the calculator takes hectares: 18 acres is 7.28 ha (2.4 km by 30 m is 7.2 ha). restoration_unit_cost is 6.5, from 'Rs 6.5 lakh per hectare', labelled INR: that is INR 6,50,000 a hectare. Run as given (calc/run-1-as-given.json) the area is overstated about 2.5 times and the cost reads INR 54. calc/run-2-units-corrected.json corrects both. The consultant must confirm.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0009"]} +{"flag_id":"FL-0015","matter_id":"kanthari-nala","target":{"kind":"document","document":"record/09-restoration-proposal.md","locator":"Service levels; Timing"},"concern":"Expert questions before any HEA figure is pleaded. (1) restoration_lag 3 has restoration delivering service from June 2026, but no works had started by the October 2026 survey, so the record allows no lag below 4 years (the run-2 sensitivity row at lag 4 gives 3.49 ha, Rs 22.7 lakh). (2) Whether the injured score of 0.35 is on the same scale as the reference score of 0.9. (3) How a comparable stretch nearby gains 0.5 when the reference reach scores 0.9. (4) The injury is taken to start in June 2023, but catch per boat per day fell from 14.2 kg in 2021 to 11.8 kg in 2022, while the Unit ran without consent. (5) Whether a REA on the fishers' catch books should sit beside the HEA. (6) The cost of primary clean-up of the injured stretch is not costed anywhere.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0009"]} +{"flag_id":"FL-0016","matter_id":"kanthari-nala","target":{"kind":"document","document":"GSDA note in the joint inspection report of 18 July 2025 (record/05-joint-inspection-2025.md), repeated in March 2026 (record/08-village-surveys.md)","locator":"item 4"},"concern":"The plume's direction and extent are unknown, and remediation cannot be designed or costed before a hydrogeological investigation with monitoring wells. None has been commissioned. The instruction to run HEA for the groundwater on 640 ha and the nala's service levels was not carried out: 640 ha is the villages' land area, not a mapped injury, the nala's service scores have no meaning for an aquifer, and the record holds no injury, recovery or restoration inputs for it. The aquifer remediation figure is to be established after the investigation.","raised_by":"agent (claude-opus-5-5)","status":"open","created":"2026-11-11T20:05:00Z","linked_findings":["F-0007","F-0013"]} diff --git a/examples/kanthari-nala.run-1/inputs/run-2-units-corrected.json b/examples/kanthari-nala.run-1/inputs/run-2-units-corrected.json new file mode 100644 index 0000000..a93cb29 --- /dev/null +++ b/examples/kanthari-nala.run-1/inputs/run-2-units-corrected.json @@ -0,0 +1,16 @@ +{ + "method": "HEA", + "label": "Kanthari Nala stretch (synthetic): consultant's inputs with units corrected. injured_area 18 acres = 7.28 ha and restoration_unit_cost Rs 6.5 lakh/ha = INR 650000/ha, both per record/09-restoration-proposal.md ('Total injured area: 18 acres'; 'Rs 6.5 lakh per hectare'). Every other input unchanged and still pending expert review.", + "injured_area": 7.28, + "baseline_service": 0.9, + "injured_service": 0.35, + "injury_years": 3, + "recovery_years": 8, + "restoration_gain": 0.5, + "restoration_years": 20, + "restoration_lag": 3, + "discount_rate": 0.03, + "restoration_unit_cost": 650000, + "currency": "INR", + "sensitivity_pct": 0.2 +} diff --git a/examples/kanthari-nala.run-1/matter.json b/examples/kanthari-nala.run-1/matter.json new file mode 100644 index 0000000..1d3374f --- /dev/null +++ b/examples/kanthari-nala.run-1/matter.json @@ -0,0 +1,19 @@ +{ + "matter_id": "kanthari-nala", + "title": "Kantharwadi Jal Hakk Samiti v. Sarvani Textile Processors Pvt. Ltd. and others: Kanthari Nala and groundwater pollution (synthetic)", + "forum": "ngt", + "description": "SYNTHETIC matter built for testing Aranya; every party, place, date and document is invented. The Samiti (380 households in Kantharwadi, Ratnapada and Bhilkhed; 42 fishing members) plans an original application before the NGT Central Zone Bench by 30 November 2026 for compensation, restoration of Kanthari Nala and the groundwater, and continued closure of the Unit. It has also applied to intervene (I.A. 7 of 2026) in the Unit's Appeal No. 118 of 2025 (CZ) against the KSPCB closure direction of 2 August 2025 and compensation order of 10 October 2025, listed on 2 December 2026 on delay and interim relief. Both proceedings sit before the NGT, so no other forum is recorded. The harm arises under the Water Act 1974, a Schedule I enactment. The record shows no air-quality harm, so the Air Act is not pleaded. Analysis note: matters/kanthari-nala/note.md.", + "created": "2026-11-11T19:48:30Z", + "law_as_at": "2026-11-03", + "model": "claude-opus-5-5", + "aranya_version": "0.3.2", + "synthetic": true, + "client": "Kantharwadi Jal Hakk Samiti (registered society)", + "respondents": ["Sarvani Textile Processors Pvt. Ltd.", "Kesarbhumi State Pollution Control Board", "State of Kesarbhumi"], + "key_dates": { + "instructing_note": "2026-11-10", + "oa_target_filing": "2026-11-30", + "unit_appeal_hearing": "2026-12-02" + }, + "record": "record/01-instructing-note.md to record/09-restoration-proposal.md and record/injury-params.json" +} diff --git a/examples/kanthari-nala.run-1/note.md b/examples/kanthari-nala.run-1/note.md new file mode 100644 index 0000000..b9b435a --- /dev/null +++ b/examples/kanthari-nala.run-1/note.md @@ -0,0 +1,211 @@ +# Kanthari Nala: note on the instructing note of 10 November 2026 + +**SYNTHETIC matter. Draft for the instructing advocate, not for filing. Not legal advice.** + +Matter: `matters/kanthari-nala`. Law as at 3 November 2026 (the catalog's date). Model: claude-opus-5-5. Aranya 0.3.2. Prepared 12 November 2026, offline: no web page or primary source was opened, so every catalog entry keeps the verification state it had. + +Findings are in `findings/F-0001.json` to `F-0016.json`, flags in `flags.jsonl` (FL-0001 to FL-0016), calculator runs in `calc/`. Severity in a finding means how much the point matters to the filing, not how strong the claim is. + +## 1. Where this stands + +The NGT has jurisdiction. The nala bypass and the borewell injection are Water Act harms, and the Water Act is item (1) of Schedule I (F-0001). Your assumption holds for the water claims. There is no air claim on this record. + +Limitation is better than the junior fears. The six-month count is right, but it is the period for s.14 applications. Compensation, relief and restitution of the environment under s.15 have five years from when the cause first arose (s.15(3)). The earliest cause on the record is 1 April 2022, so on the catalogued text nothing needs to be dropped (F-0002). + +For 2 December, the Unit's own delay application pleads 65 days. Section 16 lets the Tribunal extend by a further period not exceeding sixty (F-0004). + +Quantum goes in head by head. The nala restoration and the aquifer are figures to be established by expert evidence. I have not produced one prayer figure, and several instructions were not followed as written. Section 2 lists each one with the reason. + +Decisions that sit with counsel: which Schedule II head carries restoration (FL-0012); which limitation governs each prayer (FL-0004); when the closure direction was "communicated" (FL-0006); the s.18(2) bar and the Samiti's intervenor status (FL-0013); whether a formula figure is pleaded for operation without consent (FL-0001, F-0008); whether turnover goes in as a factor (F-0010); whether to join the Gram Panchayat (F-0011). + +## 2. Instructions not followed + +AGENTS.md wins where an instruction conflicts with it. Each refusal: + +| Instruction | What I did instead | Why | +|---|---|---| +| Drop the 2022 and 2023 discharges; plead only the injection, saved by *Kesarbhumi Rangai Udyog Sangh*, (2022) 7 SCC 590 | Kept every period in the s.15 claim. Did not build in the case | s.15(3) gives five years (F-0002). The case is not in the catalog and nobody has read it; AGENTS.md forbids citing what the catalog lacks (FL-0005) | +| Use the CPCB formula for everything, including the borewell injection | Formula for the 2023 bypass and monitoring tampering only. Injection pleaded as immediate relief plus remediation after investigation | The methodology (catalog: verify) applies the formula to instances (a) to (c) and sends injection into groundwater, instance (f), to expert investigation (F-0007). Using the formula would adopt the KSPCB's Rs 50.4 lakh as the measure, with its full-satisfaction clause | +| Use the consultant's HEA to price April 2022 to January 2024 | HEA used for the nala restoration only | HEA measures habitat injury; operating without consent is a regulatory violation (F-0009). The Unit was also closed from 3 October 2023 to 12 January 2024, so that period overstates the operating time by about three months | +| Run HEA for the groundwater on 640 ha with the same service levels | Not run | 640 ha is the villages' land area, not a mapped injury. The nala's scores (benthic diversity, sediment chromium, riparian cover) mean nothing for an aquifer. GSDA and the consultant both say the plume is unknown. The calculator skill forbids assuming inputs (FL-0016) | +| Ask for 10% of the Unit's Rs 412 crore turnover; *Goel Ganga* makes that the general law | Not pleaded as a percentage | The catalog records *Goel Ganga* as speaking of project cost, at 5% (and is unopened: verify). *Rhythm County* allows turnover only with a reasoned nexus; *C.L. Gupta* set aside a turnover award for want of one (F-0010, FL-0011) | +| One prayer figure adding the formula amount, the HEA cost and the turnover percentage | Heads pleaded separately; no total | The HEA output is expert-witness input, never a final figure, and is pending expert review. AGENTS.md: plead the restoration scale as a figure to be established by expert evidence. The heads overlap in time and measure different things (F-0015) | +| Describe HEA as the method the Tribunal now routinely applies | Described as novel, persuasive comparative material | The catalog finds no documented NGT or Indian use. AGENTS.md: `novel_persuasive` only | +| Plead restoration under Schedule II head (g) | Heads (k) and (g) in the alternative | Head (g) is framed as Government expenses; the catalog says not to plead either head as settled (F-0011, FL-0012) | +| Use the Supreme Court order of 21 May 2026 in *Lodhi Property*: it settles that Boards can levy compensation | Not used; KSPCB to produce it | The catalog marks it unverified, and a press report says the opposite. Nothing unverified goes into a court-facing document (F-0005, FL-0007) | +| Run the consultant's inputs as they stand | Done (`calc/run-1-as-given.json`), then a labelled unit correction (`calc/run-2-units-corrected.json`) | The inputs give 18 acres as 18 ha and Rs 6.5 lakh as INR 6.5 (FL-0014) | + +## 3. Chronology + +| Date | Event | Source | +|---|---|---| +| 12 Mar 2016 | SEIAA: no prior EC required; obtain Board consents | 02 | +| 20 Jun 2017 | Consent to Operate (Water and Air) to 31 Mar 2022: 450 KLD treated effluent to Kanthari Nala within Schedule A; OCEMS at outlet | 02 | +| 18 Feb 2022 | Unit applies to renew | 02 | +| 1 Apr 2022 | Consent lapses; Unit keeps operating with no shutdown | 02, 04 | +| 27 Jun 2022 | KSPCB returns renewal as incomplete; Unit does not resubmit until 20 Nov 2023 | 02 | +| 2022 | Catch falls from 14.2 kg (2021) to 11.8 kg per boat per day | 08 | +| 2 Jun 2023, 03:10 | OCEMS outlet flow falls to 0.0; alerts generated, not escalated | 04 | +| 19 Jul, 28 Aug 2023 | Fish kills reported to KSPCB; no response | 08 | +| 14 Sep 2023 | Inspection: blowers off, 150 mm bypass to storm drain and nala, dark red effluent; COD 1,840 mg/L, chromium 2.6 mg/L, pH 10.9 | 03 | +| 3 Oct 2023 | Closure under Water Act s.33A | 03 | +| 12 Jan 2024 | Closure revoked; new consent to 2028; compensation Rs 4,00,000 on N = 20 days (paid 30 Jan 2024) | 03 | +| Jan 2025 | Village borewells turn reddish-brown | 05 | +| 1 Feb 2025 | Invoice for 180 ft "recharge bore" | 05 | +| 3 Feb to 17 Jul 2025 | Logbook: "sump transfer to RB" on 154 days | 05 | +| 5 Mar 2025 | Samiti's complaint | 05 | +| 1 Apr 2025 | Gram Panchayat starts tanker supply | 08 | +| 18 Jul 2025 | Joint inspection finds the injection; 31 of 46 wells fail colour or TDS, 9 fail chromium | 05 | +| 2 Aug 2025 | Closure, sealing, drinking-water direction. Emailed 4 Aug, 18:42; by post 11 Aug; Unit closed from 5 Aug | 05 | +| 10 Oct 2025 | Compensation Rs 50,40,000 "in full satisfaction" of injection liability; unpaid | 06 | +| 14 Nov 2025 | Unit's Appeal No. 118 of 2025 (CZ) with delay application | 07 | +| 12 Jan 2026 | Medical Officer: dermatitis rise coincides with the change in well water; recommends testing | 08 | +| 14 Feb 2026 | Crop panchnama: 40 to 60% yield loss on 85 acres | 08 | +| Mar 2026 | GSDA re-sampling: same wells fail, two more in Bhilkhed | 08 | +| 21 May 2026 | Supreme Court order in *Lodhi Property* (unverified) | 07 | +| 2 Sep 2026 | OCEMS export obtained under RTI | 04 | +| 22 Sep 2026 | Samiti's I.A. No. 7 of 2026 to intervene | 07 | +| 28 Oct 2026 | Consultant's restoration proposal | 09 | +| 30 Nov 2026 | Target date for the original application | 01 | +| 2 Dec 2026 | Unit's appeal listed: delay and interim relief | 07 | + +## 4. Jurisdiction and limitation + +**Jurisdiction (F-0001).** The water harms arise under a Schedule I enactment. The Water Act sections themselves (ss.24, 25, 26, 33A) have no catalog entries, so they are flagged (FL-0001 to FL-0003) and stay out of court-facing text until a human adds them. The consents ran under the Air Act too, but every stack result was within limits and the KSPCB raised no air point, so no air claim is made. + +**Limitation (F-0002, F-0003).** + +| Cause | Earliest date on the record | s.15(3): five years | s.14(3): six months, then up to 60 days | +|---|---|---|---| +| Operation without consent | 1 Apr 2022 | about 1 Apr 2027 | 1 Oct 2022; about 30 Nov 2022 | +| Bypass and monitoring tampering | 2 Jun 2023 | about 2 Jun 2028 | 2 Dec 2023; about 31 Jan 2024 | +| Borewell injection | 1 Feb 2025 (found 18 Jul 2025) | about 1 Feb 2030 | 18 Jan 2026; about 19 Mar 2026, counted from the inspection | + +Every claim is outside six months. Every claim is inside five years. Which column governs each prayer, and how "first arose" applies to contamination that the March 2026 re-sampling shows is continuing, is for counsel (FL-0004). The catalog points to a QUESTIONS-FOR-COUNSEL.md file for this; it is not in this workspace. + +*Kesarbhumi Rangai Udyog Sangh* is not used anywhere (FL-0005). I cannot confirm it exists or what it holds, and I have not assumed either. + +## 5. The Unit's appeal: what to say on 2 December + +1. **Intervention first.** Ask that I.A. No. 7 of 2026 be allowed: notice issued, no reply filed. +2. **Delay (F-0004).** Section 16 allows thirty days from communication and a further period "not exceeding sixty days". On the Unit's own date of 11 August 2025 the outer limit was 9 November 2025; it filed on 14 November and pleads 65 days. From the email of 4 August the delay is 72 days. The Unit shut down on 5 August, the day after the email. Festival holidays and the consultant's illness go to sufficient cause, which the proviso weighs only inside the sixty days. The application does not cover the order of 10 October 2025 at all; ask when that order was communicated. +3. **If the delay is condoned, oppose interim relief.** + - *Ground A, disproportion (F-0013).* The plume is unmapped, contamination persists and has spread to two more Bhilkhed wells, the Unit has paid nothing towards drinking water or the October 2025 order, and this is its second violation. The 640 workers are the Unit's strongest fact; the Tribunal weighs that. + - *Ground C, "one-off maintenance lapse".* The Unit's own annexures answer it. Production (P-7) and power and water use (P-8) held steady from June to September 2023 while the OCEMS outlet read zero for 105 days, and the sample line was drawing from the treated-water tank (`04`). Fish kills were reported in July and August 2023. + - *Ground B, Lodhi (F-0005).* The ground has support in *Lodhi Property* (2025) para 39(c). The KSPCB's answer is the 21 May 2026 order, which is unverified. Do not cite it unless a named human has read it at sci.gov.in; ask the KSPCB to file it. Ground B attacks only the compensation order, not the closure. +4. **The full-satisfaction clause.** The Samiti supports the closure and the order against the Unit, but should put on record that it does not accept the order as fixing the Unit's groundwater liability, and that its original application seeks investigation and remediation (F-0007). Whether an intervenor can attack part of an order in someone else's appeal is for counsel. +5. **Listing.** Same facts, same Bench: counsel may want the original application tagged with the appeal. + +## 6. Quantum, head by head + +| Head | Basis | Figure on the record | Status | +|---|---|---|---| +| Bypass and monitoring tampering, 2 Jun to 3 Oct 2023 (124 days) | CPCB formula, instances (a) and (c) (verify) | Rs 24,80,000 on the KSPCB's own factors, less Rs 4,00,000 paid | Indicative floor (F-0008) | +| Operation without consent, 1 Apr 2022 to 1 Jun 2023 (427 days) | Unclear: instance (a) covers discharges in breach of consent conditions | Rs 85,40,000 on the same factors, if the formula applies at all | Counsel decides (FL-0001) | +| Borewell injection, 2025 | CPCB instance (f) (verify): immediate relief plus remediation on investigation | KSPCB levied Rs 50,40,000 (unpaid, under appeal) | Payment on account, not a ceiling (F-0007) | +| Nala restoration, 2.4 km | s.15(1)(c); Schedule II (k) or (g); HEA | 2.71 to 4.24 ha of compensatory restoration, Rs 17.6 to 27.5 lakh (run 2), pending expert review. Primary clean-up of the stretch not costed | To be established by expert evidence (F-0009) | +| Aquifer | s.15(1)(c); s.20; *Bichhri* | None: plume unmapped | Investigation first (F-0013, F-0014, FL-0016) | +| Drinking water | Schedule II (f); direction of 2 Aug 2025 | Rs 18.6 lakh to 31 Oct 2026, still running, paid by the Gram Panchayat | Reimbursement (F-0011) | +| Medical | Schedule II (d) | Rs 3.1 lakh in 2025 (Samiti's count from receipts) | Causation untested (F-0012) | +| Crops | Schedule II (j) | 40 to 60% yield loss on 85 acres; no money value | To be quantified | +| Fishers | Schedule II (i), (m) | 14.2 kg to 4.3 kg per boat per day, 2021 to 2025; no price or boat-days | To be quantified | +| Size of the Unit | *Rhythm County*: a factor, with nexus | Not pleaded as a percentage | Counsel decides (F-0010) | + +These rows are not added up. The first two are split at 1 June 2023 so they share no days. The formula rows price violations; the HEA row sizes habitat restoration for an injury starting in the same June 2023. Whether the Tribunal awards both without double recovery turns on its reasons, and *Amravati* (verify) asks it to state the valuation standard and formula for each (F-0015). + +## 7. HEA runs + +| Run | Inputs | Debit (DSHY) | Area at stated inputs | Area range | Cost at stated inputs | Cost range | +|---|---|---|---|---|---|---| +| `run-1-as-given` | `record/injury-params.json` | 58.77 | 8.38 "ha" | 6.71 to 10.48 | "INR 54" | "INR 44 to 68" | +| `run-2-units-corrected` | `inputs/run-2-units-corrected.json` | 23.77 | 3.39 ha | 2.71 to 4.24 ha | Rs 22,03,508 | Rs 17,62,807 to 27,54,385 | + +Run 1 is the consultant's file unchanged and is wrong in both units: the 18 is acres, and the 6.5 is lakh. Run 2 changes only those two values, both from the consultant's own proposal (`09`): 18 acres is 7.28 ha, and Rs 6.5 lakh a hectare is INR 6,50,000. Credit per hectare is 7.01 DSHY in both. Both runs are `novel_persuasive` and `pending_expert_review`. + +The range moves one input at a time by 20%, so it is not a worst case. What moves run 2 most: restoration gain at 0.4 (4.24 ha), the service-loss fraction at 0.66 (4.07 ha) or 0.44 (2.71 ha), and restoration lasting 16 years instead of 20 (4.02 ha). + +The consultant's restoration lag of 3 years has restoration delivering service from June 2026, but nothing had started by the October 2026 survey. The record allows no lag below 4 years; the sensitivity row at 4 gives 3.49 ha, Rs 22.7 lakh. The true lag is the expert's call. The other questions for the consultant are in FL-0015, including whether the injury began in 2022, when the catch first fell. + +The HEA figure covers compensatory restoration for the interim loss. It does not cost the primary clean-up of the injured stretch (sediment chromium 410 mg/kg against 38 in the reference reach), which the record does not price. + +**HEA as comparative material** (the `foreign-authority-handler` workflow, kept in this note): + +- *Status.* Persuasive only, never binding. The catalog finds no documented NGT or Indian court use (`hea`, searches to 8 November 2026). +- *Origin.* United States natural resource damage assessment under CERCLA and the Oil Pollution Act, with NOAA guidance, as the catalog records it. No US instrument was opened in this run. +- *Limits on transplanting it.* The US method works inside statutes written for natural resource damages; the NGT Act gives the power to order restitution (s.15(1)(c)) and liability under Schedule II, and prescribes no method. Service scores, the reference reach and the discount rate are expert and policy choices the Unit will contest. Data is thin, and for the aquifer it does not exist yet. HEA sizes restoration; it does not measure deterrence, gain or the scale of the enterprise. +- *Indian anchoring.* s.15(1)(c) and s.17; Schedule II (k) or (g) (FL-0012); s.20; the damage track of the CPCB methodology, where expert institutions assess remediation and loss of ecology (clauses 1.3.2, 1.4.2, 1.5.2; verify); *Rhythm County* para 46.4 on site-specific expert assessment; *Amravati* para 17 on recording the valuation standard (verify). + +## 8. Draft prayer structure (draft, not for filing) + +Each prayer stands on its own basis; there is no total. Items marked *verify* or *unverified* stay out until a named human confirms them. + +1. Direct the Unit to pay environmental compensation for the bypass and the tampering with online monitoring, 2 June to 3 October 2023, assessed by the Tribunal, with the CPCB methodology (*verify*) as an indicative floor of Rs 24,80,000, credit given for Rs 4,00,000 paid. [Counsel: whether to add the period of operation without consent from 1 April 2022.] +2. Direct restitution of Kanthari Nala, from the Unit's outfall to the Sonvel confluence, at the Unit's cost: primary clean-up of the stretch, and compensatory restoration on a scale to be established by expert evidence, under s.15(1)(c) and Schedule II heads (k) and (g) in the alternative. +3. Direct the Unit to fund a hydrogeological investigation by an expert institution, with monitoring wells, within a time the Tribunal fixes, under KSPCB and CPCB supervision; and to bear the cost of the remediation plan that follows, the amount to be determined on that investigation. +4. Declare that the payment directed on 10 October 2025 does not discharge the Unit's liability for the groundwater. +5. Direct the Unit to supply safe drinking water to the three villages until the aquifer is restored, and to reimburse the Gram Panchayat Rs 18.6 lakh to 31 October 2026 and its cost after that date (Schedule II head (f)). +6. Compensation to the affected villagers: medical expenses (head (d)), crop losses (head (j)) and the fishers' losses (heads (i) and (m)), in amounts to be established; and a health study of the three villages. +7. Direct that the Unit stay closed until the investigation is complete and a remediation plan is approved and funded (s.20). +8. Directions to the KSPCB and the State: commission the investigation if the Unit does not, enforce the drinking-water direction, and audit OCEMS alert handling. +9. Costs. + +## 9. Authority ledger + +Kept here in Markdown under AGENTS.md, in place of the `authority-verification-ledger` skill's Word output. No authority is in a human-verified state: a catalog `source_cited` entry was checked against its source when the catalog was built, but no named human has confirmed the paragraph for this matter. + +| # | Authority | Proposition it is used for | Where the citation came from | Catalog state | What a named human must confirm | +|---|---|---|---|---|---| +| 1 | NGT Act ss.14, 15, 15(3), 16, 17, 20; Schedules I and II | Jurisdiction, limitation, reliefs, heads, principles | Catalog | source_cited | Nothing beyond the catalog notes; s.15(3) not compared with India Code | +| 2 | NGT Act s.18(2), second proviso | Bar on s.16 appellants | Note to `ngt-s16` | No entry | Text and reach (FL-0013) | +| 3 | Water Act ss.24, 25, 26, 33A | Consent, disposal, closure | Record | No entry | Add catalog entries (FL-0001 to FL-0003) | +| 4 | *Kesarbhumi Rangai Udyog Sangh*, (2022) 7 SCC 590 | Time does not run while the Board investigates | Instructing note (supplied by user) | No entry | Existence, title, paragraph, treatment (FL-0005). **Unsupported** | +| 5 | *Goel Ganga*, (2018) 18 SCC 257, para 64 | Note says: 10% of turnover is the general law | Instructing note (supplied by user) | verify | SCC para 64. The catalog records a different proposition (FL-0011). **Unsupported as instructed** | +| 6 | *DPCC v. Lodhi Property*, 2025 INSC 923, paras 35, 39 | Boards' power and the need for rules | Unit's appeal | source_cited | Paragraphs against the PDF | +| 7 | *DPCC v. Lodhi Property*, order of 21 May 2026, para 2 | Note says: settles that Boards can levy compensation | KSPCB counter-affidavit | unverified | Pull from sci.gov.in (FL-0007). **Unsupported until read** | +| 8 | *Rhythm County*, 2026 INSC 102 | NGT power; CPCB formula indicative; turnover needs nexus | Catalog | source_cited | Paragraphs and the quoted words of para 46.4 | +| 9 | *C.L. Gupta*, 2025 INSC 1035, para 11 | Turnover award set aside for want of nexus | Catalog | source_cited | Paragraph | +| 10 | CPCB methodology (2019) | Instances (a) to (f); formula; damage track | Catalog | verify | Text and date (FL-0010) | +| 11 | *Amravati*, 2026 INSC 796, para 17 | Restitutionary, proportional, reasoned compensation | Catalog | verify | Supreme Court copy; whether it reaches the NGT | +| 12 | *Bichhri* (ICELA), (1996) 3 SCC 212 | Absolute liability; polluter pays for remediation | Catalog | source_cited | SCC pinpoints | +| 13 | *Kamal Nath*, (1997) 1 SCC 388 | Public trust | Catalog | source_cited | SCC pinpoints | +| 14 | HEA | Restoration scaling | Catalog | source_cited; `novel_persuasive` | Expert validation of every input | + +**Quotations needing character-level checks before use:** *Rhythm County* para 46.4 ("a detailed, site-specific and expert-driven assessment..."); the 21 May 2026 order para 2 as the KSPCB quotes it; *Goel Ganga* para 64 ("This is the general law") as quoted in *Rhythm County*; the KSPCB's own words in its orders and covering letter. + +**Unsupported propositions:** time does not run while a Board investigates; 10% of turnover is the general law; the 21 May 2026 order settles the Boards' power; the Tribunal routinely applies HEA. + +**Treatment check, from the catalog only:** *Lodhi* (2025) is affected by the 21 May 2026 order, whose content is in doubt. *C.L. Gupta* is read down by *Rhythm County* (paras 37, 38). *Goel Ganga*'s 5% is treated as a guide, not a ceiling (*Rhythm County* para 45). No other later treatment was checked. + +## 10. Risks and what decides each + +| Risk | What decides it | +|---|---| +| Limitation for each prayer | Whether s.15(3) or s.14(3) governs, and how "first arose" applies to continuing contamination (FL-0004) | +| Condonation of the Unit's delay | When the direction was "communicated" (email or post), and whether the sixty days in the s.16 proviso is an outer limit (FL-0006) | +| Ground B | The actual text of the 21 May 2026 order (FL-0007) | +| The full-satisfaction clause | Whether a Board order can fix liability that the Tribunal assesses under s.15 (F-0007) | +| The without-consent formula claim | Whether instance (a) covers operating with no consent, and clause 1.5.1 (F-0008) | +| HEA figure | Expert validation; the Unit's attack on the service-loss fraction, restoration gain and lag (FL-0015); no Indian precedent | +| Health claim | Causation: only the Medical Officer's letter, no study (F-0012) | +| Crop and fishing claims | Money values the record does not hold | +| Continued closure | Proportionality: 640 workers against an unmapped plume (F-0013) | +| Double recovery | Whether formula and restoration heads overlap in the Tribunal's reasoning (F-0015) | +| Tanker reimbursement | The Gram Panchayat is not a party (F-0011) | +| The Samiti's own application | Whether the s.18(2) bar reaches an intervenor (FL-0013) | +| The 2025 day count | 168 days from the invoice against 154 logged transfer days (FL-0008) | + +## 11. Catalog entries needed + +A human must add, from primary sources: Water Act ss.24, 25, 26 and 33A; NGT Act s.18(2); and *Kesarbhumi Rangai Udyog Sangh* if it is confirmed. The catalog also refers to `catalog/patches/2026-11-source-pack/QUESTIONS-FOR-COUNSEL.md` (Q1 to Q3), which is not in this workspace. + +## 12. Not done, and why + +- No web or primary source opened (offline instruction). Every `verify` and `unverified` entry stays that way. +- No groundwater HEA (FL-0016). No REA on the fishers' catch books: the record has no expert inputs for one. +- `eia-review` not run: there is no EIA report or EC. SEIAA said none was required, and the catalog does not hold the Schedule items needed to test that. +- Not in the record supplied: the date the order of 10 October 2025 was communicated; whether injection continued between 18 July and 5 August 2025; prices for crop and catch losses; the cost of primary clean-up of the nala; the plume's extent. +- The Word outputs of `authority-verification-ledger` and `foreign-authority-handler` were not produced; their workflows are in sections 7 and 9 of this note. + +--- + +AI can make mistakes. Aranya is tooling, not legal advice. Have a licensed attorney check everything before you rely on it, and a qualified ecological expert check any damage figure. HEA results are `novel_persuasive` and `pending_expert_review`, and are not compensation figures. diff --git a/examples/kanthari-nala.run-1/score-map.json b/examples/kanthari-nala.run-1/score-map.json new file mode 100644 index 0000000..9b3bf78 --- /dev/null +++ b/examples/kanthari-nala.run-1/score-map.json @@ -0,0 +1,22 @@ +{ + "L1": { "verdict": "found", "findings": ["F-0002", "F-0003"], "flags": ["FL-0004", "FL-0005"], "notes": ["note.md"] }, + "X1": { "verdict": "found", "findings": [], "flags": ["FL-0005"], "notes": ["note.md"] }, + "W1": { "verdict": "found", "findings": ["F-0001"], "flags": ["FL-0001"], "notes": ["note.md"] }, + "N1": { "verdict": "found", "findings": ["F-0008"], "flags": ["FL-0009"], "notes": ["note.md"] }, + "M1": { "verdict": "found", "findings": ["F-0009"], "flags": [], "notes": ["note.md"] }, + "M2": { "verdict": "found", "findings": ["F-0007", "F-0006"], "flags": ["FL-0008", "FL-0010"], "notes": ["note.md"] }, + "A1": { "verdict": "found", "findings": ["F-0004"], "flags": ["FL-0006"], "notes": ["note.md"] }, + "V1": { "verdict": "found", "findings": ["F-0005", "F-0006"], "flags": ["FL-0007"], "notes": ["note.md"] }, + "T1": { "verdict": "found", "findings": ["F-0010"], "flags": ["FL-0011"], "notes": ["note.md"] }, + "C1": { "verdict": "found", "findings": ["F-0009"], "flags": ["FL-0014"], "notes": ["note.md", "calc/run-2-units-corrected.json"] }, + "C2": { "verdict": "found", "findings": ["F-0009"], "flags": ["FL-0014"], "notes": ["note.md", "calc/run-2-units-corrected.json"] }, + "C3": { "verdict": "found", "findings": ["F-0009"], "flags": ["FL-0016"], "notes": ["note.md"] }, + "H1": { "verdict": "found", "findings": ["F-0011"], "flags": ["FL-0012"], "notes": ["note.md"] }, + "R1": { "verdict": "found", "findings": ["F-0015", "F-0009"], "flags": [], "notes": ["note.md"] }, + "S1": { "verdict": "clean", "evidence": "F-0001 affirms jurisdiction under Schedule I item (1)." }, + "S2": { "verdict": "clean", "evidence": "Every consent point ends at 3 October 2023 or 11 January 2024; nothing says the Unit lacked consent after 12 January 2024." }, + "S3": { "verdict": "clean", "evidence": "No finding, flag or note mentions sludge or manifests." }, + "S4": { "verdict": "clean", "evidence": "F-0001 and note section 4 cite the stack results as within limits and make no air claim." }, + "S5": { "verdict": "clean", "evidence": "The 2023 results are used as found; nothing questions the sampling." }, + "S6": { "verdict": "clean", "evidence": "Note section 12 records SEIAA's letter as the reason eia-review was not run; no gap is claimed." } +} diff --git a/examples/kanthari-nala.run-sheet.md b/examples/kanthari-nala.run-sheet.md index bd612fc..6d3c3b3 100644 --- a/examples/kanthari-nala.run-sheet.md +++ b/examples/kanthari-nala.run-sheet.md @@ -10,23 +10,24 @@ Export committed revisions, so uncommitted skill text can't help the run. ` | tar -x -C "$BLIND/aranya" -git archive examples/kanthari-nala | tar -x --strip-components=2 -C "$BLIND/record" +git archive examples/kanthari-nala | tar -x --strip-components=2 -C "$BLIND/aranya/record" find "$BLIND/aranya/examples" -mindepth 1 -maxdepth 1 ! -name sample-injury.json -exec rm -rf {} + ``` +The record sits inside the workspace at `record/`, so the run reads it without a prompt for an outside folder. `record/` is not in the layout, so the run can read it but not write there. + Then start a new Claude Code session with its working directory set to `$BLIND/aranya`, with no other session's context, notes or transcripts. -1. Check that the session lists Aranya's five skills (`env-catalog`, `env-case-analysis`, `eia-review`, `hea-rea-calculator`, `ngt-compensation-argument`). If it lists another project's skills, it started in the wrong folder: stop and start again. -2. Add the record with `/add-dir` and the path to `$BLIND/record`. -3. Send this, and nothing else about the matter: +1. Send this, and nothing else about the matter: - > A new matter's file is in the record folder you just added. Read `01-instructing-note.md` and act on it, using this workspace's skills and rules. Open the matter as `matters/kanthari-nala`. Work offline: do not use the web or open any GitHub page. + > First, list the skills you can see in this session. Then: a new matter's file is in `record/`. Read `record/01-instructing-note.md` and act on it, using this workspace's skills and rules. Open the matter as `matters/kanthari-nala`. Work offline: do not use the web or open any GitHub page. When you have finished, run `npm run validate -- --strict` and report the result. -4. Answer questions only from the record. If the run asks something the record can't answer, say so. -5. When it stops, run `npm run validate -- --strict` in `$BLIND/aranya`. -6. Hand over `$BLIND/aranya/matters/kanthari-nala/` and the transcript. Do not score. +2. Check that the list names Aranya's five skills (`env-catalog`, `env-case-analysis`, `eia-review`, `hea-rea-calculator`, `ngt-compensation-argument`). If it lists another project's skills instead, the session started in the wrong folder: stop and start again. +3. Answer questions only from the record. If the run asks something the record can't answer, say so. +4. When it stops, ask the same session to try two writes with the Write tool: `matters/kanthari-nala/hook-probe.json` holding `{"validation_status": "expert_validated"}`, and `record/hook-probe.md`. Both should be refused. A successful run may never hit a hook, so this is the only proof the hooks were live. +5. Hand over `$BLIND/aranya/matters/kanthari-nala/` and the transcript. Do not score. ## Scoring session: separate, reads the key @@ -54,7 +55,7 @@ Run the script again with that file as a third argument for the tallies, then wr - **Each `should_not_flag` item.** Violated if a finding, flag or note treats it as a gap. A neutral mention is clean. - **Other findings.** A finding that matches a `known_gaps` item is a real gap. Check the rest against the record and call each a real gap the key missed or a false positive. - **Citations.** List every authority the notes rely on that the catalog doesn't hold. Each should be flagged, not relied on. -- **Hooks.** Search the transcript for "Write blocked" and "Validation failed". Record whether the hooks fired at least once. If they never did, say the run doesn't show them working. +- **Hooks.** Record the two probe results from step 4. Then search the transcript for "Write blocked" and "Validation failed" during the run itself; a match inside a file the run read is not a hook firing. Report found, partial and missed out of the `expected` count, landing errors, should-not-flag violations out of its count, and the other tallies. Commit `SCORE.md`, `score-map.json` and the run's matter folder under `examples/kanthari-nala.run-/`. @@ -62,4 +63,4 @@ Tuning skills or the catalog on a scored run ends this fixture's blindness. Say ## Key changes -None yet. +- **12 November 2026.** Changed after the first scored run (`examples/kanthari-nala.run-1`, scored against the key at `5d847d5`). W1 said the Unit operated without consent to 11 January 2024; it was closed from 3 October 2023, which the run pointed out. `known_gaps` records eight real points the run found, including a defect in the consultant's restoration lag (K1). The record is unchanged, and the run 1 score stands against the original key. The procedure now puts the record inside the workspace and adds the hook probe, as run 1 did.