Found during the wave-2 silent-failure review (pre-existing, shared by both stacks — not a parity break).
datastores/mysql.go:205 (collectSecondaryPositions, feeds position search via generateLiteProtoProfile at mysql.go:296): ds.Db.First(&position, id) — the result/error is discarded entirely. A connection failure, context timeout, or missing row silently appends a blank position (positionTitle:"", positionId:0) into a 200 response. Hides every error class; a user cannot distinguish degradation from real data.
Same pattern at mysql.go:404 (collectS1UniformsSecondaryPositions, S1 uniforms route).
Fix shape: check the error; on failure propagate (500 via the route's outage path) rather than emitting fabricated members. Note any fix must respect the golden corpus — error paths are witnessed live, not by goldens, so this is behavior-improving and needs a ruling against PRD #112's parity discipline before changing the happy-path-with-partial-outage shape.
Found during the wave-2 silent-failure review (pre-existing, shared by both stacks — not a parity break).
datastores/mysql.go:205(collectSecondaryPositions, feeds position search viagenerateLiteProtoProfileat mysql.go:296):ds.Db.First(&position, id)— the result/error is discarded entirely. A connection failure, context timeout, or missing row silently appends a blank position (positionTitle:"",positionId:0) into a 200 response. Hides every error class; a user cannot distinguish degradation from real data.Same pattern at
mysql.go:404(collectS1UniformsSecondaryPositions, S1 uniforms route).Fix shape: check the error; on failure propagate (500 via the route's outage path) rather than emitting fabricated members. Note any fix must respect the golden corpus — error paths are witnessed live, not by goldens, so this is behavior-improving and needs a ruling against PRD #112's parity discipline before changing the happy-path-with-partial-outage shape.