{"locator":"npm:@freighttech/terminal-tracking","path":"@freighttech/terminal-tracking","npm":"@freighttech/terminal-tracking","github":null,"repoPath":"FreightTech/open-mercato-modules#main/packages/terminal-tracking","kind":"module","type":"community","enterprise":false,"title":"Terminal Tracking","summary":"Polls container terminal APIs (Navis N4, GCT and BCT in Gdynia) and turns container moves into tracking events.","whenToUse":"Use when you need gate-in, discharge and departure times for containers at Navis N4 terminals or the Gdynia terminals.","whenNotToUse":null,"category":"warehouse-shipping","tags":["containers","terminals","tracking","ports"],"providers":[{"name":"navis-n4","label":"Navis N4"},{"name":"gct","label":"Gdynia Container Terminal"},{"name":"bct","label":"BCT Gdynia"}],"moduleIds":["terminal_tracking"],"requires":[{"raw":"@freighttech/ui","resolvesTo":"npm:@freighttech/ui"},{"raw":"@open-mercato/events","resolvesTo":"npm:@open-mercato/events"},{"raw":"@open-mercato/scheduler","resolvesTo":"npm:@open-mercato/scheduler"}],"replaces":[],"slotConflicts":[],"renamedFrom":[],"supersededBy":null,"alternatives":[],"status":"active","listed":true,"featured":false,"license":{"spdx":"MIT","kind":"osi","mismatch":true},"version":{"latest":"0.7.3","preview":null,"publishedAt":"2026-10-08","integrity":"sha512-KMKigatMEXe8UCmhTFL2a8zqKiwZKY/4qb0W1dveeuf8iUia/Pn9ZVn/YbzVLDY/U9GvyRo0Y3WcBgRp9NE7lQ==","installableFrom":"2026-10-13","gitRef":"d53705e1620697b0975e03eb0dcd423442078e80","recommended":{"0.9":null,"0.8":null,"next":null}},"identity":{"builtFrom":"none","claimed":false,"source":"npm"},"compat":{"builtFor":{"range":"0.6.2","kind":"exact-pin","lines":[]},"lines":{"0.9":{"status":"broken","step":"typecheck","omVersion":"0.9.0","moduleVersion":"0.7.3","at":"2026-10-29T09:03:43Z","receipt":"r_20261029_e11d09d3f7ca","since":"2026-10-29","precheck":null,"patches":[],"finding":"Typecheck failed: TS2339 Property 'grouping' does not exist on type 'PerspectiveSettings'."}},"verifiedOn":[]},"anatomy":{"version":"0.7.3","coverage":"full","counts":{"entities":4,"tables":4,"migrations":5,"routes":11,"publicRoutes":0,"aclFeatures":6,"eventsEmitted":14,"eventsConsumed":1,"backendPages":2,"frontendPages":0,"widgets":0,"workers":0,"cli":0,"aiTools":0,"aiAgents":0,"extends":0},"lists":{"aclFeatures":["terminal_tracking.terminal_configs.view","terminal_tracking.terminal_configs.manage","terminal_tracking.tracking_jobs.view","terminal_tracking.tracking_jobs.manage","terminal_tracking.events.view","terminal_tracking.settings.manage"],"eventsEmitted":["terminal_tracking.tracking_job.created","terminal_tracking.tracking_job.updated","terminal_tracking.tracking_job.failed","terminal_tracking.tracking_job.poll_failed","terminal_tracking.terminal_event.created","terminal_tracking.terminal_event.updated","terminal_tracking.equipment.gate_in","terminal_tracking.equipment.discharged","terminal_tracking.equipment.loaded","terminal_tracking.transport.departed","terminal_tracking.equipment.empty_ready","terminal_tracking.equipment.holds_cleared","terminal_tracking.equipment.holds_updated","terminal_tracking.equipment.stops_updated"],"eventsConsumed":["terminal_tracking.tracking_job.created"],"env":["TERMINAL_TRACKING_DEBUG"],"hosts":["api2.baltichub.com","bhctapicustomers.b2clogin.com","incos.pl"],"tables":["terminal_tracking_terminal_configs","terminal_tracking_jobs","terminal_tracking_events","terminal_tracking_vessel_visits"],"publicRoutes":[],"credentials":[],"backendPages":["/backend/terminal-configs","/backend/terminal-containers"]},"callout":"ADDS 4 TABLES · 11 ROUTES (0 PUBLIC) · 6 PERMISSIONS · EMITS 14 EVENTS","diff":{"from":"0.7.2","added":{"tables":0,"routes":0,"publicRoutes":0,"aclFeatures":0,"env":[],"hosts":[]},"removed":{"tables":0,"routes":0,"aclFeatures":0}}},"signals":{"receipt":{"0.9":"broken","0.8":"untested","next":"untested"},"fit":{"0.9":"ok","0.8":"drift","next":"drift"},"anatomy":"full","supplyChain":{"status":"ok","reasons":[]},"hygiene":{"status":"warn","failing":["license-mismatch","peer-exact-pin"]},"maintenance":{"status":"current","lastRelease":"2026-10-08","catchUpDays":null},"declaredVsObserved":{"status":"match","notes":[]}},"tier":"listed","quality":null,"agentPolicy":{"0.9":{"decision":"refuse","reasons":[{"code":"BROKEN","text":"Broken at typecheck on 0.9 since 29 Oct."},{"code":"THIRD_PARTY","text":"Third-party code runs with access to all tenants' data."}]},"0.8":{"decision":"ask","reasons":[{"code":"THIRD_PARTY","text":"Third-party code runs with access to all tenants' data."},{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on 0.8."}],"consentText":"Install @freighttech/terminal-tracking@0.7.3"},"next":{"decision":"ask","reasons":[{"code":"THIRD_PARTY","text":"Third-party code runs with access to all tenants' data."},{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on next."}],"consentText":"Install @freighttech/terminal-tracking@0.7.3"}},"install":{"cli":"yarn mercato module add @freighttech/terminal-tracking@0.7.3 --allow-third-party","cmm":"npx create-mercato-module install @freighttech/terminal-tracking@0.7.3","needsAllowThirdParty":true,"moduleFlag":null},"stats":{"downloads30d":495,"stars":2},"sigil":{"glyph":"2323000","phase":87,"publicRoutes":false},"links":{"page":"https://modules.openmercato.com/m/@freighttech/terminal-tracking","md":"https://modules.openmercato.com/m/@freighttech/terminal-tracking.md","json":"https://modules.openmercato.com/m/@freighttech/terminal-tracking.json","facts":"https://modules.openmercato.com/m/@freighttech/terminal-tracking/v/0.7.3/facts.json","npm":"https://www.npmjs.com/package/@freighttech/terminal-tracking","repo":"https://github.com/FreightTech/open-mercato-modules","docs":null},"addedAt":"2026-10-23","updatedAt":"2026-10-29T09:22:28Z","_meta":{"com.openmercato.modules/installable":{"0.9":"0.7.3","0.8":"0.7.3","next":"0.7.3"}},"facts":{"factsVersion":1,"extractor":{"engine":"@open-mercato/cli@0.9.0 extractModuleFacts","factsContractVersion":2,"catalog":"om-modules rentgen 1","durationMs":255},"package":{"locator":"npm:@freighttech/terminal-tracking","name":"@freighttech/terminal-tracking","version":"0.7.3","integrity":"sha512-KMKigatMEXe8UCmhTFL2a8zqKiwZKY/4qb0W1dveeuf8iUia/Pn9ZVn/YbzVLDY/U9GvyRo0Y3WcBgRp9NE7lQ==","source":"npm-tarball","gitRef":"d53705e1620697b0975e03eb0dcd423442078e80"},"gate":{"installable":true,"needsModuleFlag":false,"reason":null,"modules":[{"id":"terminal_tracking","src":true,"dist":true}]},"kind":"module","license":{"value":"MIT","kind":"osi","mismatch":true,"sources":{"packageJson":"MIT","licenseFile":"MIT","moduleInfo":"PROPRIETARY","integrationTs":null}},"omPeers":{"@open-mercato/cache":"0.6.2","@open-mercato/core":"0.6.2","@open-mercato/events":"0.6.2","@open-mercato/queue":"0.6.2","@open-mercato/scheduler":"0.6.2","@open-mercato/shared":"0.6.2"},"dependencies":{"fuse.js":"^7.1.0","undici":"^7.25.0"},"agentsMd":false,"readmeExcerpt":"# @freighttech/terminal-tracking\n\nContainer-terminal tracking for the FreightTech FMS. Polls container terminal\nAPIs (Navis **N4** family; Baltic Hub / BCT Gdańsk first), normalizes the\nresults into events, and emits them — with per-terminal runtime configuration,\nperiodic polling, and terminal matching.\n\n## Features\n\n- **Per-terminal config** (`TerminalConfig`) — base URL, OAuth, encrypted\n  credentials, rate limits, and matching identifiers (UN/LOCODE, BIC, SMDG,\n  name aliases). One row per tenant per terminal. Optional `proxyUrl` routes\n  that terminal's API calls through an HTTP forward proxy (to egress from a\n  whitelisted IP); empty = direct.\n- **Config-driven N4 adapter** — a single `N4TerminalAdapter` serves all N4\n  terminals; endpoint paths default from the adapter. Auth via Azure B2C ROPC\n  (password grant) or client-credentials.\n- **GCT adapter** (`adapterType: 'gct'`) — Gdynia Container Terminal's bespoke\n  FastAPI. Path-minted token replayed in the `Authorization` header; a container\n  *snapshot* mapped to arrival + departure milestones. GCT has no per-movement\n  mode field, so the mode/milestone is inferred from the cargo direction\n  (`CntrStatus`) and a land-transport sentinel: a purely land (\"TLO\") move is a\n  truck gate-in (`GTIN` / TRUCK); a vessel import arrival is a discharge (`DISC` /\n  VESSEL); a vessel export arrival is a truck gate-in (`GTIN` / TRUCK). Departures\n  are `DEPA` with the mode set by direction (export = VESSEL load, import = TRUCK\n  gate-out). `testConnection` mints a token **and** probes `GetContainerDetails`\n  so a wrong base URL / rejected token is caught, and batch polling runs with a\n  small bounded concurrency (the service rate-limits the batch, not each call).\n  Gross/net weight and dangerous-goods (`DGs`) / damage codes are preserved in\n  `rawData` and surfaced in the container-details drawer when present.\n- **BCT adapter** (`adapterType: 'bct'`) — Bałtycki Terminal Kontenerowy (Gdynia)\n  via the **INCOS** platform (`https://incos.pl`). Plain HTTP **Basic** auth\n  (`authType: 'basic'`, `auth_config: { username, password }`). Read-only Phase 1:\n  the `GET /rest-container/container/{nbr}` snapshot is mapped to the container's\n  **current** milestone (mirroring N4's `/unit` current-state row). The arrival is\n  refined by `in_yard_type` to match N4's vocabulary: a vessel arrival is a\n  discharge (`in_yard_date` → `DISC` / `equipment.discharged`), a truck/rail\n  arrival is a gate-in (→ `GTIN` / `equipment.gate_in`); once the box leaves,\n  `out_yard_date` → `DEPA`. Emitting only the current milestone (not both arrival\n  and departure every poll) lets a departed job reach `completed` and drop from\n  the poll set — otherwise `isFullyDeparted` never trips and the box is polled\n  forever, burning the daily budget. Each event carries an explicit import/export\n  direction (`category`) and a real mode of transport (`in/out_yard_type`: T/V/R →\n  TRUCK/VESSEL/RAIL). **Holds:** INCOS flags customs status binarily, so a\n  customs `HOLD` is mapped by direction to the shared `lib/holds` catalogue code\n  (`CUSTOMS IMPORT HOLD` / `CUSTOMS EXPORT HOLD` — both `critical`) instead of an\n  unclassified raw string; the `;`-separated `constraint` codes (e.g. `STOPUC`)\n  pass through and stay unclassified until INCOS documents them. This is coarser\n  than N4 (which distinguishes ~20 impediment codes incl. permission-vs-hold),\n  but flows through the same `impediments[]` field, availability logic, and hold\n  badges.\n  **Data parity with N4:** TimeIn (`in_yard_date`), TimeOut (`out_yard_date`),\n  seals (`seal1..4`), holds (`customs_status`+`constraint`), and VGM are all\n  present. The one gap is a separate **Loaded** timestamp — the INCOS container\n  lookup has no dedicated load-onto-transport time (N4's \"Loaded\" column), so no\n  `LOAD` event / `loadedAt` is emitted (it lives only in the rail endpoint).\n  **Vessel ETA/ATA (Phase 2, done):** INCOS keys a visit by (vessel, voyage), so\n  the mapping packs both in","modules":[{"id":"terminal_tracking","title":"Terminal Tracking","description":"Container terminal (Navis N4) tracking with per-terminal config, periodic polling, and events.","requires":[],"ejectable":null,"data":{"entities":[{"id":"terminal_tracking:terminal_config","table":"terminal_tracking_terminal_configs","src":{"file":"src/modules/terminal_tracking/data/entities.ts","line":38}},{"id":"terminal_tracking:terminal_tracking_job","table":"terminal_tracking_jobs","src":{"file":"src/modules/terminal_tracking/data/entities.ts","line":143}},{"id":"terminal_tracking:terminal_event","table":"terminal_tracking_events","src":{"file":"src/modules/terminal_tracking/data/entities.ts","line":221}},{"id":"terminal_tracking:terminal_vessel_visit","table":"terminal_tracking_vessel_visits","src":{"file":"src/modules/terminal_tracking/data/entities.ts","line":326}}],"migrations":{"count":5,"first":"2026-06-09","last":"2026-08-05"},"customEntities":3},"http":{"routes":[{"method":"GET","path":"/api/terminal_tracking/terminal-configs","requireAuth":true,"requireFeatures":["terminal_tracking.terminal_configs.view"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/terminal-configs/route.ts","line":137}},{"method":"POST","path":"/api/terminal_tracking/terminal-configs","requireAuth":true,"requireFeatures":["terminal_tracking.terminal_configs.manage"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/terminal-configs/route.ts","line":138}},{"method":"PUT","path":"/api/terminal_tracking/terminal-configs","requireAuth":true,"requireFeatures":["terminal_tracking.terminal_configs.manage"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/terminal-configs/route.ts","line":139}},{"method":"DELETE","path":"/api/terminal_tracking/terminal-configs","requireAuth":true,"requireFeatures":["terminal_tracking.terminal_configs.manage"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/terminal-configs/route.ts","line":140}},{"method":"POST","path":"/api/terminal_tracking/terminal-configs/test","requireAuth":true,"requireFeatures":["terminal_tracking.terminal_configs.manage"],"hasOpenApi":false,"src":{"file":"src/modules/terminal_tracking/api/terminal-configs/test/route.ts","line":14}},{"method":"GET","path":"/api/terminal_tracking/tracking-jobs","requireAuth":true,"requireFeatures":["terminal_tracking.tracking_jobs.view"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/tracking-jobs/route.ts","line":241}},{"method":"POST","path":"/api/terminal_tracking/tracking-jobs","requireAuth":true,"requireFeatures":["terminal_tracking.tracking_jobs.manage"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/tracking-jobs/route.ts","line":242}},{"method":"DELETE","path":"/api/terminal_tracking/tracking-jobs","requireAuth":true,"requireFeatures":["terminal_tracking.tracking_jobs.manage"],"hasOpenApi":true,"src":{"file":"src/modules/terminal_tracking/api/tracking-jobs/route.ts","line":243}},{"method":"GET","path":"/api/terminal_tracking/tracking-jobs/details","requireAuth":true,"requireFeatures":["terminal_tracking.tracking_jobs.view"],"hasOpenApi":false,"src":{"file":"src/modules/terminal_tracking/api/tracking-jobs/details/route.ts","line":12}},{"method":"POST","path":"/api/terminal_tracking/tracking-jobs/poll","requireAuth":true,"requireFeatures":["terminal_tracking.tracking_jobs.manage"],"hasOpenApi":false,"src":{"file":"src/modules/terminal_tracking/api/tracking-jobs/poll/route.ts","line":14}},{"method":"GET","path":"/api/terminal_tracking/vessel-visits","requireAuth":true,"requireFeatures":["terminal_tracking.events.view"],"hasOpenApi":false,"src":{"file":"src/modules/terminal_tracking/api/vessel-visits/route.ts","line":38}}],"legacyRouteFiles":0,"authResolved":1},"security":{"aclFeatures":["terminal_tracking.terminal_configs.view","terminal_tracking.terminal_configs.manage","terminal_tracking.tracking_jobs.view","terminal_tracking.tracking_jobs.manage","terminal_tracking.events.view","terminal_tracking.settings.manage"],"setupDefaultRoleFeatures":true},"events":{"emits":[{"id":"terminal_tracking.tracking_job.created","src":{"file":"src/modules/terminal_tracking/events.ts","line":5}},{"id":"terminal_tracking.tracking_job.updated","src":{"file":"src/modules/terminal_tracking/events.ts","line":6}},{"id":"terminal_tracking.tracking_job.failed","src":{"file":"src/modules/terminal_tracking/events.ts","line":7}},{"id":"terminal_tracking.tracking_job.poll_failed","src":{"file":"src/modules/terminal_tracking/events.ts","line":8}},{"id":"terminal_tracking.terminal_event.created","src":{"file":"src/modules/terminal_tracking/events.ts","line":11}},{"id":"terminal_tracking.terminal_event.updated","src":{"file":"src/modules/terminal_tracking/events.ts","line":12}},{"id":"terminal_tracking.equipment.gate_in","src":{"file":"src/modules/terminal_tracking/events.ts","line":15}},{"id":"terminal_tracking.equipment.discharged","src":{"file":"src/modules/terminal_tracking/events.ts","line":16}},{"id":"terminal_tracking.equipment.loaded","src":{"file":"src/modules/terminal_tracking/events.ts","line":17}},{"id":"terminal_tracking.transport.departed","src":{"file":"src/modules/terminal_tracking/events.ts","line":18}},{"id":"terminal_tracking.equipment.empty_ready","src":{"file":"src/modules/terminal_tracking/events.ts","line":23}},{"id":"terminal_tracking.equipment.holds_cleared","src":{"file":"src/modules/terminal_tracking/events.ts","line":26}},{"id":"terminal_tracking.equipment.holds_updated","src":{"file":"src/modules/terminal_tracking/events.ts","line":31}},{"id":"terminal_tracking.equipment.stops_updated","src":{"file":"src/modules/terminal_tracking/events.ts","line":36}}],"subscribes":[{"event":"terminal_tracking.tracking_job.created","src":{"file":"src/modules/terminal_tracking/subscribers/terminal-tracking-job-initial-poll.ts","line":5}}]},"ui":{"backendPages":[{"path":"/backend/terminal-configs","requireFeatures":["terminal_tracking.terminal_configs.view"]},{"path":"/backend/terminal-containers","requireFeatures":["terminal_tracking.tracking_jobs.view"]}],"frontendPages":[],"widgets":0,"extensionHosts":18},"background":{"workers":[],"cli":[]},"ai":{"tools":[],"agents":[]},"config":{"credentials":[],"env":[{"name":"TERMINAL_TRACKING_DEBUG","src":{"file":"src/modules/terminal_tracking/lib/logger.ts","line":10}}]},"network":{"hosts":[{"host":"api2.baltichub.com","src":{"file":"src/modules/terminal_tracking/backend/terminal-configs/page.tsx","line":104},"confidence":"high"},{"host":"bhctapicustomers.b2clogin.com","src":{"file":"src/modules/terminal_tracking/backend/terminal-configs/page.tsx","line":106},"confidence":"low"},{"host":"incos.pl","src":{"file":"src/modules/terminal_tracking/backend/terminal-configs/page.tsx","line":126},"confidence":"high"}],"undeclared":[]},"extends":[],"omImports":{"@open-mercato/core":{"modules/directory/utils/organizationScope":["resolveOrganizationScopeForRequest"]},"@open-mercato/events":{".":["EventBus"]},"@open-mercato/shared":{"lib/api/scoped":["createScopedApiHelpers"],"lib/auth/server":["getAuthFromRequest"],"lib/boolean":["parseBooleanToken"],"lib/commands":["CommandBus","CommandHandler","CommandRuntimeContext","registerCommand"],"lib/crud/factory":["makeCrudRoute"],"lib/di/container":["AppContainer","createRequestContainer"],"lib/encryption/find":["findOneWithDecryption"],"lib/i18n/context":["useT"],"lib/i18n/server":["resolveTranslations"],"lib/openapi":["OpenApiRouteDoc"],"lib/openapi/crud":["CrudOpenApiOptions","createCrudOpenApiFactory","createPagedListResponseSchema","defaultCreateResponseSchema","defaultOkResponseSchema"],"modules/encryption":["ModuleEncryptionMap"],"modules/events":["createModuleEvents"],"modules/registry":["ModuleInfo"],"modules/setup":["ModuleSetupConfig"]}},"collisionKeys":{"moduleId":"terminal_tracking","tables":["terminal_tracking_terminal_configs","terminal_tracking_jobs","terminal_tracking_events","terminal_tracking_vessel_visits"],"aclFeatures":["terminal_tracking.terminal_configs.view","terminal_tracking.terminal_configs.manage","terminal_tracking.tracking_jobs.view","terminal_tracking.tracking_jobs.manage","terminal_tracking.events.view","terminal_tracking.settings.manage"],"eventIds":["terminal_tracking.tracking_job.created","terminal_tracking.tracking_job.updated","terminal_tracking.tracking_job.failed","terminal_tracking.tracking_job.poll_failed","terminal_tracking.terminal_event.created","terminal_tracking.terminal_event.updated","terminal_tracking.equipment.gate_in","terminal_tracking.equipment.discharged","terminal_tracking.equipment.loaded","terminal_tracking.transport.departed","terminal_tracking.equipment.empty_ready","terminal_tracking.equipment.holds_cleared","terminal_tracking.equipment.holds_updated","terminal_tracking.equipment.stops_updated"],"backendRoutes":["/backend/terminal-configs","/backend/terminal-containers"]},"publicRoutes":0,"glyph":"2323000","lint":[{"code":"license-mismatch","severity":"warn","message":"License sources disagree (packageJson: MIT, licenseFile: MIT, moduleInfo: PROPRIETARY, integrationTs: none).","anchor":"i1 §7.4","src":null},{"code":"peer-exact-pin","severity":"warn","message":"Peer dependencies pin Open Mercato exactly (@open-mercato/cache 0.6.2 and 5 more). Use a range.","anchor":"i2 §1.4","src":null},{"code":"no-agents-md","severity":"info","message":"No AGENTS.md in the package.","anchor":"g3 §3","src":null},{"code":"peer-range-behind","severity":"info","message":"Built for 0.6.2 does not include Open Mercato 0.9.0.","anchor":"w4 §4.2","src":null},{"code":"route-openapi","severity":"info","message":"4 of 11 routes have no openApi.","anchor":"module-development.md:44","src":{"file":"src/modules/terminal_tracking/api/terminal-configs/test/route.ts","line":14}},{"code":"ships-tests","severity":"info","message":"The tarball ships test files.","anchor":null,"src":null},{"code":"version-drift","severity":"info","message":"ModuleInfo says 0.1.0, package.json says 0.7.3.","anchor":null,"src":{"file":"src/modules/terminal_tracking/index.ts","line":4}}]}],"coverage":{"routesAuthResolved":1,"integrationTs":"absent"},"diagnostics":[]},"receipts":[{"schema":1,"id":"r_20261029_e11d09d3f7ca","cellKey":"e11d09d3f7cae24ecbe0f42edec715cb91bd4d8e89acc9ed80155f1afb1907a6","module":{"locator":"npm:@freighttech/terminal-tracking","version":"0.7.3","integrity":"sha512-KMKigatMEXe8UCmhTFL2a8zqKiwZKY/4qb0W1dveeuf8iUia/Pn9ZVn/YbzVLDY/U9GvyRo0Y3WcBgRp9NE7lQ=="},"om":{"line":"0.9","version":"0.9.0","createApp":"create-mercato-app@0.9.0","preset":"classic"},"harness":{"version":"c349007c2b5b","node":"24.21.0","yarn":"4.17.1","runner":"ubuntu-latest","mode":"realistic","patches":[]},"baseline":{"status":"verified","receipt":"r_20261029_e5f612bd10e0"},"requiresInstalled":["lib:@freighttech/ui@0.14.9"],"steps":[{"name":"scaffold","status":"pass","sec":3,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"install","status":"pass","sec":69,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"add","status":"pass","sec":41,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"generate","status":"pass","sec":21,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"typecheck","status":"fail","sec":105,"signature":"cbf0e69568167a024fe25d3eaf3fb4290881fe85","excerpt":"node_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(218,47): error TS2339: Property 'grouping' does not exist on type 'PerspectiveSettings'.\nnode_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(218,68): error TS7006: Parameter 'g' implicitly has an 'any' type.\nnode_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(362,5): error TS2353: Object literal may only specify known properties, and 'grouping' does not exist in type 'PerspectiveSettings'.","file":"node_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts","line":218},{"name":"initialize","status":"pass","sec":38,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"build","status":"fail","sec":198,"signature":"edcd710e6836f9d700b542e0de9881083a7a6312","excerpt":"node_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(218,47): error TS2339: Property 'grouping' does not exist on type 'PerspectiveSettings'.\nnode_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(218,68): error TS7006: Parameter 'g' implicitly has an 'any' type.\nnode_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts(362,5): error TS2353: Object literal may only specify known properties, and 'grouping' does not exist in type 'PerspectiveSettings'.\nFailed to type check.","file":"node_modules/@freighttech/ui/src/backend/dynamic-table/utils/perspectiveTransforms.ts","line":218},{"name":"start","status":"skipped","sec":null,"signature":null,"excerpt":null,"file":null,"line":null},{"name":"smoke","status":"skipped","sec":null,"signature":null,"excerpt":null,"file":null,"line":null}],"result":{"status":"broken","failedStep":"typecheck","alsoFailed":["build"],"classification":"module-fail","quarantineUntil":null},"transition":{"from":null,"to":"broken","confirmed":true},"run":{"id":40842502780,"attempt":2,"url":"https://github.com/open-mercato/modules/actions/runs/40846683223/job/123356065664","at":"2026-10-29T09:03:43Z","durationSec":530},"attestation":null}],"rules":[{"id":"LST-1","pass":true,"detail":"Descriptor is valid."},{"id":"LST-2","pass":true,"detail":"Stable version exists and is not deprecated."},{"id":"LST-3","pass":true,"detail":"src/modules and dist/modules pair found."},{"id":"LST-4","pass":true,"detail":"License: MIT (sources differ)."},{"id":"LST-5","pass":true,"detail":"No known malware or open critical advisory."},{"id":"LST-6","pass":true,"detail":"Name reviewed at merge."},{"id":"VER-1","pass":false,"detail":"Broken at typecheck on 0.9 since 29 Oct."},{"id":"VER-2","pass":true,"detail":"Fits statically on 0.9: ok."},{"id":"VER-3","pass":true,"detail":"Supply chain: ok."},{"id":"VER-4","pass":true,"detail":"No lint errors."},{"id":"VER-5","pass":false,"detail":"Not checked: neither the descriptor nor the tarball names a repository."}],"maintainers":["fto-admin"]}
