Repository navigation
feat(knowledge)!: remove the Review Queue tab - #1519
Merged
Merged
Conversation
The knowledge base's fourth tab, `stale_articles` ('Review Queue · Oldest
First'), is deleted along with its four locale labels, the product-docs
bullets and workflow step that pointed at it, and the runtime block that
measured why its 180-day window was inexpressible.
The tab returned every published article merely sorted least-recently-reviewed
first, so it degraded into "all articles, different sort" as a knowledge base
grows. The open question was whether it should instead become a real 180-day
cut; that is now closed in the other direction.
`last_reviewed_at` is untouched — the publish hook still stamps it, it stays
on the article form, and its locale labels are unchanged.
The day-window guard vocabulary is RETAINED: its subject is every list view
the app ships, not this one tab. Its positive control is reconstructed inline
rather than bound to the deleted view, so the family still proves it reports.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-sales
marked this pull request as ready for review
September 3, 2026 07:14
This was referenced Sep 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #781
Acts on the maintainer ruling of 2026-08-31, recorded on the card. Quoted verbatim, not translated:
The card's title asks whether the tab should become a real 180-day cut. That question is closed in a fourth direction: routes A (keep the ranking), B (wait for a view-filter disjunction) and C (window plus backfill) are all rejected — the feature does not stay.
What is deleted
stale_articles('Review Queue · Oldest First') insrc/views/knowledge_article.view.ts, with the long note arguing why it stayed a ranking. The Knowledge list now ships three tabs.复核队列 · 最久未复核在前,Cola de revisión · Más antiguos primero,レビューキュー · 古い順, and the English one.stale_articlesruntimedescribeintest/forecast-current-quarter-view.test.ts(~180 lines) that measured why the honest 180-day window was inexpressible. It retires because its subject retired, not to make anything green; every assertion in it bound to the deleted view, and its first statement (listViews.find(...)!.view) would have thrown at collection time.What is kept, deliberately
The day-window guard vocabulary stays in full. This is the load-bearing judgement of the change, so it is argued rather than asserted.
DAY_WINDOW_PATTERNS/dayWindowClaimsand family 2 ofbreachesOffail any view whose label promises an N-day window while its filter carries no matching{N_days_ago}.stale_articleswas its origin, not its subject: the derivation runs over every list view the app ships. Deleting it because it went quiet is precisely the failure this repo has paid for before.One assertion in that family was genuinely tab-bound — it fed
breachesOfthe filterstale_articlesactually shipped. It is reconstructed inline rather than deleted, because it is the only assertion that drives a day-window breach end to end: without it the derivations over the shipped stack pass over an empty set, and a broken reporter would be indistinguishable from a clean tree. The filter still goes through the realfilterTokensrather than a hand-written[].RETIRED_180D_LABELSand the false-positive controls are kept as historical strings.古い順sits one character from the firing古い (>180日)— a property of the strings, not of the view.Both halves proved by ablation, not by assertion
Each leg: mutate → prove it reached disk (anchored
grep -con injected and removed text, plusgit hash-objectagainst the HEAD blob) → run → restore → prove restoration by hash equality.published_articles→Published (>90d)). Result: red, 2 failed / 19 passed, namingcrm_knowledge_article.published_articles is labelled en:"Published (>90d)" but its filter carries no {90_days_ago}. It caught a view that is not the deleted one — which is the whole claim.>Ndpattern. Result: red on exactly the two control assertions.Both restorations verified:
git diff HEADempty and the blob hash equal to the HEAD blob.Explicitly NOT in scope
last_reviewed_atand #779's bulk-stamping fix are data-layer assets and are untouched — the publish hook still stamps the field, it stays on the article form under Engagement, and its four locale labels are unchanged. Whether the field itself should retire is a separate question and is not answered here. #779 is not addressed by this PR.References the ruling's file surface did not name
Found by a tree-wide grep and cleaned, since a dangling reference to a deleted view is the likely way this lands red:
content/docs/service/knowledge-base.mdxand both Chinese faces — the bullet, the "four tabs" count, and the Retire stale content workflow step that told readers to work the queue from the top. Rewritten to describe the review-date semantics without claiming a navigation surface the app no longer offers. The Traditional face spells it複核佇列, which a Simplified-only grep does not reach.docs/feature-inventory.mdKB-006.src/views/opportunity.view.ts— a cross-reference that would otherwise point at a view that no longer exists.Left alone on purpose: the
复核队列incontent/docs/sales/leads.*is the lead duplicate-review queue, an unrelated feature.Bounded in-place fix, declared
The view file's header docblock listed three views for a file shipping four. Removing the
staleline would have left it listing two of three, so the missingmy draftsline was added in the same edit — same defect class, same file, mechanical.Verification
pnpm verify(validate && typecheck && lint && lint:i18n-gate && hygiene && hygiene:tokens && build && test) green on the final commit85c7d01:Token ratchet: interaction layer 37,534 → 37,426. No re-anchor is owed — checked with the script's own exported
anchor(), not by hand:anchor(37426) = 40,000, equal to the committed ceiling, and the script re-anchors only whenanchor(reading) < ceiling. Ceilings untouched.A changeset is included (
minor, following theslim-nav-one-entry-per-destinationprecedent for a navigation-surface change) rather than askip-changesetlabel, since this is a user-visible removal.🤖 Generated with Claude Code
Generated by Claude Code
Generated by Claude Code