# Codebook — EVAP system complaints (P0440 study) Written before any complaint in the set was coded. Pool: every NHTSA complaint (received 2015-01-01 to 2026-09-21) whose narrative names the general evaporative emission code P0440 (spellings with a letter O, a space or hyphen after the P, a two-character suffix, or a bare "440"/"0440" after the word code, DTC, error, CEL or fault) OR uses the EVAP wording owners use for it: the word "EVAP" on its own or joined to system / code / leak / monitor / purge / vent / canister / solenoid / valve / sensor / line / hose / emission, or "evaporative emission(s)", "evaporative system", "evaporation system", or "E.V.A.P.". The air-conditioning "evaporator" is not in the pool. Question the coding answers: what did the owner say the EVAP fault turned out to be, and what happened to the car. For each complaint record exactly one CATEGORY and four yes/no FLAGS. ## CATEGORY (one letter) N — Not an EVAP story. The EVAP system, code or light is mentioned only in passing (one item in a list of unrelated repairs or codes, an unrelated main complaint such as brakes, transmission or airbags with an EVAP light among many warnings), or the word refers to the air-conditioning evaporator, or the owner only guesses that an EVAP code "should" have set. C — Cap or filler. The stated cause or fix is the fuel cap (loose, missing, worn, replaced, "check gas cap" message) or the fuel filler neck / filler pipe / filler hose. P — Purge side. The stated cause or fix is the purge valve, purge solenoid, purge control valve or its hose/line. Include Ford's "canister purge valve" recall repair. V — Vent side and canister. The stated cause or fix is the vent valve / vent solenoid, the charcoal (vapor, carbon) canister, the canister filter, or a vent line/hose, including blockages by dust, spiders, water or ice. T — Tank, lines and liquid fuel. The stated cause or fix is the fuel tank, a valve on the tank (rollover valve, inlet check valve, suction jet pump, fuel level sensor as an EVAP cause), fuel lines or fuel vapor lines other than purge/vent hoses, or a leak of LIQUID fuel from the tank area, whether or not a part was named. E — Electrical, sensor or software. The stated cause or fix is the fuel tank pressure sensor, the leak detection pump / ESIM / evaporative system integrity monitor switch, a natural vacuum leak detection switch, wiring or connector, the engine computer, or a software update / reprogramming / flash for the EVAP code. U — Unresolved. An EVAP fault is the story, at least one repair or diagnostic attempt was made, and the narrative ends with the fault not found or the light/code back after the repair, with no final cause stated. (If a final cause IS stated after earlier failed repairs, code that cause and set light_returned_after_repair = yes.) G — EVAP fault named, cause not stated. The EVAP code, light or leak is the story (or the owner's own diagnosis), but no part or cause is named and no failed repair is described: "evap leak", "evap code", "large evap leak", "dealer fixed the evap leak" with no part. Precedence when more than one fits: code the FINAL stated cause — the part or cause the narrative names last as the fix or diagnosis. If two parts were replaced in one visit for the same fault, code the first letter in the order C, P, V, T, E. If repairs failed and no final cause is stated, U. If the narrative is not about the EVAP system at all, N. N beats everything; a real EVAP story with a named cause beats G. Only the EVAP fault counts for the category. A misfire, transmission or engine story with an EVAP code listed among others is N unless the EVAP fault itself is diagnosed or repaired. ## FLAGS (yes/no) stall_or_no_start — the engine stalled, shut off or died while running or idling, OR would not start / was hard to start (including right after refuelling). A warning light or "reduced power" alone is no. fuel_smell_or_liquid_fuel — the owner reports a smell of gasoline / fuel fumes, OR liquid fuel seen leaking, dripping, pouring, pooling or spilling. "Fuel vapors escaping" as an owner's inference without a smell is no. light_returned_after_repair — a repair or part replacement for the EVAP fault was done (by anyone: owner, shop, dealer, recall) and afterwards the same light, code, smell or symptom came back or persisted. Clearing the code without a repair, then the light returning, is no. hard_to_fill_or_tank_deformed — the pump nozzle clicks off early, fuel spits back or will not go in, refuelling is slow or difficult, OR the fuel tank is described as collapsed, crushed, swollen, deformed or under vacuum. ## Output One line per complaint, in the order given: odino,category,stall_or_no_start,fuel_smell_or_liquid_fuel,light_returned_after_repair,hard_to_fill_or_tank_deformed,note note = at most 12 words, no commas, saying what drove the category. ## Codebook fixed before coding The text above was fixed and hashed before any complaint was coded: sha256 ee4895237f0d11f7dbe81e7d0b29738de574404958c916642c16e95e70cad234 at 2026-09-26T17:38:20Z. ## Adjudication rules (written after the two readings, applied to every disagreement and then swept over the agreed codes) R1 N is for complaints in which the EVAP fault is neither diagnosed, nor repaired, nor the owner's own stated concern: an EVAP code or part inside a list of codes/repairs for another failure (stall with crank/cam sensors, ECM, transmission, electrical), or an EVAP part replaced among many parts thrown at an undiagnosed stall. A stall-after-refuelling story the owner or a shop ties to the EVAP or tank system IS an EVAP story (G, T or U). An owner's own separate EVAP concern in a multi-issue complaint is still an EVAP story. R2 A cause that exists only as the owner's theory from research, forums, other owners or a bulletin for another model, with no diagnosis and no repair, is G (EVAP named, cause not stated). A technician-owner's own inspection counts as a diagnosis. R3 Final cause beats U: if the narrative ends with a named cause (diagnosed, recommended or replaced last), code that cause and set light_returned_after_repair = yes when earlier repairs failed. U only when the narrative ends with repairs failed or the fault not found and no cause named. A part replaced that did not hold, followed by nothing else, is U. R4 Root cause beats the C,P,V,T,E order: when the narrative names a root cause (rollover/ORVR valve, valve built into the tank, suction jet pump, collapsed or deformed tank, rotted tank, fuel in the canister from the tank) and other parts were replaced as consequences, code the root cause (T). The C,P,V,T,E order applies only when no root cause is stated. R5 N complaints carry no flags (all four = no): the flags describe the EVAP episode. R6 fuel_smell_or_liquid_fuel = yes for liquid fuel found in an EVAP part ("canister full of fuel", fuel-soaked liner), fuel spitting back at the pump, and any stated gasoline odor; "fumes escaping" as an inference, "abnormal odor" without the word fuel/gas, and an explicit "no odor" are no. R7 light_returned_after_repair needs a repair for the SAME EVAP fault followed by the light, code, smell or symptom again; a recommended repair not done, a recall repair on a different part, or a repair for another system is no. A warranty-extension repair after which the dealer says more EVAP parts are needed is yes. R8 hard_to_fill_or_tank_deformed = yes for a collapsed, deformed, imploded or "vacuum-locked" tank and for tank-vacuum codes described as such (P1450 "unable to bleed up fuel tank vacuum"), as well as for pump click-off and spit-back. R9 Flags count only events the narrative leaves unattributed or ties to the EVAP/fuel story; a stall or no-start the owner attributes to another named part (ignition switch, steering lock, crank sensor, ECM) is no. "Almost died", "reduced power" and "hesitates" are no. R10 A code's description counts as a stated cause only when it names a physical part: P144A / P0443 purge (P); P0446-P0449, P2422, P2419 vent side (V); P0450-P0453 tank pressure sensor and P2401/P2402 leak detection pump (E). Leak and flow codes (P0440, P0441, P0442, P0455, P0456, P0457) name no part: G unless a part is named elsewhere. R11 "Tank vapor vent check valve", "vent valve", "canister vent solenoid", "EVAP drain valve", "pressure switching valve" are V; valves described as inside or part of the fuel tank (rollover, ORVR, inlet check valve, isolation valve integrated in the tank) are T. R12 An EVAP part replaced because another system fouled it (oil from a failed crankcase breather found in the purge line) is coded by the EVAP part replaced (P for the purge valve); the story is an EVAP code diagnosed and repaired. R13 An unspecified "fuel sensor" named as the final diagnosis after failed EVAP repairs is coded E (a sensor), with light_returned_after_repair = yes. GM's P1467 "EVAP purge pump" names a part (P). Consistency pass: after all disagreements were decided, the agreed codes were swept for contradictions with R1-R13; three complaints (11621921, 11639359, 11630358) were changed from a part (P) to G under R2, because the part was named only as a model-wide issue or a recall for other VINs, with no diagnosis or repair on the owner's car. Two earlier decisions whose values had been entered in the wrong column (11708073, 11559277) were corrected before the final file was built. ## Pool history 1. First search (regular expressions over NHTSA's complaint file, received 2015-01-01 to 2026-09-21, 780,071 complaints): every narrative naming P0440 in any spelling (letter O for the zero, a space, hyphen or period after the P, a two-character suffix, or a bare 0440/440 after "code", "dtc", "error", "cel" or "fault") OR using the EVAP wording listed at the top of this codebook: 1,217 complaints. 13 name P0440; the AC "evaporator" is excluded by the pattern. 2. Completeness audit (a second, independent search by a separate reader, before writing): it tried other spellings and part names. (a) 50 complaints use the EVAP wording in forms the first pattern missed ("evaporative" on its own, "e-vap", "evap." with a period); all 50 were added, read and coded by two readers the same way (found_by = completeness audit). Final set: 1,267. (b) 2,641 further complaints name an EVAP part — a purge valve, a gas or fuel cap, a canister, a vent valve, a fuel tank pressure sensor, a leak detection pump — without any EVAP wording or P0440. They were outside the pool defined above; they were coded later as wave 2 under the addendum printed at the end of this file (found_by = wave 2 (EVAP part name)). Final set: 3,908. (c) Documents: 960 further manufacturer communications and 32 recall campaigns about EVAP parts that the index summaries did not describe with EVAP wording or P0440 (none of the 960 summaries names P0440) are listed in p0440-documents.csv as found by the audit and not read. 3. Coding: chunks 1-6 (1,217 complaints) and chunk 7 (the 50 audit additions) were each coded by two independent classification passes working separately from this codebook only. Wave 2 (2,641 complaints, 13 chunks) was coded the same way by two independent passes working from this codebook and the wave-2 addendum below. ## Wave 2 addendum (codebook_wave2), written and hashed before any wave-2 complaint was coded # Codebook addendum — wave 2 (EVAP part named, no EVAP wording, no P0440) Written before any complaint of wave 2 was coded. It adds a pool; it changes nothing else. ## What is unchanged The categories (N, C, P, V, T, E, U, G), their definitions, the four flags (stall_or_no_start, fuel_smell_or_liquid_fuel, light_returned_after_repair, hard_to_fill_or_tank_deformed), the precedence rule, the output format and the adjudication rules R1-R13 are exactly those of codebook.md (sha256 ee4895237f0d11f7dbe81e7d0b29738de574404958c916642c16e95e70cad234) and of the published codebook.txt. They are reproduced at the end of this file only so that a reader of wave 2 has them in one place; the text is copied, not edited. ## Wave-2 pool The completeness audit of the first study (an independent search over the same NHTSA complaint file, received 2015-01-01 to 2026-09-21) listed 2,641 complaints that are NOT in the 1,267 already coded and that name an EVAP part without any EVAP wording and without P0440. Wave 2 is exactly that list (audit_uncoded_odinos.txt, 2,641 ODI numbers). The audit searched the full-text index (SQLite FTS5) of the narratives with these terms, then read the hits and dropped noise it could identify (crankcase/PCV vent valves, the AC evaporator, vapor lock, injector or fuel-rail vapor, radiator/oil/roof-rail/lug caps, fuel-door hinge or latch complaints with no sealing, leak or light story, high-pressure fuel pump, DEF, coolant or RV water tanks): term (audit label) complaints in wave 2 whose audit hit carries the label "purge valve" 1,052 "purge solenoid" 49 "gas cap" (read or sampled) 632 "fuel cap" (read or sampled) 334 "loose cap" 37 "charcoal canister" 141 "vapor canister" 82 "carbon canister" 23 "canister vent" 2 "vent valve" 48 "vent solenoid" 7 "fuel tank pressure sensor" 60 "leak detection" (pump / module) 16 "fuel vapor" 167 "emissions leak" 33 (a complaint can carry several labels) Reproducibility check (regular expressions, case-insensitive, over the same narratives): purge\W{0,3}(?:control\W{0,3})?(?:valve|solenoid) 1,092 \b(?:gas|fuel|gasoline|filler|tank)\W{0,3}caps?\b|\bloose\W{0,3}caps?\b 992 \b(?:vapou?r|charcoal|carbon|purge|fuel)\W{0,3}canisters?\b|\bcanister\W{0,3}(?:vent|purge|filter) 671 \bvent\W{0,3}(?:valve|solenoid)s?\b 65 tank\W{0,3}pressure\W{0,3}sensor 20 leak\W{0,3}detection 23 fuel\W{0,3}vapou?rs?\b 187 emissions?\W{0,3}leak 21 2,478 of the 2,641 match at least one expression; the other 163 were found by the audit's word-proximity search (for example "vent canister kit", "fuel pump ... locking cap", "tank ... pressure ... sensor" separated by other words). The audit estimated 10-15% noise in the gas-cap/fuel-cap part of the list; noise is coded N like any other complaint. ## How the unchanged codebook reads in this pool (no new category, flag or rule) - In wave 2 the complaint never says "EVAP". "EVAP fault" in codebook.md means, here, a fault of an EVAP part: purge valve or solenoid, charcoal/vapor canister and its filter, vent valve or solenoid, fuel cap or filler neck as the seal of the tank, fuel tank pressure sensor, leak detection pump, fuel vapor lines, or the warning light or message tied to one of them ("check gas cap", "check fuel cap", a check-engine light the shop traced to the part). - The same R1 test decides N: the named part is N when it is neither diagnosed, nor repaired, nor the owner's own stated concern — for example one part in a long list replaced at an undiagnosed stall, a cap mentioned in passing, a fuel door that will not open or close with no sealing, leak, smell or light story, a radiator/oil cap, a crankcase (PCV) vent valve. - The G definition applies as written: the EVAP code, light or leak must be the story. A smell of fuel or "fuel vapor" with no EVAP part, cap, tank, vapor line or EVAP light named is not an EVAP story (N). If the tank or a fuel/vapor line from the tank is named as the cause, T. - A recall or campaign repair of an EVAP part on the owner's car is a repair (for example Ford's canister purge valve recall = P). A recall named only as existing for the model, with no diagnosis or repair on the owner's car, is R2 (G). ## Adjudication rules R1-R13 (unchanged; copied from codebook.txt) R1 N is for complaints in which the EVAP fault is neither diagnosed, nor repaired, nor the owner's own stated concern: an EVAP code or part inside a list of codes/repairs for another failure (stall with crank/cam sensors, ECM, transmission, electrical), or an EVAP part replaced among many parts thrown at an undiagnosed stall. A stall-after-refuelling story the owner or a shop ties to the EVAP or tank system IS an EVAP story (G, T or U). An owner's own separate EVAP concern in a multi-issue complaint is still an EVAP story. R2 A cause that exists only as the owner's theory from research, forums, other owners or a bulletin for another model, with no diagnosis and no repair, is G (EVAP named, cause not stated). A technician-owner's own inspection counts as a diagnosis. R3 Final cause beats U: if the narrative ends with a named cause (diagnosed, recommended or replaced last), code that cause and set light_returned_after_repair = yes when earlier repairs failed. U only when the narrative ends with repairs failed or the fault not found and no cause named. A part replaced that did not hold, followed by nothing else, is U. R4 Root cause beats the C,P,V,T,E order: when the narrative names a root cause (rollover/ORVR valve, valve built into the tank, suction jet pump, collapsed or deformed tank, rotted tank, fuel in the canister from the tank) and other parts were replaced as consequences, code the root cause (T). The C,P,V,T,E order applies only when no root cause is stated. R5 N complaints carry no flags (all four = no): the flags describe the EVAP episode. R6 fuel_smell_or_liquid_fuel = yes for liquid fuel found in an EVAP part ("canister full of fuel", fuel-soaked liner), fuel spitting back at the pump, and any stated gasoline odor; "fumes escaping" as an inference, "abnormal odor" without the word fuel/gas, and an explicit "no odor" are no. R7 light_returned_after_repair needs a repair for the SAME EVAP fault followed by the light, code, smell or symptom again; a recommended repair not done, a recall repair on a different part, or a repair for another system is no. A warranty-extension repair after which the dealer says more EVAP parts are needed is yes. R8 hard_to_fill_or_tank_deformed = yes for a collapsed, deformed, imploded or "vacuum-locked" tank and for tank-vacuum codes described as such (P1450 "unable to bleed up fuel tank vacuum"), as well as for pump click-off and spit-back. R9 Flags count only events the narrative leaves unattributed or ties to the EVAP/fuel story; a stall or no-start the owner attributes to another named part (ignition switch, steering lock, crank sensor, ECM) is no. "Almost died", "reduced power" and "hesitates" are no. R10 A code's description counts as a stated cause only when it names a physical part: P144A / P0443 purge (P); P0446-P0449, P2422, P2419 vent side (V); P0450-P0453 tank pressure sensor and P2401/P2402 leak detection pump (E). Leak and flow codes (P0440, P0441, P0442, P0455, P0456, P0457) name no part: G unless a part is named elsewhere. R11 "Tank vapor vent check valve", "vent valve", "canister vent solenoid", "EVAP drain valve", "pressure switching valve" are V; valves described as inside or part of the fuel tank (rollover, ORVR, inlet check valve, isolation valve integrated in the tank) are T. R12 An EVAP part replaced because another system fouled it (oil from a failed crankcase breather found in the purge line) is coded by the EVAP part replaced (P for the purge valve); the story is an EVAP code diagnosed and repaired. R13 An unspecified "fuel sensor" named as the final diagnosis after failed EVAP repairs is coded E (a sensor), with light_returned_after_repair = yes. GM's P1467 "EVAP purge pump" names a part (P). ## Difference from wave 1 in how the readers worked Wave-1 readers had codebook.md only; R1-R13 were written afterwards from their disagreements. Wave-2 readers get codebook.md and this addendum, which carries R1-R13. Wave-2 agreement is therefore reported separately and is not comparable one-to-one with wave 1. ## Wave-2 addendum fixed before coding The addendum above was fixed and hashed before any wave-2 complaint was coded: sha256 fc8e6c6273ce8963c30d88b632237003eec01d0636612bde21d5c1050eebeb85 at 2026-09-28T10:05:52Z. ## Rules added while resolving wave-2 disagreements (applied to every disagreement and swept over the agreed codes) R14 A "check/tighten gas cap" or "check fuel cap" message counts as C only when it is the whole EVAP story, or the cap fixed it. When the story also has a refuelling, tank or fuel-smell symptom and no cause is stated, the message is a symptom: G, or U after a failed repair. R15 A "fuel pump cap" / "locking cap" (the ring or cover sealing the fuel pump module in the top of the tank) is part of the tank (T), not the filler cap (C). Wave-2 consistency pass: after all 599 wave-2 disagreements were decided, the agreed wave-2 codes were swept for contradictions with R1-R15. 235 were changed: 225 from a part (mostly C or P) to U under R3, because both readers had coded the part that was replaced although the narrative says the repair did not hold and names nothing after it; 1 to V (canister named last); 2 to T (R4, R15); 2 to N (R3, the final cause named was the engine); 5 flags light_returned_after_repair from yes to no (R7, reseating or tightening a cap is not a repair). The rule and reason are printed per complaint in the complaints file.