fix(telemetry): retain every reported public feature name - #27
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review in progressClawSweeper is reviewing this revision. This supersedes any previous blocked status. |
|
Codex review: needs maintainer review before merge. Reviewed October 1, 2026, 1:02 AM ET / 05:02 UTC. ClawSweeper reviewWhat this changesValidate and canonicalize reported public feature names before storage, removing the 32-name cutoff and adding regression coverage and documentation. Merge readiness✅ Ready for maintainer review This repair is still necessary: current main truncates feature lists before public-name filtering. The proposed patch fixes that ordering without widening the accepted vocabulary, and no blocking correctness defect was found. Priority: P2 Review scores
Verification
How this fits togetherThe telemetry Worker receives update checks with optional feature inventories. It validates those inventories, records bounded Analytics Engine rows, and returns the latest OpenClaw version. flowchart TD
A[Update check with optional inventory] --> B[Recording quota]
B --> C[Bounded upload reader]
C --> D[Identifier validation and public vocabulary]
D --> E[Analytics Engine row]
B --> F[Latest version response]
E --> F
Before mergeNone. Agent review detailsSecurityNone. Review metrics
Technical reviewBest possible solution: Retain every validated public name within the existing upload and storage budgets, preserving the current privacy filter and row format. Do we have a high-confidence way to reproduce the issue? Yes, source establishes a focused path: submit more than 32 public names, or place unknown names before valid names in sort order. Main truncates before filtering; this review did not execute that path. Is this the best way to solve the issue? Yes, applying the existing public-name filter during parsing removes the defective cutoff and duplicate filtering pass while preserving privacy and storage contracts. AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning medium; reviewed against fe0d0b706c0d. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
|
Feature reports with more than 32 public IDs silently lose valid channel, provider, and plugin names because parsing sorts and truncates raw IDs before public-vocabulary filtering. A synthetic report containing 33 public plugin names stores only 32 while preserving
pluginsEnabled: 33; unknown names and case duplicates can also consume the cutoff.Move identifier validation, public-vocabulary filtering, case folding, and deduplication into the payload parser, then remove the 32-name cutoff and the receiver's duplicate filtering pass. Regression tests cover all three lists, malformed/private names, the sibling feature-body reader, and unchanged update responses. A worst-case UTF-8 byte-budget test guards future vocabulary refreshes against the existing upload and Analytics Engine blob limits.
Validation at
3d5e1e6ee5f477f6b7647eed365e9cc4ebf0ef3f:npm test -- test/payload.test.ts test/feature-stats.test.ts test/latest-version.test.ts test/allowlist.test.ts test/update-result.test.ts: 204 tests passed.npm run typecheckandgit diff --checkpassed.npm ci, vocabulary consistency, typecheck, full tests, and Wrangler dry-run build. The production deploy job was skipped.Production LOC: +7/-13 (net -6). Tests: +99/-7. Documentation: +6.
Draft for review. Collection fields, deployment configuration, consent, and update availability are unchanged. The existing PR workflow runs checks and a dry-run build; deployment remains guarded to non-PR events on
main.