Build a useful investigation brief
Define the representation matrix
List empty fields, quoted empty strings, supported null markers, omitted fields, and whitespace-only text. For each affected operation, define the expected assignment or rejection. Use a known existing value in update cases so unchanged, cleared, and defaulted outcomes can be distinguished without relying on appearance.
Trace each transformation separately
Capture parsed values, normalization, default selection, validation, and destination assignment for each case. Identify the earliest stage where two expected meanings become indistinguishable. Keep field-specific rules visible; a text description and a structured optional value may legitimately need different treatment despite looking blank in the source.
Test one contract-preserving change
Change the implicated parsing or assignment rule in a controlled comparison and repeat the matrix. Check neighboring valid text and explicit nonempty updates. Do not broaden the fix to treat all blanks as null unless that behavior matches the documented contract for every field placed in scope.
What to carry forward
Produce a brief containing the matrix, first collapsing transformation, and outcomes of the bounded change. Record any undecided semantics as a product decision rather than choosing them through implementation convenience. A fix is supported when distinct intended meanings survive to assignment and users can recognize the result.
Technical background: PostgreSQL documentation.
Keep the decision with the work.
Use a Work Item in Aglet to record the problem, the evidence you have, and the next decision. Add an owner and priority, then keep updates in the discussion so the next person can follow the reasoning.
Create an account See the product workflow