Cleaned lap-level data from FastF1 race sessions. One row per driver × lap. Renames Bronze columns to snake_case, casts nanosecond timings to seconds, and derives the validity / track-status flags consumed across the warehouse. is_valid_lap = TRUE excludes pit laps, deleted laps, SC/VSC laps, and lap 1.
Known bronze defect, not corrected here (F18, one race): 2020_1 (Austrian GP) is numbered 1-68 in bronze laps while the race ran 71. Race control puts the CHEQUERED flag on lap 71 and race_scheduled_laps says 71; on the 2026-09-25 dev build it is the only race with a chequered flag on record whose laps end short of it. The audit also found Jolpica’s pit laps for that race running 4 to 5 laps ahead of stg_pits (not re-run since). The two other feeds are ingested separately from the lap feed and neither passes through stg_laps, so the fault is in bronze ingestion, outside this layer. Effect, that race only: lap_number runs behind the true lap (3 laps at the flag, 4-5 by the pit-lap comparison), so the lap_number feature reads early and fuel_mass_kg, which counts down from lap_number at the scheduled 71-lap rate (about 1.55 kg per lap), reads about 1.5 kg per lap of offset too heavy (4.6 kg at 3 laps). The fix is a re-pull of 2020_1.
TRUE when TrackStatus contains a 4 (SCDeployed). Full safety car only VSC is is_vsc_lap and a red flag is is_red_flag_lap. Decode matches stg_track_status, ground-truthed against the bronze Message column.
TRUE when TrackStatus contains a 5 (Red). A red flag is a full session stoppage physically the opposite of a VSC lap (tyres go to ambient, and may legally be changed), so it is flagged separately rather than folded into either neutralisation flag. The three flags together are the neutralised set the layer excludes; consumers should test all three, not a pair.
is_valid_lap
boolean
Yes
Clean-lap flag: timed (lap_time_s > 0), not a pit lap, not deleted, accurate, lap_number > 1, and no SC/VSC/red flag (TrackStatus contains no 4–7).
⌘I
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Off The Pace • docs","colors":{"primary":"#e40404"},"logo":{"light":"https://media.brand.dev/ac2251a0-45a7-490a-8cdc-9a56a531fba3.svg","dark":"https://media.brand.dev/ac2251a0-45a7-490a-8cdc-9a56a531fba3.svg"},"appearance":{"default":"dark"},"icons":{"library":"lucide"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Launch App","icon":"gauge","href":"https://off-the-pace.web.app"},{"anchor":"Docs","icon":"book","href":"https://offthepace.mintlify.app/"},{"anchor":"GitHub Repository","icon":{"name":"github","library":"fontawesome"},"href":"https://github.com/JustinClarke/off-the-pace"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"offthepace","hasAudioNarration":false,"actualSubdomain":"offthepace","customDomains":[],"gitSource":{"type":"github","owner":"justinclarke","repo":"off-the-pace","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adc8f0d6db7bf41f81e6ca4","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Transform","count":141},{"language":"default","tag":"Model Reference","count":96},{"language":"default","tag":"Intermediate","count":53},{"language":"default","tag":"App","count":44},{"language":"default","tag":"Macros","count":26},{"language":"default","tag":"Data","count":20},{"language":"default","tag":"Start Here","count":17},{"language":"default","tag":"Marts","count":17},{"language":"default","tag":"Staging","count":17},{"language":"default","tag":"Machine Learning","count":15}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"justinsavioclarke@outlook.com","showHelpButton":true}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"@media (max-width: 639px){.mobile-grid>div{grid-template-columns:repeat(2, minmax(0, 1fr))!important;gap:0.5rem!important}.mobile-grid>div>a,.mobile-grid>div>div{padding:0.75rem!important;min-height:auto!important}.mobile-grid>div h2,.mobile-grid>div h3,.mobile-grid>div .font-semibold{font-size:0.875rem!important;line-height:1.25rem!important}.mobile-grid>div p{font-size:0.75rem!important;line-height:1rem!important;margin-top:0.25rem!important}.mobile-grid>div svg{width:1.25rem!important;height:1.25rem!important;margin-bottom:0.5rem!important}}"}],"page":{"pagePath":"reference/models/stg/stg_laps","slug":"/reference/models/stg/stg_laps","pageMetadata":{"title":"stg_laps","sidebarTitle":"stg_laps","description":"Cleaned lap-level data from FastF1 race sessions.","href":"/reference/models/stg/stg_laps"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Cleaned lap-level data from FastF1 race sessions.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Mermaid,Note,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(Note,{children:[`Part of the `,_jsx(_components.a,{href:`/transform/families/staging`,children:`Staging`}),` family.`]}),`\n`,_jsx(_components.p,{children:`Cleaned lap-level data from FastF1 race sessions. One row per driver × lap. Renames Bronze columns to snake_case, casts nanosecond timings to seconds, and derives the validity / track-status flags consumed across the warehouse. is_valid_lap = TRUE excludes pit laps, deleted laps, SC/VSC laps, and lap 1.\nKnown bronze defect, not corrected here (F18, one race): 2020_1 (Austrian GP) is numbered 1-68 in bronze laps while the race ran 71. Race control puts the CHEQUERED flag on lap 71 and race_scheduled_laps says 71; on the 2026-09-25 dev build it is the only race with a chequered flag on record whose laps end short of it. The audit also found Jolpica’s pit laps for that race running 4 to 5 laps ahead of stg_pits (not re-run since). The two other feeds are ingested separately from the lap feed and neither passes through stg_laps, so the fault is in bronze ingestion, outside this layer. Effect, that race only: lap_number runs behind the true lap (3 laps at the flag, 4-5 by the pit-lap comparison), so the lap_number feature reads early and fuel_mass_kg, which counts down from lap_number at the scheduled 71-lap rate (about 1.55 kg per lap), reads about 1.5 kg per lap of offset too heavy (4.6 kg at 3 laps). The fix is a re-pull of 2020_1.`}),`\n`,_jsx(Heading,{level:`2`,id:`lineage`,children:`Lineage`}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n stg_laps --> dim_corners\n stg_laps --> dim_drivers\n stg_laps --> fct_ghost_car_pace\n stg_laps --> fct_ghost_race_finish\n stg_laps --> fct_stint_features\n stg_laps --> fct_telemetry_deltas\n stg_laps --> int_constructor_structural_pace\n stg_laps --> int_corner_skill_residuals\n stg_laps --> int_driver_race_skill_loro\n stg_laps --> int_event_corrections\n stg_laps --> int_lap_air_state\n stg_laps --> int_lap_fuel_state\n stg_laps --> int_lap_normalized_pace\n stg_laps --> int_lap_residual_decomposed\n stg_laps --> int_lap_thermal_proxy\n stg_laps --> int_pit_loss_circuit\n stg_laps --> int_sc_hazard_history\n stg_laps --> int_sector_residual_decomposed\n stg_laps --> int_stint_geometry\n stg_laps --> int_synthetic_teammate\n stg_laps --> mart_corner_skill_driver\n stg_laps --> stg_lap_tyre_qa\n stg_laps --> stg_sector_times\n stg_laps --> stg_weather\n style stg_laps fill:#e40404,stroke:#e40404,color:#fff`}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Property`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Layer`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`staging`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Family`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/families/staging`,children:`Staging`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Contract enforced`}),_jsx(_components.td,{children:`No`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`26 tests`}),` `,_jsx(_components.a,{href:`/transform/ci/overview`,children:`guard`}),` this model - 15 generic, 11 singular.`]}),`\n`,_jsx(Heading,{level:`2`,id:`columns`,children:`Columns`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Nullable`}),_jsx(_components.th,{children:`Tests`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lap_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})}),`, `,_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`unique`})})]}),_jsxs(_components.td,{children:[`Surrogate key {season}`,_jsx(_components.em,{children:`{race_id}`}),`{driver}_{lap_number}.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`race_year`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})})}),_jsx(_components.td,{children:`Season year.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`circuit_key`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`relationships`})}),_jsx(_components.td,{children:`Event/grand-prix key (equals race_id); used to group laps by circuit.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`race_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})}),`, `,_jsx(_components.code,{children:`relationships`})]}),_jsx(_components.td,{children:`Numeric FastF1 event id cast to string (e.g. ‘4’); the join key used across staging, not the human-readable slug.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`driver_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})}),`, `,_jsx(_components.code,{children:`relationships`})]}),_jsx(_components.td,{children:`FastF1 three-letter driver code (e.g. VER, HAM).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`driver_number`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Car number the driver carried in this session.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`constructor_id`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`relationships`})}),_jsx(_components.td,{children:`Team name as reported by FastF1 (e.g. ‘Mercedes’).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lap_number`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})})}),_jsx(_components.td,{children:`Lap index within the race (1-based).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`stint_number`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Stint index within the race (1-based); increments after each pit stop.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`tyre_life`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Laps already completed on the current tyre set at the start of this lap.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_fresh_tyre`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`TRUE when the lap began on a freshly fitted tyre set.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_personal_best`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`FastF1 flag the lap was the driver’s personal best at the time it was set.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`position`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`integer`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Track position (classification order) at the end of the lap.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lap_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Lap time in seconds (Bronze nanoseconds ÷ 1e9); NULL when not timed.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`lap_start_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Session clock (s) at the start of the lap; used to join weather and air state.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector1_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Sector 1 time in seconds; NULL when missing.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector2_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Sector 2 time in seconds; NULL when missing.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector3_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Sector 3 time in seconds; NULL when missing.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector1_session_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Session clock (s) at the sector 1 split.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector2_session_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Session clock (s) at the sector 2 split.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`sector3_session_time_s`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Session clock (s) at the sector 3 split.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`speed_i1_kph`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Speed-trap reading at intermediate point 1 (kph).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`speed_i2_kph`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Speed-trap reading at intermediate point 2 / sector 2 exit (kph).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`speed_fl_kph`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Speed-trap reading at the finish line (kph).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`speed_st_kph`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`double`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Speed-trap reading on the longest straight (kph).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`track_status`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Raw FastF1 TrackStatus string for the lap (concatenated digit codes, e.g. ‘41’ = SC+yellow).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_pit_lap`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`TRUE when the lap has a pit-in or pit-out time (an in/out lap).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_deleted`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`TRUE when stewards deleted the lap time (e.g. track-limits breach).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_accurate`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`FastF1 quality flag timing considered reliable.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_fastf1_generated`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`TRUE when the row was synthesised by FastF1 rather than read from raw timing.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`compound`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`varchar`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`/transform/ci/range-and-domain`,children:_jsx(_components.code,{children:`accepted_values`})}),`, `,_jsx(_components.code,{children:`relationships`})]}),_jsx(_components.td,{children:`Normalised tyre compound label (UPPER). None/nan/UNKNOWN mapped to NULL. Pre-2019 compounds (SUPERSOFT/ULTRASOFT/HYPERSOFT) preserved as-is.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_safety_car_lap`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})})}),_jsx(_components.td,{children:`TRUE when TrackStatus contains a 4 (SCDeployed). Full safety car only VSC is is_vsc_lap and a red flag is is_red_flag_lap. Decode matches stg_track_status, ground-truthed against the bronze Message column.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_vsc_lap`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})})}),_jsx(_components.td,{children:`TRUE when TrackStatus contains a 6 (VSCDeployed) or 7 (VSCEnding). Decode matches stg_track_status.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_red_flag_lap`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`/transform/ci/structural`,children:_jsx(_components.code,{children:`not_null`})})}),_jsx(_components.td,{children:`TRUE when TrackStatus contains a 5 (Red). A red flag is a full session stoppage physically the opposite of a VSC lap (tyres go to ambient, and may legally be changed), so it is flagged separately rather than folded into either neutralisation flag. The three flags together are the neutralised set the layer excludes; consumers should test all three, not a pair.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`is_valid_lap`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`boolean`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{}),_jsx(_components.td,{children:`Clean-lap flag: timed (lap_time_s > 0), not a pit lap, not deleted, accurate, lap_number > 1, and no SC/VSC/red flag (TrackStatus contains no 4–7).`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"stg_laps","sidebarTitle":"stg_laps","description":"Cleaned lap-level data from FastF1 race sessions.","href":"/reference/models/stg/stg_laps"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Lineage","slug":"lineage","depth":2,"children":[]},{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Columns","slug":"columns","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"offthepace","siteName":"Off The Pace • docs","title":"stg_laps - Off The Pace • docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T21:45:14.417Z","originalFileLocation":"reference/models/stg/stg_laps.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cleaned lap-level data from FastF1 race sessions.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Off The Pace • docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/offthepace/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/offthepace/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/offthepace/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/offthepace/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"stg_laps - Off The Pace • docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cleaned lap-level data from FastF1 race sessions.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Off The Pace • docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://offthepace.mintlify.app/reference/models/stg/stg_laps\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://offthepace.mintlify.site/_mintlify/api/og/v2?division=Staging\u0026amp;title=stg_laps\u0026amp;description=Cleaned+lap-level+data+from+FastF1+race+sessions.\u0026amp;theme=fd3b448b0951ec74ec361b01\u0026amp;signature=40f237fee64d9852071aad9a9f281bd1ad42799f6eca7652a1a1e55c087af26e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"stg_laps - Off The Pace • docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cleaned lap-level data from FastF1 race sessions.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://offthepace.mintlify.site/_mintlify/api/og/v2?division=Staging\u0026amp;title=stg_laps\u0026amp;description=Cleaned+lap-level+data+from+FastF1+race+sessions.\u0026amp;theme=fd3b448b0951ec74ec361b01\u0026amp;signature=40f237fee64d9852071aad9a9f281bd1ad42799f6eca7652a1a1e55c087af26e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/offthepace/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Off The Pace • docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#e40404\">\u003clink data-mint-head rel=\"canonical\" href=\"https://offthepace.mintlify.app/reference/models/stg/stg_laps\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/models/stg/stg_laps.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://offthepace.mintlify.app/#organization\",\"name\":\"Off The Pace • docs\",\"url\":\"https://offthepace.mintlify.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://media.brand.dev/ac2251a0-45a7-490a-8cdc-9a56a531fba3.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://offthepace.mintlify.app#website\",\"name\":\"Off The Pace • docs\",\"url\":\"https://offthepace.mintlify.app\",\"publisher\":{\"@id\":\"https://offthepace.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps#webpage\",\"url\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps\",\"name\":\"stg_laps\",\"description\":\"Cleaned lap-level data from FastF1 race sessions.\",\"dateModified\":\"2026-10-22T21:45:14.417Z\",\"isPartOf\":{\"@id\":\"https://offthepace.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Model Reference\",\"item\":\"https://offthepace.mintlify.app/reference/models/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Staging\",\"item\":\"https://offthepace.mintlify.app/reference/models/stg/stg_circuit_info\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"stg_laps\",\"item\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps#article\",\"headline\":\"stg_laps\",\"name\":\"stg_laps\",\"description\":\"Cleaned lap-level data from FastF1 race sessions.\",\"url\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps\",\"mainEntityOfPage\":{\"@id\":\"https://offthepace.mintlify.app/reference/models/stg/stg_laps#webpage\"},\"dateModified\":\"2026-10-22T21:45:14.417Z\",\"publisher\":{\"@id\":\"https://offthepace.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://offthepace.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Off The Pace • docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Off The Pace • docs","nav":{"global":{"anchors":[{"anchor":"Launch App","icon":"gauge","href":"https://off-the-pace.web.app"},{"anchor":"Docs","icon":"book","href":"https://offthepace.mintlify.app/"},{"anchor":"GitHub Repository","icon":{"name":"github","library":"fontawesome"},"href":"https://github.com/JustinClarke/off-the-pace"}]},"tabs":[{"tab":"Start Here","icon":"compass","pages":[{"title":"Start Here","href":""}]},{"tab":"Data","icon":"table","pages":[{"title":"Data","href":"/data/overview"}]},{"tab":"Transform","icon":"layers","groups":[{"group":"Concepts","icon":"calculator","pages":[{"title":"Transform layer overview: the model DAG and the eight families","sidebarTitle":"Transform Layer","href":"/transform/overview"},{"title":"The additive lap decomposition identity explained","sidebarTitle":"Additive Identity","href":"/decomposition/additive-identity"},{"title":"How lap time components are identified and estimated","sidebarTitle":"Methodology","href":"/decomposition/methodology"},{"title":"Understanding and predicting tyre cliff onset with ML","sidebarTitle":"Tyre Cliff","href":"/decomposition/tyre-cliff"},{"title":"Driver isolation: pure pace and relative pace","sidebarTitle":"Driver isolation","href":"/decomposition/driver-isolation"},{"title":"Known limitations of the lap decomposition pipeline","sidebarTitle":"Limitations","href":"/decomposition/limitations"}]},{"group":"How the Layer Works","icon":"workflow","pages":[{"title":"Staging family: Bronze Parquet to typed views","sidebarTitle":"Staging","href":"/transform/families/staging"},{"title":"Reference family: seed-backed and laps-derived dimensions","sidebarTitle":"Reference","href":"/transform/families/reference"},{"title":"Physics family: deterministic and EMA lap state","sidebarTitle":"Physics","href":"/transform/families/physics"},{"title":"Pace Baselines family: the curves every lap is measured against","sidebarTitle":"Pace Baselines","href":"/transform/families/pace-baselines"},{"title":"Skill family: de-biasing the car to leave the driver","sidebarTitle":"Skill","href":"/transform/families/skill"},{"title":"Residual Decomposition family: the additive identity and what it leaves over","sidebarTitle":"Residual","href":"/transform/families/residual"},{"title":"Strategy family: pit-stop and safety-car decision support","sidebarTitle":"Strategy","href":"/transform/families/strategy"},{"title":"Feature Marts family: the gold layer","sidebarTitle":"Marts","href":"/transform/families/marts"}]},{"group":"Model Reference","icon":"database","pages":[{"title":"dbt Models","href":"/reference/models/index"},{"group":"Staging","expanded":false,"pages":[{"title":"stg_circuit_info","sidebarTitle":"stg_circuit_info","href":"/reference/models/stg/stg_circuit_info"},{"title":"stg_events","sidebarTitle":"stg_events","href":"/reference/models/stg/stg_events"},{"title":"stg_lap_tyre_qa","sidebarTitle":"stg_lap_tyre_qa","description":"Bronze tyre QA (WI-05: F24, F25), one row per race lap; int_stint_geometry reads stint_number / tyre_life / compound from here instead of raw bronze.","href":"/reference/models/stg/stg_lap_tyre_qa"},{"title":"stg_laps","sidebarTitle":"stg_laps","href":"/reference/models/stg/stg_laps"},{"title":"stg_laps_qualifying","sidebarTitle":"stg_laps_qualifying","description":"Cleaned qualifying lap data (Q1/Q2/Q3), mirroring stg_laps for qualifying sessions.","href":"/reference/models/stg/stg_laps_qualifying"},{"title":"stg_pits","sidebarTitle":"stg_pits","href":"/reference/models/stg/stg_pits"},{"title":"stg_race_control","sidebarTitle":"stg_race_control","href":"/reference/models/stg/stg_race_control"},{"title":"stg_results","sidebarTitle":"stg_results","href":"/reference/models/stg/stg_results"},{"title":"stg_results_qualifying","sidebarTitle":"stg_results_qualifying","href":"/reference/models/stg/stg_results_qualifying"},{"title":"stg_sector_times","sidebarTitle":"stg_sector_times","href":"/reference/models/stg/stg_sector_times"},{"title":"stg_session_status","sidebarTitle":"stg_session_status","href":"/reference/models/stg/stg_session_status"},{"title":"stg_session_status_qualifying","sidebarTitle":"stg_session_status_qualifying","href":"/reference/models/stg/stg_session_status_qualifying"},{"title":"stg_telemetry","sidebarTitle":"stg_telemetry","href":"/reference/models/stg/stg_telemetry"},{"title":"stg_telemetry_position","sidebarTitle":"stg_telemetry_position","href":"/reference/models/stg/stg_telemetry_position"},{"title":"stg_track_status","sidebarTitle":"stg_track_status","href":"/reference/models/stg/stg_track_status"},{"title":"stg_tyre_allocations","sidebarTitle":"stg_tyre_allocations","href":"/reference/models/stg/stg_tyre_allocations"},{"title":"stg_weather","sidebarTitle":"stg_weather","href":"/reference/models/stg/stg_weather"}]},{"group":"Intermediate","expanded":false,"pages":[{"title":"int_cell_power_law_fit","sidebarTitle":"int_cell_power_law_fit","href":"/reference/models/int/int_cell_power_law_fit"},{"title":"int_circuit_x_constructor_interaction","sidebarTitle":"int_circuit_x_constructor_interaction","href":"/reference/models/int/int_circuit_x_constructor_interaction"},{"title":"int_compound_cliff_predicted","sidebarTitle":"int_compound_cliff_predicted","href":"/reference/models/int/int_compound_cliff_predicted"},{"title":"int_constructor_car_fe","sidebarTitle":"int_constructor_car_fe","href":"/reference/models/int/int_constructor_car_fe"},{"title":"int_constructor_car_fe_isolation","sidebarTitle":"int_constructor_car_fe_isolation","href":"/reference/models/int/int_constructor_car_fe_isolation"},{"title":"int_constructor_deg_sensitivity","sidebarTitle":"int_constructor_deg_sensitivity","href":"/reference/models/int/int_constructor_deg_sensitivity"},{"title":"int_constructor_structural_pace","sidebarTitle":"int_constructor_structural_pace","href":"/reference/models/int/int_constructor_structural_pace"},{"title":"int_constructor_structural_pace_qualifying","sidebarTitle":"int_constructor_structural_pace_qualifying","href":"/reference/models/int/int_constructor_structural_pace_qualifying"},{"title":"int_corner_drift_from_early_stint","sidebarTitle":"int_corner_drift_from_early_stint","href":"/reference/models/int/int_corner_drift_from_early_stint"},{"title":"int_corner_metrics","sidebarTitle":"int_corner_metrics","href":"/reference/models/int/int_corner_metrics"},{"title":"int_corner_skill_residuals","sidebarTitle":"int_corner_skill_residuals","href":"/reference/models/int/int_corner_skill_residuals"},{"title":"int_dirty_air_tax_component","sidebarTitle":"int_dirty_air_tax_component","href":"/reference/models/int/int_dirty_air_tax_component"},{"title":"int_driver_circuit_affinity","sidebarTitle":"int_driver_circuit_affinity","href":"/reference/models/int/int_driver_circuit_affinity"},{"title":"int_driver_circuit_era_affinity","sidebarTitle":"int_driver_circuit_era_affinity","href":"/reference/models/int/int_driver_circuit_era_affinity"},{"title":"int_driver_isolation_lap_pace","sidebarTitle":"int_driver_isolation_lap_pace","href":"/reference/models/int/int_driver_isolation_lap_pace"},{"title":"int_driver_isolation_lap_panel","sidebarTitle":"int_driver_isolation_lap_panel","href":"/reference/models/int/int_driver_isolation_lap_panel"},{"title":"int_driver_isolation_lap_values","sidebarTitle":"int_driver_isolation_lap_values","href":"/reference/models/int/int_driver_isolation_lap_values"},{"title":"int_driver_isolation_stint_tyre","sidebarTitle":"int_driver_isolation_stint_tyre","href":"/reference/models/int/int_driver_isolation_stint_tyre"},{"title":"int_driver_race_skill_loro","sidebarTitle":"int_driver_race_skill_loro","href":"/reference/models/int/int_driver_race_skill_loro"},{"title":"int_driver_season_ratings","sidebarTitle":"int_driver_season_ratings","href":"/reference/models/int/int_driver_season_ratings"},{"title":"int_era_normalized_driver_rating","sidebarTitle":"int_era_normalized_driver_rating","href":"/reference/models/int/int_era_normalized_driver_rating"},{"title":"int_event_corrections","sidebarTitle":"int_event_corrections","href":"/reference/models/int/int_event_corrections"},{"title":"int_field_pace_curve","sidebarTitle":"int_field_pace_curve","href":"/reference/models/int/int_field_pace_curve"},{"title":"int_lap_air_state","sidebarTitle":"int_lap_air_state","href":"/reference/models/int/int_lap_air_state"},{"title":"int_lap_anomaly_flags","sidebarTitle":"int_lap_anomaly_flags","href":"/reference/models/int/int_lap_anomaly_flags"},{"title":"int_lap_corner_drift","sidebarTitle":"int_lap_corner_drift","href":"/reference/models/int/int_lap_corner_drift"},{"title":"int_lap_corner_inputs","sidebarTitle":"int_lap_corner_inputs","href":"/reference/models/int/int_lap_corner_inputs"},{"title":"int_lap_fuel_state","sidebarTitle":"int_lap_fuel_state","href":"/reference/models/int/int_lap_fuel_state"},{"title":"int_lap_fuel_state_qualifying","sidebarTitle":"int_lap_fuel_state_qualifying","href":"/reference/models/int/int_lap_fuel_state_qualifying"},{"title":"int_lap_normalized_pace","sidebarTitle":"int_lap_normalized_pace","href":"/reference/models/int/int_lap_normalized_pace"},{"title":"int_lap_proximity","sidebarTitle":"int_lap_proximity","href":"/reference/models/int/int_lap_proximity"},{"title":"int_lap_residual_decomposed","sidebarTitle":"int_lap_residual_decomposed","href":"/reference/models/int/int_lap_residual_decomposed"},{"title":"int_lap_residual_decomposed_qualifying","sidebarTitle":"int_lap_residual_decomposed_qualifying","href":"/reference/models/int/int_lap_residual_decomposed_qualifying"},{"title":"int_lap_residual_stint_detrend","sidebarTitle":"int_lap_residual_stint_detrend","href":"/reference/models/int/int_lap_residual_stint_detrend"},{"title":"int_lap_telemetry_aggregates","sidebarTitle":"int_lap_telemetry_aggregates","href":"/reference/models/int/int_lap_telemetry_aggregates"},{"title":"int_lap_thermal_proxy","sidebarTitle":"int_lap_thermal_proxy","href":"/reference/models/int/int_lap_thermal_proxy"},{"title":"int_pit_loss_circuit","sidebarTitle":"int_pit_loss_circuit","href":"/reference/models/int/int_pit_loss_circuit"},{"title":"int_pit_strategy_cost_curve","sidebarTitle":"int_pit_strategy_cost_curve","href":"/reference/models/int/int_pit_strategy_cost_curve"},{"title":"int_pit_strategy_value","sidebarTitle":"int_pit_strategy_value","href":"/reference/models/int/int_pit_strategy_value"},{"title":"int_power_law_lap","sidebarTitle":"int_power_law_lap","href":"/reference/models/int/int_power_law_lap"},{"title":"int_qualifying_decomposed","sidebarTitle":"int_qualifying_decomposed","href":"/reference/models/int/int_qualifying_decomposed"},{"title":"int_qualifying_driver_summary","sidebarTitle":"int_qualifying_driver_summary","href":"/reference/models/int/int_qualifying_driver_summary"},{"title":"int_qualifying_push_laps","sidebarTitle":"int_qualifying_push_laps","href":"/reference/models/int/int_qualifying_push_laps"},{"title":"int_qualifying_segments","sidebarTitle":"int_qualifying_segments","href":"/reference/models/int/int_qualifying_segments"},{"title":"int_sc_hazard_history","sidebarTitle":"int_sc_hazard_history","href":"/reference/models/int/int_sc_hazard_history"},{"title":"int_sector_residual_decomposed","sidebarTitle":"int_sector_residual_decomposed","href":"/reference/models/int/int_sector_residual_decomposed"},{"title":"int_stint_end_regime","sidebarTitle":"int_stint_end_regime","href":"/reference/models/int/int_stint_end_regime"},{"title":"int_stint_geometry","sidebarTitle":"int_stint_geometry","href":"/reference/models/int/int_stint_geometry"},{"title":"int_stint_power_law_fit","sidebarTitle":"int_stint_power_law_fit","href":"/reference/models/int/int_stint_power_law_fit"},{"title":"int_synthetic_teammate","sidebarTitle":"int_synthetic_teammate","href":"/reference/models/int/int_synthetic_teammate"},{"title":"int_track_evolution","sidebarTitle":"int_track_evolution","href":"/reference/models/int/int_track_evolution"},{"title":"int_track_geometry","sidebarTitle":"int_track_geometry","href":"/reference/models/int/int_track_geometry"},{"title":"int_tyre_surface_vs_bulk_decoupling","sidebarTitle":"int_tyre_surface_vs_bulk_decoupling","href":"/reference/models/int/int_tyre_surface_vs_bulk_decoupling"}]},{"group":"Marts","expanded":false,"pages":[{"title":"fct_cliff_prediction_features","sidebarTitle":"fct_cliff_prediction_features","href":"/reference/models/fct/fct_cliff_prediction_features"},{"title":"fct_driver_isolation_lap","sidebarTitle":"fct_driver_isolation_lap","href":"/reference/models/fct/fct_driver_isolation_lap"},{"title":"fct_driver_isolation_pair_lap","sidebarTitle":"fct_driver_isolation_pair_lap","href":"/reference/models/fct/fct_driver_isolation_pair_lap"},{"title":"fct_driver_isolation_race","sidebarTitle":"fct_driver_isolation_race","href":"/reference/models/fct/fct_driver_isolation_race"},{"title":"fct_driver_isolation_stint","sidebarTitle":"fct_driver_isolation_stint","href":"/reference/models/fct/fct_driver_isolation_stint"},{"title":"fct_driver_skill_features","sidebarTitle":"fct_driver_skill_features","href":"/reference/models/fct/fct_driver_skill_features"},{"title":"fct_ghost_car_pace","sidebarTitle":"fct_ghost_car_pace","href":"/reference/models/fct/fct_ghost_car_pace"},{"title":"fct_ghost_race_finish","sidebarTitle":"fct_ghost_race_finish","href":"/reference/models/fct/fct_ghost_race_finish"},{"title":"fct_lap_residuals","sidebarTitle":"fct_lap_residuals","href":"/reference/models/fct/fct_lap_residuals"},{"title":"fct_power_law_training","sidebarTitle":"fct_power_law_training","href":"/reference/models/fct/fct_power_law_training"},{"title":"fct_stint_features","sidebarTitle":"fct_stint_features","href":"/reference/models/fct/fct_stint_features"},{"title":"fct_telemetry_deltas","sidebarTitle":"fct_telemetry_deltas","href":"/reference/models/fct/fct_telemetry_deltas"},{"title":"mart_corner_skill_driver","sidebarTitle":"mart_corner_skill_driver","href":"/reference/models/fct/mart_corner_skill_driver"},{"title":"mart_degradation_history_envelope","sidebarTitle":"mart_degradation_history_envelope","href":"/reference/models/fct/mart_degradation_history_envelope"},{"title":"mart_driver_season_summary","sidebarTitle":"mart_driver_season_summary","href":"/reference/models/fct/mart_driver_season_summary"},{"title":"mart_metric_benchmark","sidebarTitle":"mart_metric_benchmark","href":"/reference/models/fct/mart_metric_benchmark"},{"title":"mart_race_driver_summary","sidebarTitle":"mart_race_driver_summary","href":"/reference/models/fct/mart_race_driver_summary"}]},{"group":"Dimensions","expanded":false,"pages":[{"title":"dim_circuits","sidebarTitle":"dim_circuits","href":"/reference/models/dim/dim_circuits"},{"title":"dim_compounds_season","sidebarTitle":"dim_compounds_season","href":"/reference/models/dim/dim_compounds_season"},{"title":"dim_constructors","sidebarTitle":"dim_constructors","href":"/reference/models/dim/dim_constructors"},{"title":"dim_corners","sidebarTitle":"dim_corners","href":"/reference/models/dim/dim_corners"},{"title":"dim_drivers","sidebarTitle":"dim_drivers","href":"/reference/models/dim/dim_drivers"},{"title":"dim_driver_seasons","sidebarTitle":"dim_driver_seasons","href":"/reference/models/dim/dim_driver_seasons"},{"title":"dim_events","sidebarTitle":"dim_events","href":"/reference/models/dim/dim_events"}]}]},{"group":"The CI Contract","icon":"shield-check","pages":[{"title":"The CI Contract: how the transform layer's test suite keeps the DAG honest","sidebarTitle":"Overview","href":"/transform/ci/overview"},{"title":"Structural tests: grain and completeness across every model","sidebarTitle":"Structural","href":"/transform/ci/structural"},{"title":"Range \u0026 domain tests: plausibility, enums, and monotonicity","sidebarTitle":"Range \u0026 Domain","href":"/transform/ci/range-and-domain"},{"title":"Identity-closure tests: the additive identities, enforced","sidebarTitle":"Identity-Closure","href":"/transform/ci/identity-closure"},{"title":"Domain-constraint tests: physical and statistical invariants","sidebarTitle":"Domain Constraints","href":"/transform/ci/domain-constraints"},{"title":"Regression gates: baseline comparison, lint, and byte-stability","sidebarTitle":"Regression Gates","href":"/transform/ci/regression-gates"}]},{"group":"Macros","icon":"code","pages":[{"title":"Macros: the seven reusable building blocks","sidebarTitle":"Overview","href":"/transform/macros"},{"title":"dbt Macros","href":"/reference/macros/index"},{"title":"assert_additive_identity","sidebarTitle":"assert_additive_identity","href":"/reference/macros/assert_additive_identity"},{"title":"bayesian_shrinkage","sidebarTitle":"bayesian_shrinkage","href":"/reference/macros/bayesian_shrinkage"},{"title":"circuit_id_from_name","sidebarTitle":"circuit_id_from_name","href":"/reference/macros/circuit_id_from_name"},{"title":"clamp_or_null","sidebarTitle":"clamp_or_null","href":"/reference/macros/clamp_or_null"},{"title":"clean_lap_filter","sidebarTitle":"clean_lap_filter","href":"/reference/macros/clean_lap_filter"},{"title":"cliff_plateau_s","sidebarTitle":"cliff_plateau_s","href":"/reference/macros/cliff_plateau_s"},{"title":"cliff_ramp_frac","sidebarTitle":"cliff_ramp_frac","href":"/reference/macros/cliff_ramp_frac"},{"title":"cliff_ramp_slope_s_per_lap","sidebarTitle":"cliff_ramp_slope_s_per_lap","href":"/reference/macros/cliff_ramp_slope_s_per_lap"},{"title":"cliff_severity_span","sidebarTitle":"cliff_severity_span","href":"/reference/macros/cliff_severity_span"},{"title":"cliff_severity_term","sidebarTitle":"cliff_severity_term","href":"/reference/macros/cliff_severity_term"},{"title":"compound_cliff_wear_s","sidebarTitle":"compound_cliff_wear_s","href":"/reference/macros/compound_cliff_wear_s"},{"title":"driver_isolation_identity_terms","sidebarTitle":"driver_isolation_identity_terms","href":"/reference/macros/driver_isolation_identity_terms"},{"title":"driver_isolation_pure_season_offset","sidebarTitle":"driver_isolation_pure_season_offset","href":"/reference/macros/driver_isolation_pure_season_offset"},{"title":"driver_isolation_reliability","sidebarTitle":"driver_isolation_reliability","href":"/reference/macros/driver_isolation_reliability"},{"title":"fuel_regulatory_max_kg","sidebarTitle":"fuel_regulatory_max_kg","href":"/reference/macros/fuel_regulatory_max_kg"},{"title":"normal_cdf","sidebarTitle":"normal_cdf","href":"/reference/macros/normal_cdf"},{"title":"normalize_compound","sidebarTitle":"normalize_compound","href":"/reference/macros/normalize_compound"},{"title":"posterior_variance","sidebarTitle":"posterior_variance","href":"/reference/macros/posterior_variance"},{"title":"power_law_beta_grid","sidebarTitle":"power_law_beta_grid","href":"/reference/macros/power_law_beta_grid"},{"title":"trailing_median","sidebarTitle":"trailing_median","href":"/reference/macros/trailing_median"},{"title":"trailing_observation_count","sidebarTitle":"trailing_observation_count","href":"/reference/macros/trailing_observation_count"},{"title":"trailing_sum","sidebarTitle":"trailing_sum","href":"/reference/macros/trailing_sum"},{"title":"trailing_value_expr","sidebarTitle":"trailing_value_expr","href":"/reference/macros/trailing_value_expr"},{"title":"trailing_window_frame","sidebarTitle":"trailing_window_frame","href":"/reference/macros/trailing_window_frame"}]}]},{"tab":"Machine Learning","icon":"brain","pages":[{"title":"Machine Learning","href":"/ml/overview"}]},{"tab":"App","icon":"layout-dashboard","pages":[{"title":"App","href":"/app/overview"}]}]},"basePath":"","title":"stg_laps - Off The Pace • docs","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}