@rosthq/cli 0.7.51 → 0.7.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;AAmmCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA2OjD,CAAC"}
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;AAonCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA2OjD,CAAC"}
package/dist/index.js CHANGED
@@ -41339,7 +41339,9 @@ var graphNodeSchema = external_exports.object({
41339
41339
  }).strict().nullable(),
41340
41340
  signal_state: rollupStateSchema,
41341
41341
  cascade_state: rollupStateSchema,
41342
- open_task_count: external_exports.number().int().nonnegative()
41342
+ open_task_count: external_exports.number().int().nonnegative(),
41343
+ unassigned: external_exports.boolean(),
41344
+ is_peer: external_exports.boolean()
41343
41345
  }).strict();
41344
41346
  var graphEdgeSchema = external_exports.object({
41345
41347
  parent_seat_id: uuidSchema11,
@@ -44516,7 +44518,7 @@ Treat AICOS as a coordinator over the operating system. It can become more usefu
44516
44518
  order: 20,
44517
44519
  title: "Responsibility Graph playbook",
44518
44520
  summary: "How to build a functions-first graph with seats, owners, Stewards, vacancies, and clean authority.",
44519
- version: "2026-07-04.3",
44521
+ version: "2026-07-06.2",
44520
44522
  public: true,
44521
44523
  audiences: ["human", "cli", "mcp", "in_app_agent"],
44522
44524
  stages: ["graph_design", "staffing"],
@@ -44549,6 +44551,23 @@ The Responsibility Graph is the company's operating structure. It answers who ow
44549
44551
  - Give every agent seat a human Steward chain.
44550
44552
  - Attach goals, measurables, and tasks to seats, not directly to people.
44551
44553
 
44554
+ ## Single-root chart and parent resolution
44555
+
44556
+ The graph always resolves to a single canonical root seat (Founder & CEO in the standard shape) so the web canvas, CLI \`rost graph show\`, and MCP \`graph.get\` all agree on the same structure. The parent of each seat is derived deterministically:
44557
+
44558
+ 1. An explicit parent seat id, when it names a live seat in the same chart.
44559
+ 2. The seat at the ltree parent path, when one exists.
44560
+ 3. The steward seat, when the seat is not AICOS and the steward is a live non-self seat.
44561
+ 4. Otherwise the seat has no parent.
44562
+
44563
+ AICOS always stays a peer of the root (never a child of its steward) and never appears as an orphan in the unassigned set \u2014 this is intentional and not a data-quality issue.
44564
+
44565
+ Seats that do not reach the single root through the resolved parent chain are listed as **unassigned** (with \`unassigned: true\` and no incoming edge). Each \`graph.get\` node carries an \`unassigned\` boolean, and the CLI \`rost graph show\` output prints unassigned seats under a separate \`Unassigned\` section so operators can see which parts of the chart need attention. The web canvas parks unassigned seats at the bottom of the chart instead of inventing fake root edges.
44566
+
44567
+ ## Forge Developer Team seats are pinned
44568
+
44569
+ Seats under \`forge.developer_team\` are resolved by Forge build dispatch using their exact path, so they cannot be reparented or merged from the graph, CLI, or MCP \u2014 moving a seat (or an ancestor whose subtree holds them) would eject them from dispatch, and no command can restore the path. To change who is accountable for one of these seats, update its steward with \`agent_setup.update\`; the reporting path stays fixed. To stand the team down, use the governed Forge team teardown flow, not a merge or decommission.
44570
+
44552
44571
  ## Add an agent from the graph
44553
44572
 
44554
44573
  Agent creation is a first-class graph action. From a seat in the Responsibility Graph you can open the agent setup wizard with the seat already chosen as the parent:
@@ -44619,7 +44638,7 @@ Each seat needs:
44619
44638
 
44620
44639
  Read before you write. Load the whole graph first so seat ids, parents, and occupancy are known.
44621
44640
 
44622
- - CLI: \`{{cli}} command graph.get --json '{}'\` (scope: tenant). Returns seats, edges, root, occupants, and status rollups.
44641
+ - CLI: \`{{cli}} command graph.get --json '{}'\` (scope: tenant). Returns seats, edges, root, occupants, status rollups, and unassigned-seat flags. The output includes a single \`root_seat_id\`, exactly one \`is_root: true\` node, and unassigned seats listed under their own section with a data-quality note.
44623
44642
  - MCP tool: \`rost_get_responsibility_graph\` with \`{}\`; or read the resource \`rost://graph\` (tenant-admin token).
44624
44643
  - One seat: \`{{cli}} command seat.get --json '{"seat_id":"<seat-id>"}'\` or \`rost_get_seat_detail\`.
44625
44644
 
@@ -49864,10 +49883,27 @@ function renderGraph(output) {
49864
49883
  `root_seat_id=${field(record2, "root_seat_id")}`,
49865
49884
  "seat_id parent_seat_id type status name"
49866
49885
  ];
49886
+ const assigned = [];
49887
+ const unassigned = [];
49867
49888
  for (const node of nodes) {
49868
49889
  const row = asRecord(node);
49890
+ if (row.unassigned) {
49891
+ unassigned.push(row);
49892
+ } else {
49893
+ assigned.push(row);
49894
+ }
49895
+ }
49896
+ for (const row of assigned) {
49869
49897
  lines.push(`${field(row, "seat_id")} ${field(row, "parent_seat_id")} ${field(row, "seat_type")} ${field(row, "status")} ${field(row, "name")}`);
49870
49898
  }
49899
+ if (unassigned.length > 0) {
49900
+ lines.push("");
49901
+ lines.push("Unassigned (no path to root \u2014 data-quality signal)");
49902
+ lines.push("seat_id parent_seat_id type status name");
49903
+ for (const row of unassigned) {
49904
+ lines.push(`${field(row, "seat_id")} ${field(row, "parent_seat_id")} ${field(row, "seat_type")} ${field(row, "status")} ${field(row, "name")}`);
49905
+ }
49906
+ }
49871
49907
  return lines.join("\n");
49872
49908
  }
49873
49909
  function renderSeatList(output) {