del for a staged delete of an UNTRACKED path — status shows 1 del, post says POSTNONE
be delete of an untracked path writes a delete row that the classifier buckets as del, so be status shows a pending deletion (139 ok, 1 del) — but the path was never in the baseline tree, so the committed tree is unchanged and be post refuses POSTNONE: no changes since base. status and post DISAGREE: a phantom del. The classifier must not bucket a delete row whose path is absent from the baseline as del (a no-op delete changes no tree). Reproduces in BOTH native be and jab — a shared classifier fault. be/ JS shared/classify.js. Spec Dirty / DELETE; method Issues.
~/todo/GET-037/test, the beagle-ext-tests sub): sub/selflink/run.sh is UNTRACKED — absent from the baseline tree (be tree:?<tip> has no sub/selflink).be delete sub/selflink/ unlinked it and wrote delete sub/selflink/run.sh rows.be status → del sub/selflink/run.sh / 139 ok, 1 del; jab status identical.be post '…' → POSTNONE: no changes since base (Error: POSTNONE + Error: NONE); jab post → same POSTNONE. The deleted file was never in baseline, so the committed tree == baseline → genuinely no change.1 del (a pending change) while post finds none — the del is a phantom.shared/classify.js::classifyMerge — the if (d) { push({ bucket: "del", … }) } branch buckets a delete row del REGARDLESS of baseline presence. A delete row whose path is NOT in the baseline (!b) is a no-op (post's tree == baseline) and must not surface as del.be status/be post show the SAME disagreement, so it is a shared classifier fault, not JS-only.del for a delete row whose path is absent from the baseline — status agrees with post (no phantom del, no surprise POSTNONE).be delete of an untracked path leaves a clean status (nothing staged), matching that post sees no change.be/ JS shared/classify.js. REUSE the existing base-tree lookup (b) — a delete is real only when the path is in baseline. Keep classifyDir (ls/lsr) consistent.be delete <untracked> → status shows del but post POSTNONEs (RED); after the fix status is clean and matches post.del AND commits.classifyMerge's if (d) branch, bucket del ONLY when the path is in baseline (b present); a delete row for a non-baseline path is dropped (no row), so status matches post's POSTNONE.be delete <untracked> arguably should not WRITE a delete row at all (nothing tracked to stage; DELETE: "an already-absent path is an OK no-op") — but the classifier must be robust regardless.be delete <untracked> → status 1 del but post POSTNONE. RED.classify.js:327 (classifyMerge staged-del branch) already computes inBase: !!b — status must DROP the row when !b (today only fold-decide.js:131 consumes the flag, for unlink); keep the gitlink-del branch (:318, inBase:true) as-is.classifyDir (classify.js:548 — the ls/lsr if (d) bucket lacks even the baseline lookup).del + commits; phantom gone; native parity.be/ JS classifier (the working scope here).~/todo/GET-037/test). Deliverable: a non-baseline delete row is never classified del; status agrees with post.classify.js:327 pushes bucket:"del" for any delete row (tags inBase:!!b but never gates on it); no fixing commit in the logs.