{
  "generatedAt": "2026-10-30T06:23:38.021Z",
  "commit": "2de88f716e96fc2bed283515fb836cca74fab3f7",
  "source": {
    "roadmap": "docs/ROADMAP.md",
    "github": "mark1russell7/highways"
  },
  "items": [
    {
      "id": "BUILD-QUEUE",
      "title": "Up to 3 builds at a time take the ideas from the top of the [build queue](research/CATALOG.md#the-build-queue). Each build takes an idea with `pnpm queue --take`, skips a blocked idea and commits the new queue.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 187,
      "links": []
    },
    {
      "id": "INTERIOR-ROUTE",
      "title": "Slice 2: inner box to inner box. Each edge between two nodes of one frame routes inside their nearest common frame, around the other nodes. Slice 1 (the plugs of the walls) shipped.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 188,
      "links": []
    },
    {
      "id": "FIX-PORTS-RESULT",
      "title": "`fixPorts` also gives the chosen plugs (port, point, side) as data, so a consumer does not read them back from the ports of the graph. The return type of today stays as it is.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 189,
      "links": []
    },
    {
      "id": "INNER-ONE-CALL",
      "title": "One call routes the outer edges and the inner edges of the frames. Today the inner routes need a second call (`splitFrames`, then `frameRoutes`) after the outer route.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 190,
      "links": []
    },
    {
      "id": "SEARCH-CROSS",
      "title": "The default score of `search` follows ink, R1 and R4 together. SEARCH-OBJECTIVE found that `crossingWeight` 0.3 with half penalties follows ink and R1, but its fit to R4 falls from 0.53 to 0.11. Step 1: find the term that makes B1 go against R4 (ρ -0.71). Add an R4 term or correct that penalty, and screen until the median ρ is 0.5 or more for the three measures. Step 2: a work counter for each new term. Step 3, the gate of the default: the seeds 6 to 10 on `screen-v3` and the dense window of 500 boxes. Gains on ink and R1 with Holm, and R4 drops beyond the floor on 2% of the inputs or fewer. The claim gives the median and p10 of each measure, the share of the inputs that move and the time ratio. A pass is a MINOR.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 191,
      "links": []
    },
    {
      "id": "PLUG-ROW-GAP",
      "title": "Two plugs of one wall land a few pixels apart, so the second row of a card has no room. A consumer anchors 0 of 48 such row ends. Step 1: a bench measure, the fraction of the plugs whose row fits, and the minimum gap of the plugs of one wall in row heights. Step 2: the plug gap of `spread` knows the row height of each port. The gate: the measure goes up on a made-up board of tall rows, with no drop of the other measures.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 192,
      "links": []
    },
    {
      "id": "INCREMENTAL-SEARCH",
      "title": "Each plan that `search` measures routes and scores all the edges, but a move changes a few highways. This item routes and scores again only the edges of the changed highways. The gate: the scores and the route hashes are equal to the full evaluation on each screen input. Then the speedup against the work. The baseline is the `lane` count of one evaluation: 3.1 billion on 1000 boxes (SEARCH-BUDGET). The crossing term of SEARCH-OBJECTIVE counts pairs too, so it needs an incremental form.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 193,
      "links": []
    },
    {
      "id": "MOVE-OTHERS",
      "title": "A measure next to Z11: when one box moves, do the routes that do not touch it stay where they are? A second number judges the routes with an end on the moved box, against the move of the box. Each router gets the measure on the same 5 member sets, with predictions before the run.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 194,
      "links": []
    },
    {
      "id": "GROUP-BUNDLING",
      "title": "Bundle purity is a measure of the bench: the share of the edges of a bundle that are in one group. Each bundling strategy gets a group term in its compatibility, from 0 to 1. A bundle splits when the group rule weighs more than the ink that it saves. The atlas shows purity against ink as a front.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 195,
      "links": []
    },
    {
      "id": "PASS-GRID",
      "title": "On `screen-v2`, each highway strategy has too many pass-throughs on some `packed-grid` seed, so the front of the highway screen is empty. Find the cause on the worst seeds: the plan, `follow`, or the floor.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 196,
      "links": []
    },
    {
      "id": "FAMILIES-WEEKLY",
      "title": "New input families each week, with no ceiling: dumps of made-up data, adversarial and worst cases, scaling ladders and benchmarks from the literature. The sliders of the site get each one at once.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 197,
      "links": []
    },
    {
      "id": "SPACE-COVERAGE",
      "title": "One number on the site, with a weekly trend: the share of strategies, options and input dimensions where each measure has a fitted model, a held-out error and Sobol indices.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 198,
      "links": []
    },
    {
      "id": "SOLVED-ATLAS",
      "title": "The atlas shows each solved region. A region is solved when its leader is within a measured bound of a proven lower bound, or when one leader holds for 4 weeks.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 199,
      "links": []
    },
    {
      "id": "QUEUE-REFILL",
      "title": "`pnpm queue` tells when the open ideas are fewer than one week of build slots. Then a literature survey and a round of hybrids add ideas to the queue.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 200,
      "links": []
    },
    {
      "id": "POINT-AT",
      "title": "The export `pointAtFraction(route, t)` gives the point and the tangent at a fraction of the length of a route. Then a renderer that puts a badge at half the length has no copy of that math.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 201,
      "links": []
    },
    {
      "id": "OPT-IN-LIST",
      "title": "The core exports `OPT_IN_STRATEGIES` and `STEP_DEFAULTS`. The strategy cards, compare and the bench read them, and no page names the opt-in routers by hand.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 202,
      "links": []
    },
    {
      "id": "IDEA-GUARANTEES",
      "title": "An optional field `guarantee` on each idea record. Today 72 of 79 strategy cards say \"none stated\", because the cards find a guarantee by a keyword match.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 203,
      "links": []
    },
    {
      "id": "SHAPE-SUPPORTS",
      "title": "The options of `routeSpace` declare `supports: { shape: [\"rect\"] }`, because each router takes box obstacles only.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 204,
      "links": []
    },
    {
      "id": "LANE-WALK",
      "title": "The lane order of a dense run without a walk for each compare. After ROUTE-SCALE, `partBefore` and `partAfter` take approximately 55% of a `shared` route on the dense board. The lane order stays the same.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 205,
      "links": []
    },
    {
      "id": "BENCH-STEPS",
      "title": "Cheaper measures on a dense board: `exactStretches` (a landmark guide for `distancesTo`), `measureQuality` and `checkProperties`. The values stay the same.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 206,
      "links": []
    },
    {
      "id": "STAGE-DATA",
      "title": "The stages of the routers and their options as data (`strategy-space/1` of layout-contract 0.2.10): `routeSpace`, `routeConfig` and each router of today as a named point with an equal route hash.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 207,
      "links": []
    },
    {
      "id": "STRATEGY-CARDS",
      "title": "Part 2 of the strategy cards: the curves of one option at a time and the Sobol indices of each strategy, from the nightly sweep.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 208,
      "links": []
    },
    {
      "id": "TIME-PAIR",
      "title": "The time test runs each candidate and its default in one job, in alternate runs, so both use the same CPU.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 209,
      "links": []
    },
    {
      "id": "SELECT",
      "title": "A selector for each input from its features, or from a cheap trial run of a few strategies. The oracle bound is large: 0.352 of gap closed on `exact-v1`, and 39% or more of B1 on 4 of 4 boards. A choice by class keeps none of it, so the selector needs finer features and more seeds of each board. A portfolio with a score of the output alone keeps 6% on `exact-v1` (PORTFOLIO), so the selector needs a score that knows the rule of the run. PORTFOLIO-RULE gives that score: B1 among the runs that obey the rule of the caller, at one cap.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 210,
      "links": []
    },
    {
      "id": "HWC-E",
      "title": "Room for the plug stubs, and the spacing rise of the bends: most arcs under the smallest radius sit on short plug stubs or on legs along one box.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 211,
      "links": []
    },
    {
      "id": "MEAS-FLAT",
      "title": "Z2 is 0 on each record, and B8 `runs` is degenerate where `shared` has 0. Correct each definition, or mark it inactive with its reason.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 212,
      "links": []
    },
    {
      "id": "REBUILD-SILENT",
      "title": "ACTIVATION found 15 strategies whose own move does not fire on `screen-v1`. For each, a small board on which the move must fire gives the cause. When the move fires there, the corpus has a gap, and such boards go to CORPUS-SEEDS. When it does not fire, the trigger is wrong, and the strategy is built again.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 213,
      "links": []
    },
    {
      "id": "CURV3",
      "title": "More curve types from CURV-R, each with its options: Hobby curves, B-splines, biarc corners and superellipse corners.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 214,
      "links": []
    },
    {
      "id": "GRP3",
      "title": "More grouping rules from GRP-R: `agglomerative`, `leiden` and `pack`, and the options `refine` and `band` of the rule `cut`.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 215,
      "links": []
    },
    {
      "id": "TUNE",
      "title": "The tuning harness: it sweeps the options of each strategy from its declaration. It gives the Pareto front and the best setting for given weights.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 216,
      "links": []
    },
    {
      "id": "PLAY",
      "title": "The playground page: choose a strategy for each step and move the options. The measures change live, and a link keeps the setting.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 217,
      "links": []
    },
    {
      "id": "EX3",
      "title": "More example boards of made-up data: charts of teams, pipelines, network maps, timelines and dense grids, each with its page.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 218,
      "links": []
    },
    {
      "id": "SHARED-SMOOTH",
      "title": "The routers `shared` and `shared-all` read their option `smooth`, or the schema loses it. Today the control does nothing.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 219,
      "links": []
    },
    {
      "id": "COMPARE-PIPELINE",
      "title": "Compare picks a whole pipeline from `routeSpace`. Waits for STAGE-DATA.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 220,
      "links": []
    },
    {
      "id": "BUILD-W",
      "title": "Build and screen each idea of the catalog, in waves by family and by expected value. Each kept idea gets its folder, its tests and a row in the benchmark. The next waves aim at two holes of the portfolio first. The first hole is the rule `collection` at the cap 1.1 on large boards: there the base `shared` wins on 18 of 20 test inputs. The second hole is the rule `all` at a tight cap (1.1, 1.25) on large boards, where the medians of gap closed are negative. After them, the waves aim at the rule `collection`, because there the best single strategy reaches 0.021 of gap closed, against an oracle of 0.378.",
      "status": "`later`",
      "statusClass": "later",
      "section": "Open",
      "line": 221,
      "links": []
    }
  ],
  "pullRequests": [
    {
      "number": 210,
      "title": "fix(core): no run gives null, not true, as deterministic in the screen summary (SCREEN-NO-RUN)",
      "url": "https://github.com/mark1russell7/highways/pull/210",
      "author": "mark1russell7",
      "branch": "fix/screen-no-run",
      "draft": false,
      "createdAt": "2026-10-30T06:12:58Z",
      "updatedAt": "2026-10-30T06:13:12Z",
      "labels": [],
      "checks": "pending"
    }
  ],
  "issues": [
    {
      "number": 1,
      "title": "Dependency Dashboard",
      "url": "https://github.com/mark1russell7/highways/issues/1",
      "author": "renovate",
      "createdAt": "2026-10-25T18:08:28Z",
      "updatedAt": "2026-10-30T05:53:06Z",
      "labels": []
    }
  ],
  "github": {
    "available": true,
    "totals": {
      "pullRequests": 1,
      "issues": 1
    }
  }
}
