zammad-dev field report 4: deleted/renamed paths served for up to an hour; ids rotate across a promotion; path_glob case hint #376
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#376
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
From zammad-dev (abby), build 0.37.1 (
8df22f69). Zammad/Rails + Vue fork; Ruby is owned by de.h-dv.ruby. Observed 2026-10-14 during a ~90-file branch refactor with manygit rm/git mv. Reported over A1X; the text is quoted, not verified.git rm/git mvof ~15 Ruby/TS files (for exampleapp/models/h_dv/mail_account.rbandconfig/routes/h_dv_mail.rb),search_textreturned those paths for many minutes.spec/lib/h_dv/mail_translations_spec.rb) was still returned about an hour later.line_text_unavailable. There was no reply-level lagging or stale marker.daemon.loglines and the reply'sindex_freshnessblock. See also the open "Linux dynamic re-watch" note on index staleness.reconciling→promotion_resolving.changed_symbols/file_outlinereturnedsymbol_not_foundfromcheck_rename/safe_deletea few minutes later.resolve_handleon thestable_handleworked.stable_handle, andsymbol_not_foundsays when the generation changed since the id was minted.review_diffreports tested Ruby code asuntested_change.described_class.execute(...)in specs binds nothing. Same family as #335 and #337; tracked there.resolution_gapsread 0% during a promotion.index_staterides on every tool reply (theindex_state_ofsingle producer), so it should have saidpromotion_resolving. We asked the reporter to confirm.resolution_pendingfor the edit→resolve window.path_globis case-sensitive.app/frontend/*ticket*create*missedTicketCreateContent.vue.empty_populationcould hint at a case mismatch, asseparator_scandoes for separators.Per the operator rule for issue reports: reproduce, find the class, look for synergies (items 1, 2 and 4 are all stale-answer disclosures across index changes), and only then decide on the smallest generic change.
Item 1: reproduced and root-caused on 0.37.2. The fix goes into 0.38.0 (operator decision).
Repro:
code-index languages owner ruby package. The previous generation is nowsupersededand holds a contribution for every file.git rmsome pre-promotion files and commit.After the re-walk (and also after a daemon restart):
filesandfiles_ftsstill hold the deleted paths.search_textreturns them,list_fileslists them,project_overview.filescounts them, andfile_outlinecalls them indexed.git mvyields both the old path and the new one.A file created after the promotion and then deleted is removed within 3 s, which is why a builtin-only repo does not reproduce it.
index_coverage→path_not_foundcomes from the disk check. Thefilesrow is still present.Root cause:
writer.rswrite_delete: when a superseded generation holds the file, it only withdraws the live rows. The anchor and its FTS text are kept for rollback until that generation is collected, which happens at the next promotion.freshness::comparewas given the live-contribution rule, in #327.deleted=0.Fix (lane F): a file gone from disk leaves the index entirely, including what the superseded generation retained. Restoring a deleted file's rows on rollback is wrong anyway; if the file returns, it is re-extracted. Existing ghost anchors are removed by the next reconcile or re-walk after upgrading. The re-walk log will report how many paths it removed.
Side finding:
distribution/registry.v1.jsonpoints de.h-dv.ruby 0.10.1 at…/download/pkg%2Fde.h-dv.ruby%2Fv0.10.1/…, which returns 404. The package-only release has not been made yet; the asset exists only under the v0.37.x releases.Item 1 (deleted or renamed files kept being served after a plugin generation switch) is fixed in v0.38.0 (PR #377).
WriterMsg::Delete).WriterMsg::Withdraw).removed=N.Item 3 is tracked in #337. Items 2, 4 and 5 remain open here.
buildagent referenced this issue2026-10-21 19:43:41 +02:00
Triage 2026-11-09: FIXED: item 1 in b989cf69/3e84d9fa; item 2 (
check_rename/safe_deleteacceptstable_handle); item 3 → #538 (merged #337); item 4 viaresolution_pending/promotion_resolving; item 5 path_glob case hint (e3c5e4af, probed live). The generic 'ids can change' hint is a P4 nicety, noted in #521's friction list.