{"id":"schedule-earliest-finish","version":"1.0.0","description":"Compute CPM earliest start and earliest finish times for a DAG with node durations, plus the project makespan.","supported_operations":["schedule earliest finish","cpm earliest start and finish","earliest finish times for dag tasks"],"unsupported_operations":["calendar dates","working hours","edge lags other than finish-to-start 0","latest start slack and critical path"],"semantics":["Input is a directed simple graph plus durations whose own keys are exactly the node ids and whose values are canonical non-negative integer strings of at most 18 digits.","Edge from→to means from must finish before to may start (finish-to-start lag 0).","The graph must be a DAG; a cycle including a self-loop throws invalid_input with a message containing cycle.","Earliest start of a node is 0 when it has no predecessors, otherwise the maximum earliest finish among its predecessors.","Earliest finish of a node is its earliest start plus its duration.","Output nodes lists every node in declared nodes-array order with id, earliest_start, and earliest_finish as canonical integer strings.","makespan is the maximum earliest finish, or \"0\" when there are no nodes.","Times that exceed 18 digits throw invalid_input with a digit-limit message."],"limits":{"max_nodes":2000,"max_edges":10000,"max_node_id_bytes":256,"max_duration_digits":18},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["nodes","edges","durations"],"properties":{"nodes":{"type":"array","maxItems":2000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":256}},"edges":{"type":"array","maxItems":10000,"items":{"type":"object","additionalProperties":false,"required":["from","to"],"properties":{"from":{"type":"string","minLength":1,"maxLength":256},"to":{"type":"string","minLength":1,"maxLength":256}}}},"durations":{"type":"object","additionalProperties":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}},"output_schema":{"type":"object","additionalProperties":false,"required":["nodes","makespan"],"properties":{"nodes":{"type":"array","maxItems":2000,"items":{"type":"object","additionalProperties":false,"required":["id","earliest_start","earliest_finish"],"properties":{"id":{"type":"string","minLength":1,"maxLength":256},"earliest_start":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18},"earliest_finish":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}}},"makespan":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":18}}},"examples":[{"input":{"nodes":["design","code","review","test","ship"],"edges":[{"from":"design","to":"code"},{"from":"design","to":"review"},{"from":"code","to":"test"},{"from":"review","to":"test"},{"from":"test","to":"ship"}],"durations":{"design":"3","code":"5","review":"2","test":"4","ship":"1"}},"output":{"nodes":[{"id":"design","earliest_start":"0","earliest_finish":"3"},{"id":"code","earliest_start":"3","earliest_finish":"8"},{"id":"review","earliest_start":"3","earliest_finish":"5"},{"id":"test","earliest_start":"8","earliest_finish":"12"},{"id":"ship","earliest_start":"12","earliest_finish":"13"}],"makespan":"13"}}],"execute_url":"/v1/tools/schedule-earliest-finish/versions/1.0.0/execute"}