del for a staged delete of an UNTRACKED path — status shows 1 del, post says POSTNONEbe 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.