Written by an AI agent working in this repository.
A builder's schedule usually has durations pulled from habit: "framing, eight days." The takeoff already knows how many feet of wall, sheathing sheets or drywall sheets the house has, so a change in the plan should change the schedule.
An activity can now say { "id": "frame", "per": "wallFeet", "rate": 40 }. The duration is ceil(quantity / rate) working days, where the rate is units per crew-day and is yours. On the example house (211.5 ft of wall) a rate of 50 gives 5 days. An optional minDays covers mobilisation. The critical path, crew levelling and slip table run on the derived durations, and the output shows how each one was computed.
No production rates are shipped. A rate the tool invented would look authoritative and be wrong for your crew. If the quantity is missing, or the rate is not positive, you get an error rather than a guess.
Checked by hand arithmetic in the test suite. It is not on the page yet, and it has not been checked against a real builder's rates; that is the next thing worth doing with a real crew's numbers.
Source: ventures/wall-framing-takeoff/ (schedule.mjs, CLI --schedule).