Skip to content

[2nd · after #41] Fix top-sellers-in-category: rank against real sales, and stop reading buy-box position as idle stock - #35

Open
fiharet34 wants to merge 4 commits into
joomcode:mainfrom
fiharet34:fix/top-sellers-rank-against-real-sales
Open

fiharet34 wants to merge 4 commits into
joomcode:mainfrom
fiharet34:fix/top-sellers-rank-against-real-sales

Conversation

@fiharet34

@fiharet34 fiharet34 commented Sep 8, 2026 •

Copy link
Copy Markdown
Contributor

Five defects in top-sellers-in-category, each reproduced against production data before the file was touched and re-verified afterwards.

1. The panel charts a misreading. The "registered versus with sales" comparison reads mostly as buy-box position, not dead stock: on a catalog product only the buy-box holder shows sales. A live run reported "dois terços do estoque está parado" — two thirds of that gap is attribution. Since #33 made the panel mandatory this renders every run, not occasionally.

2. Nothing checked the estimate against real sales. RAIZENTECH ranked 5th on an estimate implying ~72,000 sales a year against 352 actually completed; LINDOPETS ranked 36th on a single listing with zero sales. Excluding them surfaced four real businesses they had been displacing.

3. Shops sharing a brand were never grouped, which changes who leads.

4. The Vendedor name linked to a JoomPulse page that does not exist — the dashboard link template is for listing ids, so a URL built from a shopId 404s. (Carries #41; see below.)

5. Ranked sellers could leave the table for a numbered list or prose, which defeats the point: the seller saves this table and pastes it back next period to compare row against row.

Merge order

This branch contains #41, merged in to resolve a clash on the same two passages. Merge #41 first — then this diff shrinks to its own work. If this one lands first, use a merge commit rather than squash, or #41 will conflict despite its content already being present.

🤖 Generated with Claude Code

…g buy-box position as idle stock

Checks each estimate against the seller's real completed sales before placing a
row: shops with no real trading history move out of the ranking into a labelled
group, while a real business whose estimate runs high stays in with a caveat.
Groups shops sharing a name stem and says whether that changes the leader,
without asserting common ownership.

Reframes the registered-versus-with-sales comparison as sellers only. On a
catalog product only the buy-box holder shows sales, so the product gap measures
buy-box position rather than idle inventory - and since the panel now renders
every run, an unlabelled version of that chart would mislead every time.

Also: medal as a column so the saved baseline can reproduce its own panel, the
growth column named for the metric it carries, full money precision in a
ranking, a missing-value rule, a width fallback that drops columns rather than
the table, retry after a pause, and an empty result separated from an outage.
fiharet34 pushed a commit to fiharet34/joompulse-skills that referenced this pull request Sep 10, 2026
Takes joomcode#35 whole for this skill — it is more thorough than the store-wide fix
made here today. It finds five store-wide fields where that found two, adding
monthly growth, international shipping and the listing-type counts, and it
explains why the listing-type counts do not add up to the category product
count.

Two things from this branch are re-applied on top, both because a live run
showed the difference:

The store-wide columns say so in the header. joomcode#35 states the scope in prose
("say which figures are category-scoped and which are store-wide"), and that is
the form that did not hold: a leaderboard still put a monthly category figure
beside a yearly store-wide one with nothing marking them apart, and a reader
would conclude the category had collapsed. The header label survived where the
prose did not, so both are kept and all six store-wide columns now carry it.

The download offer stays conditional. joomcode#35 predates that fix and promises a
`.csv` / `.xlsx` in six places; no host is guaranteed to write files, and this
portal cannot, so it would promise a download that never arrives and the
trackers depend on that file being the baseline.
pulse://overview rule 10 restricts the beginner-products/{id} template to
listing ids and skips seller grain. This skill asks for the Vendedor name to
link to "the seller's JoomPulse page". In a live run every one of those links
was built from a shopId and 404ed — nine dead URLs in a single answer.

Two places were promising it:

- the presentation rule in the body, which now states the name is plain text
  and why;
- the frontmatter description, which advertised "...listing-type counts, with
  a JoomPulse link each". That one matters more than it looks: descriptions
  are injected into the system prompt for skill selection, so the promise
  shipped even in conversations where this skill never loaded.

Nothing else changes — no column, threshold or ranking rule is touched.
fiharet34 pushed a commit to fiharet34/joompulse-skills that referenced this pull request Sep 14, 2026
- top-sellers-in-category: every seller ranked is a row of one markdown
  table -- never a numbered list, never leaders-in-table with the rest in
  prose, because the user saves this table and pastes it back next period.
  The Vendedor name is plain text: sellers have no JoomPulse dashboard
  page, so a URL built from a shopId 404s. Also restores PR joomcode#37's language
  wording, which the local merge of joomcode#35 resolved away.

- seller-overview-tracker: the monthly sales trend is the change in
  JoomPulse's estimated sales, not real Mercado Livre data, so it carries
  the estimate caveat and never appears among the real figures. No seller
  link, for the same reason as above.

- top-brand-position-tracker: a category has no JoomPulse page either, so
  the table carries no category link.

Not pushed, and no PR for the table-shape rule: joomcode#35 rewrites the same
region of that file, so a PR now would mean resolving the same conflict
twice.
Nikita Andreev and others added 2 commits September 14, 2026 13:53
"Never abandon the table for a seller-by-seller list" left room for the shapes a live
pass actually produced: the leaders in the table with the rest in prose, and a trailing
"and below them, X, Y, Z" sentence. Both look like a leaderboard and neither can be
compared row against row next period, which is the whole reason the seller keeps it.

Names those shapes and ends with the check to apply before answering.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Both branches rewrote the same two passages. Resolved by keeping this branch's
fuller field list and its added guidance, and taking joomcode#41's correction throughout:
sellers have no JoomPulse page, so the Vendedor name is plain text and the
description no longer promises a link per seller.

Merging it here rather than leaving the clash for whoever lands these second.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@fiharet34
fiharet34 marked this pull request as ready for review September 14, 2026 12:58
@fiharet34 fiharet34 changed the title Fix top-sellers-in-category: rank against real sales, and stop reading buy-box position as idle stock [2nd · after #41] Fix top-sellers-in-category: rank against real sales, and stop reading buy-box position as idle stock Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant