Uh oh!
There was an error while loading. Please reload this page.
feat(tool-scraper): record whether a tap cuts its thread or forms it - #94
Merged
Conversation
A thread former and a cut tap of the same size are the same record: identical DC, TP, SFDM, OAL and LCF, often the same substrate and coating. Nothing downstream could tell them apart, and the two need different hole sizes. `Tool` carries an optional `threadMethod`, `'cutting' | 'forming'`, beside `form` rather than as two more `TOOL_FORMS` values — that vocabulary is Fusion's, and Fusion has no form-tap type. `ToolRecord.threadMethod` holds the same value on a tap and `null` on every other kind; `toolRecord` refuses a tap without one and a non-tap with one. Neither vendor publishes it in a variant table, so it is a per-family fact. Kennametal's three tap families cite its `newTapType` facet, which narrows the same variants endpoint the scrape already calls and answers `3-Forming Tap` for none of them. EMUGE's cite the category split, and the parts state it a second way: every FG01 group carries a `chamfer form` and every FG02 group a `lead taper form`, mutually exclusive across all 551 groups. `emuge_form_taps.csv` scrapes FG02, the vendor's 1,432 cold-forming taps, which went unreached until now — so `forming` is a value the catalog holds rather than one only the type admits. It reads FG01's column labels unchanged, including `length of cutting edge l₂`, which EMUGE keeps on a tool that has no cutting edge. `PRODUCT_LINES` gets no FG02 table: the two categories share their geometry codes and mean different products by them, so a code passes through as the vendor's own. `tests/tap-method.test.ts` walks the family tables and holds every tap family to a cited, in-vocabulary, vendor-stated method, and to both methods being live. `tests/emuge-corpus.test.ts` holds the two EMUGE facts to the chamfer/lead-taper split over a real scrape, which is the only thing that can contradict a fact that no column carries. MariTool's tap leaves and the form/forming rule that classifies them are recorded in `families/maritool.ts` and `docs/MARITOOL_CATALOG.md`, with the mixed-unit problem a tap family there has to solve first. Nothing scrapes them.
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Summary
Tooltakes an optionalthreadMethod,'cutting' | 'forming', besideform.TOOL_FORMSis unchanged — it is Fusion's vocabulary and Fusion has no form-tap type.ToolRecord.threadMethodcarries the same value on a tap andnullon every otherkind.
toolRecordthrows on a tap without one and on a non-tap with one.vendor-statedfact: Kennametal's three fromits
newTapTypefacet, EMUGE's two from theFG01/FG02category split.emuge_form_taps.csv— EMUGE categoryFG02, 1,432 cold-forming taps,previously unreachable. Same column labels and unit as
emuge_taps.csv.PRODUCT_LINE_COLUMNSgainsFG02;PRODUCT_LINESdeliberately gets noFG02table, so a geometry code passes through as the vendor's own.
families/maritool.tsanddocs/MARITOOL_CATALOG.md. Nothing scrapes them.Public package release
pnpm changesetand committed the generated Changeset.no-release-neededlabel and explained why below.@toolpath/tool-supportminor,@toolpath/tool-scraperminor.ToolRecordgains a required property, which breaks a hand-written record literal.toolRecordkeeps it optional on input and is the only documented way to build one,so this is
minor— flagging it in case that surface is judged real.Validation
pnpm checkwith Docker running:openapi:verify,generate:check,lint,knip,build,check-typesall pass.pnpm --filter @toolpath/tool-scraper test: 1036 passed, 177 skipped, 2 failed.Both failures are
maritool-corpus.test.ts(ER25Magainst/^ER\d+$/, BT30 andCAT40), which fail identically on a clean tree at
992cf56and are untouched here.tool-support189,tool-drawing155,viewer252,ui183,app-support21 —all pass.
Both EMUGE tap families were scraped and the corpus tests run against them:
emuge_taps.csvFG01emuge_form_taps.csvFG02Every
FG01part states achamfer formand nolead taper form; everyFG02partthe reverse. All 12,998 rows map to records.