usebeeline 0.1.40 → 0.1.43

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.
package/README.md CHANGED
@@ -173,6 +173,8 @@ Rooms run CodeGraph without a file watcher and keep source files read-only; only
173
173
  | Tool | Where | What it does |
174
174
  | ------------------------------------------------------ | -------------- | ------------------------------------------------------------- |
175
175
  | `open_corner` | Rooms, corners | Open one write-enabled corner with a ≤24-word objective |
176
+ | `order`, `report` | All member places | Send private orders down and reports one step up |
177
+ | `read`, `watch`, `list_rooms` | All member places | Discover and read addresses; watch corner lifecycle only |
176
178
  | `pr_checks_status` | Corners | Read checks, human hold, and PR/head-bound merge approval |
177
179
  | `post_artifact` | Everywhere | Upload one file (path or html/bytes) as an attachment |
178
180
  | `fetch_image` | Everywhere | Download one photograph into scratch for a data: embed |
@@ -18070,6 +18070,7 @@ var SERVER_EVENT_KINDS = [
18070
18070
  "joined",
18071
18071
  "schedule-ran",
18072
18072
  "corner-opened",
18073
+ "corner-closed",
18073
18074
  "check-passed",
18074
18075
  "check-failed",
18075
18076
  "merged",
@@ -18090,6 +18091,7 @@ var SERVER_EVENT_KIND_DETAIL = {
18090
18091
  "corner-opened": "fires when a corner opens under this Room",
18091
18092
  "check-passed": "fires when a corner's pull request checks turn green",
18092
18093
  "check-failed": "fires when a corner's pull request checks turn red",
18094
+ "corner-closed": "fires when a corner closes without merging",
18093
18095
  "merged": "fires when a corner's pull request merges",
18094
18096
  "grant-decided": "carries the grant id and status and resumes the turn that asked for the grant",
18095
18097
  "squire-approval-decided": "carries what was approved, denied, or left to expire and the Squire approval id, and resumes the turn that asked",
@@ -18116,7 +18118,7 @@ var PER_ITEM_EVENT_KINDS = [
18116
18118
  function isPerItemEventKind(value) {
18117
18119
  return PER_ITEM_EVENT_KINDS.includes(value);
18118
18120
  }
18119
- var SUBSCRIBABLE_EVENT_KINDS = SERVER_EVENT_KINDS.filter((kind) => !isPerItemEventKind(kind));
18121
+ var SUBSCRIBABLE_EVENT_KINDS = SERVER_EVENT_KINDS.filter((kind) => !isPerItemEventKind(kind) && kind !== "merged");
18120
18122
  function eventKindCatalogLines(kinds = SUBSCRIBABLE_EVENT_KINDS) {
18121
18123
  return kinds.map((kind) => `${kind} ${SERVER_EVENT_KIND_DETAIL[kind]}`);
18122
18124
  }
@@ -38896,12 +38898,12 @@ var BEELINE_TRIAGE_SKILL_NAME = "beeline-triage";
38896
38898
  var BEELINE_REVIEW_SKILL_NAME = "beeline-review";
38897
38899
  var BEELINE_SPEC_SKILL_NAME = "beeline-spec";
38898
38900
  var BEELINE_ROOM_MECHANICS = [
38899
- "Files and photos on the message you are answering are downloaded for you: read them at the local path named in the prompt (photos may also arrive inline). A file on an earlier message shows only as a \u{1F4CE} marker with an id; call beeline-agent download_attachment with that message id and attachment id, then read the returned path. Never fetch a media URL; if the download fails, tell the requester you could not open the file.",
38900
- "To create a file you can send, call beeline-agent write_scratch_file with a relative path and content - text by default, or base64 for bytes you computed; it returns a path in your writable session home. To send a file, call beeline-agent post_artifact with a path inside your checkout or anywhere in your writable session home (wherever a file you or your harness generated actually landed, including one you just wrote), or with html/bytes content directly; it is uploaded and attached to your reply, and title and mime default from the file when you post by path. write_scratch_file produces the file, not a picture.",
38901
+ "Files and photos on the message you are answering are downloaded for you: read them at the local path named in the prompt (photos may also arrive inline). A file on an earlier message shows only as a \u{1F4CE} marker with an id; call beeline-agent download_attachment with that message id and attachment id, then read the returned path. Never fetch a media URL; if the download fails, report blocked: to your commander with the missing file.",
38902
+ "To create a file you can send, call beeline-agent write_scratch_file with a relative path and content - text by default, or base64 for bytes you computed; it returns a path in your writable session home. To send a file, call beeline-agent post_artifact with a path inside your checkout or anywhere in your writable session home (wherever a file you or your harness generated actually landed, including one you just wrote), or with html/bytes content directly; it is uploaded and attached to your next report or human reply, and title and mime default from the file when you post by path. write_scratch_file produces the file, not a picture.",
38901
38903
  "To run something later or repeatedly, call beeline-agent create_schedule (interval in minutes or a 5-field cron, optional maxRuns); list_schedules / update_schedule / delete_schedule manage them, including schedules other agents created for themselves.",
38902
38904
  `To react to a message in this Room, call beeline-agent react_to_message with its message id and one supported emoji (${MESSAGE_REACTION_EMOJIS.join(" ")}).`,
38903
- `To react to events without a timer, call beeline-agent create_subscription for a Room event, a covered repository event, or a connected service event listed by list_subscription_events. Set a prompt for what you will do, or name a saved workflow to start. list_subscriptions and delete_subscription manage each one. Room kinds: ${eventKindCatalogLines().join("; ")}. A subscription runs its action when its event arrives, with outside payloads quoted as untrusted data. No approval or URL setup is needed. You do this yourself. subscribe_events remains available for replacing your older Room-event kind list; list_event_subscriptions shows that list. A corner merging wakes nobody in its parent Room by default. For follow-up work, create a merged subscription in the parent Room before the merge, with a prompt identifying the corner you are waiting for. Act only on that corner; post nothing for any other merge. Never post just to acknowledge a merge: the merge card already announces it. Delete the subscription when the follow-up is done. A grant, connector offer, choice, poll, or Squire approval you asked for wakes you back automatically; there is nothing to subscribe to for those item-specific events, and asking is refused.`,
38904
- "If you need reach outside the sandbox, call beeline-agent request_grant. If you already know discrete options, call beeline-agent ask_choice (one human, optional) or open_poll (every human in this Room, required deadline). A poll is refused below two electors and above fifty, and in a DM. A plurality is a fact, never permission to deploy, delete, merge, or spend. Open-ended asks stay tagged prose. Never put Always / Once / No on a preference.",
38905
+ `To react to events without a timer, call beeline-agent create_subscription for a Room event, a covered repository event, or a connected service event listed by list_subscription_events. Set a prompt for what you will do, or name a saved workflow to start. list_subscriptions and delete_subscription manage each one. Room kinds: ${eventKindCatalogLines().join("; ")}. A subscription runs its action when its event arrives, with outside payloads quoted as untrusted data. No approval or URL setup is needed. You do this yourself. subscribe_events remains available for replacing your older Room-event kind list; list_event_subscriptions shows that list. Use watch(address) for corner lifecycle events: opened, merged and closed. Opening automatically watches that corner. Chatter and schedules never wake watchers. A grant, connector offer, choice, poll, or Squire approval you asked for wakes you back automatically; there is nothing to subscribe to for those item-specific events, and asking is refused.`,
38906
+ "If you need reach outside the sandbox, call beeline-agent request_grant. If you already know discrete options, call beeline-agent ask_choice (one human, optional) or open_poll (every human in this Room, required deadline). A poll is refused below two electors and above fifty, and in a DM. A plurality is a fact, never permission to deploy, delete, merge, or spend. Work decisions use report needs-decision: to your commander. Never put Always / Once / No on a preference.",
38905
38907
  "To state something that happened so the Room and other agents can act on it, call beeline-agent emit_event with your own agent:<slug> kind, one sentence, and optionally the agent members to wake. Chains of events are bounded and a refused emit posts nothing."
38906
38908
  ].join(" ");
38907
38909
  function runningBeelineReleaseId(env = process.env, read2 = (path) => readFileSync9(path, "utf8")) {
@@ -38925,11 +38927,11 @@ description: How to answer inside a Beeline Room.
38925
38927
 
38926
38928
  # Using Beeline
38927
38929
 
38928
- These mechanics apply in Rooms and corners. ${BEELINE_ROOM_MECHANICS}
38930
+ Orders flow down and reports flow up. Use open_corner(room, brief) to set up work and become its commander. Use order(address, text), read(address) and watch(address) across member Rooms, corners and DMs. Report only to whoever ordered you, with done:, blocked:, needs-decision: or failed:. Agent-to-agent delivery is private; a human report is visible where they gave the order. No reminder loops. These mechanics apply in Rooms, corners and DMs. ${BEELINE_ROOM_MECHANICS}
38929
38931
 
38930
38932
  ## Conflicting human instructions
38931
38933
 
38932
- Follow your own owner first, then this Workspace's owner and admins, then members. A higher-tier instruction overrides a lower-tier hold. A human at the same standing cannot clear another human's hold; only that holder or someone of higher standing can. Never tell a higher-tier human that a lower-tier hold binds them. Reason from the conversation. When you explain a hold or go-ahead in the Room, name the person and their standing in ordinary words. Never write field names or field=value syntax such as workspaceRole=member or agentOwner.
38934
+ Follow the order from your commander within inherited scope. If you cannot settle a choice, report one step up. Resource ownership and existing hold standing still apply. A higher-tier instruction overrides a lower-tier hold. A human at the same standing cannot clear another human's hold; only that holder or someone of higher standing can. Never tell a higher-tier human that a lower-tier hold binds them. Reason from the conversation. When you explain a hold or go-ahead in the Room, name the person and their standing in ordinary words. Never write field names or field=value syntax such as workspaceRole=member or agentOwner.
38933
38935
 
38934
38936
  ## Tools and the Connectors
38935
38937
 
@@ -38939,7 +38941,7 @@ The tools this build knows, what each is for, and which the owner of this machin
38939
38941
 
38940
38942
  **Inspect your own host before answering.** When a question is about a system on the machine you run on, inspect its live state with the tools you have: processes, logs, local endpoints or service status. Say what you checked. Memory and Room history are not evidence of current state.
38941
38943
 
38942
- **Use available tools before asking the person.** Before asking a person for a code, a status or a file, call connectors_status and check whether a tool or connected app you already have can get it, then use it. This includes an emailed verification code in an already-connected inbox. Ask only when none can, and say why. The key-ownership and grant rules still apply.
38944
+ **Use available tools before reporting a blocker.** Before asking a person for a code, a status or a file, call connectors_status and check whether a tool or connected app you already have can get it, then use it. This includes an emailed verification code in an already-connected inbox. Report blocked: to your commander only when none can, and say why. The key-ownership and grant rules still apply.
38943
38945
 
38944
38946
  **Offer the tool at the moment you need it.** When the work in front of you needs a tool the person does not have, do not send them to a settings page and do not stop at naming it. Call connectors_status first - a tool they already have is used, not offered. In a Room or DM, call offer_connector with the connectorType and one short reason: a card appears there, spoken by you, addressed to the person you are answering, with one action. Connector offers are unavailable in corners; use a Room or DM for those. When the person wants Squire on a different Google account (or its signed-in account is the wrong one), call offer_connector with connectorType trusty-squire and intent "switch" - a plain connect keeps the account it already has. Your turn pauses on the card - say in prose what you are waiting for and end the turn; you are woken when it is added, and then you carry on.
38945
38947
 
@@ -38955,7 +38957,7 @@ Each agent runs on one owner's machine, with that owner's keys, hosts, and netwo
38955
38957
 
38956
38958
  - Check your own capabilities with connectors_status and your tools. Never infer another agent's.
38957
38959
  - A failure saved from another machine is not proof here. Try it first.
38958
- - If you cannot do X here, say "I can't do X on this machine because Y", then hand off to an agent that memory shows has done X, or ask the requester who has access.
38960
+ - If you cannot do X here, say "I can't do X on this machine because Y", then hand off to an agent that memory shows has done X, or report blocked: to your commander with the capability you need.
38959
38961
 
38960
38962
  ## Memory
38961
38963
 
@@ -38993,112 +38995,44 @@ When the mock needs a real product photo, do not draw an SVG stand-in. Call beel
38993
38995
  function beelineReviewSkillMarkdown(releaseId) {
38994
38996
  return `---
38995
38997
  name: beeline-review
38996
- description: Review a corner pull request against the brief's outline, the approval quote, and the Beeline merge gate.
38998
+ description: Review a corner's current green head against its assigned brief and report only blocking findings.
38997
38999
  ---
38998
39000
 
38999
39001
  <!-- beeline-release: ${releaseId} -->
39000
39002
 
39001
- # Beeline pull-request review
39003
+ # Beeline review
39002
39004
 
39003
- Follow these steps in order. Do not skip or reorder them.
39005
+ ## Inspect the assigned head
39004
39006
 
39005
- ## 1. Isolate the revision
39007
+ Read the current server-assigned brief and every required file. Its stories, criteria, non-goals and risks define scope; the commander order and inherited human constraints win conflicts. The short objective and PR description cannot change scope. Only a commander-authorized brief revision removes a requirement.
39006
39008
 
39007
- - Run \`gh pr view N --json headRefOid,files\` and record \`headRefOid\`.
39008
- - Run \`gh pr diff N\`.
39009
- - Review the objective, files, and complete PR diff before making another working copy.
39010
- - Check out that exact head only when an empirical command must read or run the tree. Never use the author's worktree.
39011
- - When a checkout is needed, create a temporary detached worktree, install an EXIT trap that removes it with \`git worktree remove --force\` and deletes its temporary directory, and run every command there. Cleanup is mandatory on PASS, FAIL, and command error.
39012
- - For a deterministic one-shot bootstrap use \`npm run review:exact-head -- <sha> [--typecheck <pkg> \u2026] [--] <pkg>:<glob> \u2026\`: it checks that exact head out, runs \`npm ci\`, builds the workspace package exports, runs the given typechecks and targeted tests with non-interactive PASS/FAIL summaries, and removes the worktree itself (pass \`--keep\` to keep it and print the removal command).
39013
- - Review and test only the recorded revision. If the head moves, clean up the scratch worktree and start over.
39009
+ Read the whole diff before creating a checkout. Use \`gh pr view N --json headRefOid,files\` and \`gh pr diff N\`. Review only that exact head; if it moves, start again. If you wrote its code, arrange independent review through your commander rather than reviewing your own work.
39014
39010
 
39015
- ## 2. P0 - OUTLINE FULFILLED, DEMONSTRATED
39011
+ For commands that need the tree, use a detached temporary worktree; never the worker's active worktree. Install an EXIT trap with \`git worktree remove --force\` and remove it on PASS, FAIL or error. The one-shot helper is \`npm run review:exact-head -- <sha> [--typecheck <pkg> \u2026] [--] <pkg>:<glob> \u2026\`: it installs dependencies, builds package exports, runs named checks and cleans up. Check synchronization with the target branch, types, relevant tests, docs, lint and CI. An empty CI rollup alone proves nothing: \`pr_checks_status\` with checks="passed" and checkCount=0 is the server-confirmed green path. A missing reviewer PASS can keep mergeAllowed false while you review.
39016
39012
 
39017
- Read the server-assigned brief and its current revision, including every required file. Quote the approval with its message ID and approver before considering the short objective. The spec's outline (user stories, acceptance criteria, non-goals, risks) is the scope, and the approval quote is the human's own words: it wins any conflict with the spec. The short objective is navigation-only text and the PR description cannot add, remove, or narrow scope. A revision with no recorded approval is reviewed against its spec alone. If a required file is unavailable, or the revision changes during review, refuse approval and describe what is missing. A requirement may become out of scope only through a new human-authorized brief revision; reviewer discretion, implementation difficulty, and silence never remove it. A passing narrow test does not prove a broader requirement. Review a deliberate human choice as written, even if it is unusual.
39013
+ ## Obtain proof
39018
39014
 
39019
- Before general correctness, produce an outline ledger in spec order: list every \`## User stories\` and \`## Acceptance criteria\` line exactly once as met, unmet, unverified, or out of scope, followed by concrete evidence (for a criterion, the named test run against the PR head) - no stories to list is a FAIL, sent back to the author to write the outline; confirm nothing under \`## Non-goals\` was done; confirm every \`## Risks\` line was addressed or explicitly accepted with a stated reason. For a frontend change, open the rendered screens; when the brief includes a mock, compare them against it, noting every visible deviation. A mock is optional; its absence does not block PASS. Any missing, unmet, unverified story or acceptance criterion, done non-goal, unaddressed risk, or unreviewed mock mismatch blocks PASS. Out of scope is valid only when the current revision itself records the human-authorized removal.
39015
+ Check every story and criterion, confirm non-goals stayed out, and resolve or explicitly accept each risk. Keep your working notes private; do not post an outline ledger.
39020
39016
 
39021
- Before judging the implementation, independently repeat the two judgment legs from request triage:
39017
+ For a bug, reproduce the reported behavior on the target branch and repeat the recorded reproduction on the PR head. If no reproduction was obtained, require that fact and a regression demonstration. For any request, verify its user benefit and check for confirmed duplicate, obsolete or out-of-scope work.
39022
39018
 
39023
- - **Work warranted:** For a bug, reproduce the reported behavior on the target branch. For another request, establish the unmet user need from the request and current product. Search current code, history, issues, and open or recently merged pull requests for work that already resolves or supersedes it. Treat title similarity only as a candidate, not proof of duplication. FAIL confirmed duplicate or obsolete work.
39024
- - **Desirable:** Check repository-owned goals, invariants, architecture, and established product behavior. Require a concrete user benefit, the smallest coherent solution, and no unapproved scope. FAIL a confirmed conflict or an unsupported product judgment; put merely plausible concerns below as non-blocking findings.
39019
+ Make the user-visible result happen with the built app or affected service. If an interactive surface is unavailable, run the narrowest script exercising the actual path. Inner-function tests, code inspection and logs do not prove a visual claim. Demand only proof the worker can produce with its own tools. Agents have no signed-in Beeline browser session or review secret; do not require them. Obtain available proof in the review Workspace. If proof genuinely needs a person, the worker reports blocked: to its commander once. Do not keep failing review on that unavailable proof; report the dependency up the chain and use available evidence without claiming the missing proof exists.
39025
39020
 
39026
- - Quote the approval text, with its message ID, exactly as stored. Do not quote the short objective as product truth.
39027
- - Derive the end-user story from the spec and the approval quote in one sentence: \`a user who does X sees Y\`.
39028
- - Make Y happen against the built PR head: run the app or affected service and perform X.
39029
- - If no interactive surface is reachable, run the narrowest test or script that exercises the exact user path and prints the observable Y.
39030
- - Record the command and the observed Y.
39031
- - A unit test of an inner function, a log line, \`the code looks right\`, or any other proxy does not count.
39032
- - If the user-visible Y cannot be produced, FAIL now. Nothing below can rescue the review.
39033
- - For a bug, if a \`Reproduction <id>\` was recorded, quote it, re-run that exact user path on the PR head, and record that the wrong result is gone. FAIL if that proof does not name the identifier, even when other tests pass. If none was obtained, require the proof to say so plainly and show the regression instead; do not fail the review for a missing identifier.
39034
- - State whether the diff meets every user story and the approval quote without unapproved scope.
39021
+ For UI changes, compare rendered screens with any supplied mock and DESIGN.md. Use theme tokens, existing type roles, spacing, components and touch targets. In Beeline run \`npx vitest run sources/buzz/calm-lint sources/buzz/design-lint\` from apps/mobile and require proof in both Obsidian and Bone. A baseline increase or unexplained allowlist entry blocks PASS.
39035
39022
 
39036
- ## 3. Empirical pass second
39023
+ Test one concrete failure sequence for each changed behavior. Confirm every blocker by a command or exact source evidence. Check resource authority, credentials and migration safety. Reject unrequested machinery, redundant paths and scope creep. Plausible concerns and cosmetic preferences do not block delivery.
39037
39024
 
39038
- Check the brief revision and code head for base synchronization, tests, documentation, lint and types, publication, and CI. A required check that was skipped, failed, or not verified blocks PASS. An empty rollup alone is not proof of passing checks. Use pr_checks_status for the exact current head: checks="passed" with checkCount=0 is the server-confirmed no-checks path and satisfies the CI prerequisite for review. Do not refuse review because no literal green check exists, and do not require mergeAllowed=true before reviewing: the missing reviewer PASS itself keeps that gate closed. Pending, failed, or unknown checks still block approval. Reuse valid author evidence; run targeted independent checks where needed. A screenshot or rendered app is needed for visual claims, and server-boundary behavior for authorization claims.
39025
+ ## Report the verdict
39039
39026
 
39040
- - Run the repository typecheck and tests touched by the diff.
39041
- - If the spec or the approval quote names a user path, exercise that path.
39042
- - Record every command and exit code.
39043
- - A review with no executed command is invalid and must FAIL.
39027
+ Lead with the verdict and the one blocking reason, then the concrete next step for the worker. List only blocking items. No full outline ledger, message IDs, commit hashes, command transcripts or non-blocking findings in the posted review; put details behind an evidence link when needed.
39044
39028
 
39045
- ### Design rules
39029
+ PASS: ready to land
39030
+ Next: call merge_corner when the live gate allows it
39046
39031
 
39047
- When the diff touches UI and the repository has a DESIGN.md, check every changed style against its rules: colours from theme tokens only, the type roles, the spacing scale, the allowed radii, elevation, the shared components, and touch targets.
39032
+ FAIL: a removed Room member can still read its transcript
39033
+ Next: fix the membership guard and repeat the authenticated read proof
39048
39034
 
39049
- - Run the repository's design lints. In Beeline, from \`apps/mobile\`: \`npx vitest run sources/buzz/calm-lint sources/buzz/design-lint\`.
39050
- - FAIL when a design baseline count grows, or when an allowlist entry is added without naming the design decision behind it.
39051
- - Require a screenshot or rendered proof of every visual change in each theme the app ships (in Beeline, Obsidian and Bone).
39052
- - A design-rule violation is an engineering finding and blocks PASS.
39053
-
39054
- ## 4. Adversarial pass
39055
-
39056
- - For every changed function, name one concrete input or sequence that breaks it.
39057
- - If none is found, write \`none found\` for that function.
39058
-
39059
- ## 5. Verify before reporting
39060
-
39061
- - Confirm every finding by reading the exact line or by running a command.
39062
- - Put unconfirmed concerns under plausible findings. They never block.
39063
-
39064
- ## 6. Bloat guard
39065
-
39066
- - Compare net lines with the spec, its user stories and non-goals, and the approval quote.
39067
- - FAIL backwards-compatibility shims, dual paths, feature flags, or abstractions with one caller.
39068
- - FAIL machinery the spec and the approval quote did not ask for.
39069
-
39070
- ## 7. Security and data
39071
-
39072
- - Check credentials, authorization boundaries, and destructive migrations.
39073
-
39074
- ## 8. Gate and verdict
39075
-
39076
- - Review the exact green head named in your reviewer instruction; a server-confirmed zero-check passed head counts as green. If the head moved, do not approve it.
39077
- - Re-read the assigned brief revision before the verdict. A repair changes the head and invalidates affected evidence; a requirement correction invalidates the relevant verdict even if code did not change. Keep product-completeness findings (a missing or contradicted user story, done non-goal, unaddressed risk, mock mismatch, or approval quote) separate from engineering findings (correctness, security, maintainability, tests). Give every confirmed finding a stable ID that survives rereview, the affected outline line or \`engineering\`, location, severity, evidence, and repair disposition. Reuse the same ID until that finding is resolved. Mechanical repairs return to the author; ask a human only for a genuinely unresolved product choice. Do not run a nested validation pipeline or push the author's branch.
39078
- - Always use this exact verdict shape:
39079
-
39080
- \`approval quoted with its message ID:\`
39081
- \`user story:\`
39082
- \`work warranted evidence:\`
39083
- \`desirability evidence:\`
39084
- \`reproduction id (or none obtained):\`
39085
- \`proof of that reproduction (or none obtained + regression):\`
39086
- \`how Y was demonstrated (or FAIL):\`
39087
- \`commands run + results:\`
39088
- \`brief revision:\`
39089
- \`outline ledger (every user story, acceptance criterion, non-goal and risk + status + evidence; mock-vs-screen notes for frontend work):\`
39090
- \`product-completeness findings (block):\`
39091
- \`engineering findings (block):\`
39092
- \`plausible findings (do not block):\`
39093
- \`net lines:\`
39094
- \`decision: PASS|FAIL\`
39095
-
39096
- Then take exactly one action:
39097
-
39098
- - FAIL: reply \`@author\` with the confirmed findings and the reviewed head SHA to fix.
39099
- - PASS: call \`approve_merge\` with the reviewed head SHA, then reply \`approved <reviewed sha>\` without tagging the author. Do not tell the author to merge.
39100
- - A human's question or proposal in the corner discussion with no answer is a blocking finding: FAIL and name it.
39101
- - Approving is your last step as reviewer. Your PASS is the yes that wakes the author, who merges that exact head with \`merge_corner\` once checks are green and no hold stands. You never merge it yourself.
39035
+ On FAIL, use \`order(address, text)\` at the corner's address with that concise verdict and next step. On PASS, call \`approve_merge\` with the exact reviewed head SHA as its tool argument, then report done: PASS with the result to your commander. PASS wakes the implementer to land. Follow an explicit commander order to land with \`merge_corner\` when the live gate permits it. If a choice or dependency exceeds your authority, report needs-decision: or blocked: one step up. Orders go down; reports go up. Do not start a nested validation pipeline or push the worker's branch.
39102
39036
  `;
39103
39037
  }
39104
39038
  function beelineSpecSkillMarkdown(releaseId) {
@@ -39114,7 +39048,7 @@ description: Prepare or revise a durable corner assignment from Room decisions b
39114
39048
  Create an assignment a fresh session can execute without the parent transcript. A brief has three parts:
39115
39049
 
39116
39050
  - \`spec\`: one Markdown doc you write, with these headings:
39117
- - \`## Intent\`: the human's own words, quoted exactly, each with its Room message ID. Never substitute a summary.
39051
+ - \`## Intent\`: the commander's exact order and inherited human constraints, quoted exactly, each with its message or private order ID. Never substitute a summary.
39118
39052
  - \`## User stories\`: what this enables, one per line as "a person who does X sees Y". Only stories traceable to the quoted Intent; never import a plan, a teammate's suggestion, or your own idea as a story. Keep unaffected lines as they are across revisions.
39119
39053
  - \`## Acceptance criteria\`: the requester's own rules from \`## Intent\`, quoted verbatim and numbered, each naming the test (existing or to be written) that fails if the rule is broken anywhere. Criteria are the invariant; stories are examples of it. Write "None beyond the stories." when the request states no rule.
39120
39054
  - \`## Non-goals\`: explicit exclusions.
@@ -39122,7 +39056,7 @@ Create an assignment a fresh session can execute without the parent transcript.
39122
39056
  - \`## References\`: each reference or optional mock with what it is and whose call it is; use DESIGN.md or existing app styles when there is no mock.
39123
39057
  Add implementation guidance under further headings when it helps.
39124
39058
  - files (\`attachments\`): the Room files the worker needs, each with its purpose and whether it is required.
39125
- - \`approval\`: one human Room message ID. The server quotes that message's exact text and author; the quote wins any conflict with the spec.
39059
+ - \`approval\`: the initiating human message ID or private commander order ID. The server quotes that message's exact text and author; the quote wins any conflict with the spec.
39126
39060
 
39127
39061
  Do not infer approval from silence, assent to different prose, or the mere existence of a plan. Keep agent recommendations labelled as recommendations. Do not promote a plausible UX detail, algorithm, failure message, or extra test into a user story merely because it sounds helpful.
39128
39062
 
@@ -39144,7 +39078,7 @@ Use your judgment about how much planning work needs. This loop can help for a l
39144
39078
 
39145
39079
  - Write the actor/action/observable-result stories.
39146
39080
  - Map each story to its own observable line and explicit non-goals.
39147
- - If one unresolved choice would materially change behavior, scope, irreversible effects, or the intended result, present only that choice or the affected brief slice to the human. Use the answering message as the \`approval\`. Never treat no answer as approval.
39081
+ - If one unresolved choice would materially change behavior, scope, irreversible effects, or the intended result, report needs-decision: with that choice or the affected brief slice to your commander. Use the answering message as the \`approval\`. Never treat no answer as approval.
39148
39082
 
39149
39083
  ### 3. Architecture and data flow
39150
39084
 
@@ -39170,12 +39104,12 @@ Use your judgment about how much planning work needs. This loop can help for a l
39170
39104
  ### 7. Bounded adversarial second read (default on)
39171
39105
 
39172
39106
  - Spend one pass, bounded to the drafted scope, trying to disprove completeness: find a missing story, authority mismatch, unhandled failure, user story without proof, mock ambiguity, accidental scope expansion, or task-order hazard.
39173
- - Return findings to the planning agent and repair the draft. Escalate only a genuinely material product choice to the human; engineering choices and mechanical gaps are resolved in the plan.
39107
+ - Return findings to the planning agent and repair the draft. Report a material product choice to your commander; engineering choices and mechanical gaps are resolved in the plan.
39174
39108
  - End after one adversarial pass unless its repair exposes one new material product choice. Do not recursively review the review.
39175
39109
 
39176
39110
  ## Dispatch and revision
39177
39111
 
39178
- The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Use judgment to ask about a genuinely ambiguous request or a large new feature; when a person asks for a spec or mock, produce it before building. Use the dispatching message as the \`approval\`; if you ask for clarification, carry the answering message into the brief.
39112
+ The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Report needs-decision: to your commander for material unresolved intent; when a person asks for a spec or mock, produce it before building. Use the dispatching message as the \`approval\`; if you ask for clarification, carry the answering message into the brief.
39179
39113
 
39180
39114
  Pass the brief as \`open_corner.brief\`. Read the current revision before revising and use \`revise_corner_brief\` with the complete replacement spec, the approving message, and a concise change description. Preserve unaffected intent quotes, user stories, and references. The latest revision governs implementation and review; chat prose alone never changes scope.
39181
39115
  `;
@@ -39197,9 +39131,9 @@ Run these checks before opening a corner.
39197
39131
  - Rewrite the request as a concrete outcome and the user stories it enables.
39198
39132
  - State material exclusions (non-goals) and the risks needed to prevent unrequested work or surprise.
39199
39133
  - Keep the corner objective complete and within 24 words.
39200
- - Use judgment to ask about a genuinely ambiguous request or a large new feature. When a person asks for a spec or mock, produce it before building.
39134
+ - Report needs-decision: to your commander for material unresolved intent. When a person asks for a spec or mock, produce it before building.
39201
39135
  - Once it's resolved, say plainly if the request itself is suboptimal and give your own recommendation - you are expected to disagree, not just permitted to.
39202
- - On a judgment call you're still not sure of, tag a Room colleague for an adversarial second opinion and ask them to reply tagging you back; skip this only when you are the only agent in the Room.
39136
+ - On a judgment call you're still not sure of, order a corner or agent DM for one adversarial second opinion; have the chosen agent report back; a Room order broadcasts to every peer; skip this only when you are the only agent in the Room.
39203
39137
 
39204
39138
  ## 2. Is work warranted?
39205
39139
 
@@ -42355,19 +42289,19 @@ function cornerHasRepositoryWork(brief) {
42355
42289
  return false;
42356
42290
  return true;
42357
42291
  }
42358
- var CORNER_RUNTIME_AUTHOR_CONTRACT = `The current brief's spec \u2014 stories, criteria, non-goals, risks \u2014 defines scope and done. The human approval quote wins any conflict. The short objective is navigation-only, never scope.
42292
+ var CORNER_RUNTIME_AUTHOR_CONTRACT = `The current brief's spec \u2014 stories, criteria, non-goals, risks \u2014 defines scope and done. The commander's order quote and inherited human constraints win any conflict. The short objective is navigation-only, never scope.
42359
42293
  Meet every story; respect every non-goal and risk.
42360
42294
  Before any code or build action, the brief must hold this ask's outline; opening and prompting inside it is not that outline. When it has none or the ask changed, read the revision and write it with revise_corner_brief first; chat never revises it.
42361
- The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Use judgment to ask about a genuinely ambiguous request or a large new feature; when a person asks for a spec or mock, produce it before building.
42295
+ The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Report needs-decision: to your commander for a material unresolved choice; when a person asks for a spec or mock, produce it before building.
42362
42296
  Follow the beeline-triage skill's bugfix execution contract when the spec or its approval quote reports a defect.
42363
42297
  Reproduce as triage isolated it with available emulator, Playwright, browser and test runner. Record attempts and observations. If a reproduction is obtained, record it under Reproduction <id>, reusing triage's identifier when it recorded one. If reproduction fails, warn and continue; never stop and never condition the fix on reproduction.
42364
42298
  Fix only the spec and approval quote. With a reproduction, change only what removes it and meets its user stories.
42365
42299
  Deliver files with post_artifact; answer plain chat questions directly.
42366
42300
  No unrequested features, flags, compatibility shims or refactors.`;
42367
- var CORNER_AUTHOR_CONTRACT = `The current brief's spec \u2014 stories, criteria, non-goals, risks \u2014 defines scope and done. The human approval quote wins any conflict. The short objective is navigation-only, never scope.
42301
+ var CORNER_AUTHOR_CONTRACT = `The current brief's spec \u2014 stories, criteria, non-goals, risks \u2014 defines scope and done. The commander's order quote and inherited human constraints win any conflict. The short objective is navigation-only, never scope.
42368
42302
  Meet every story; respect every non-goal and risk. Use its file manifest.
42369
42303
  Before any code or build action, the brief must hold this ask's outline; opening and prompting inside it is not that outline. When it has none or the ask changed, read the revision and write it with revise_corner_brief first; chat never revises it.
42370
- The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Use judgment to ask about a genuinely ambiguous request or a large new feature; when a person asks for a spec or mock, produce it before building.
42304
+ The dispatching message authorizes the work; build against the brief without asking for separate spec or mock approval. Report needs-decision: to your commander for a material unresolved choice; when a person asks for a spec or mock, produce it before building.
42371
42305
  Follow the beeline-triage skill's bugfix execution contract when the spec or its approval quote reports a defect.
42372
42306
  Reproduce as triage isolated it with available emulator, Playwright, browser and test runner. Record attempts and observations. If a reproduction is obtained, record it under Reproduction <id>, reusing triage's identifier when it recorded one. If reproduction fails, warn and continue; never stop and never condition the fix on reproduction.
42373
42307
  Fix only the spec and approval quote. With a reproduction, change only what removes it and meets its user stories.
@@ -42375,30 +42309,27 @@ Only when the brief calls for repository changes, follow the PR procedure below.
42375
42309
  Before the PR, demonstrate Y: run the built app or affected service and perform X. If no interactive surface is reachable, run the narrowest test or script exercising the exact user path and printing Y. An inner-function unit test, log line or code read is not a demonstration.
42376
42310
  The PR body MUST have ## Reproduced and ## Demonstrated. Cite Reproduction <id> in both, with steps, the wrong result and the now-passing result. In ## Demonstrated, when none was obtained, state that plainly ("not obtained") and show the regression; for feature work say "not a defect report".
42377
42311
  No unrequested features, flags, compatibility shims or refactors.`;
42378
- var CORNER_REVIEWER_SESSION_INSTRUCTION = "You are this Room's configured reviewer. Your PASS is approve_merge on the current green PR head, which your turn prompt names. Call it when that head is ready to merge. Never merge a pull request you review.";
42312
+ var CORNER_REVIEWER_SESSION_INSTRUCTION = "As configured reviewer, review the assigned green head with approve_merge. Demand available proof; report missing capability to your commander once. PASS wakes the implementer to land; use merge_corner yourself only on an explicit commander order.";
42379
42313
  var CORNER_REVIEWER_UNSTABLE_HEAD_INSTRUCTION = "The current PR head is not green, so approve_merge on it fails now. The server wakes you when checks pass on the current head.";
42380
42314
  var CORNER_DELIVERY_NUDGE = "Only when you write code in this corner and the brief calls for repository changes, inspect the repository state and finish delivering the work unless a human hold stands: commit and push the intended changes and open the pull request if one does not exist. Decide yourself whether any remaining dirty work belongs to the brief; do not discard it merely to make the worktree clean. The pull request body must carry ## Reproduced and ## Demonstrated; if they are missing, add them before ending the turn. Otherwise do not commit, push or open a PR; deliver with post_artifact.";
42381
- var CORNER_LAND_RULE = "Then, if a human's question or proposal in the corner has no answer, name it and do not merge; otherwise call merge_corner.";
42382
- var CORNER_CHECKS_NUDGE = `Call pr_checks_status now. If checks="failed" and you write code in this corner, fix the failure and push. If checks="unknown", reply in this corner with the tool reason and stop instead of retrying. Otherwise stop: a reviewer's PASS wakes you to merge with merge_corner. Never merge it any other way.`;
42315
+ var CORNER_LAND_RULE = "Then call merge_corner when the live merge gate allows it. Report unresolved questions to your commander.";
42316
+ var CORNER_CHECKS_NUDGE = `Call pr_checks_status now. If checks="failed" and you write code in this corner, fix the failure and push. If checks="unknown", report blocked: to your commander with the tool reason and stop instead of retrying. Otherwise stop: a reviewer's PASS wakes you to merge with merge_corner. Use merge_corner for landing.`;
42383
42317
  var handle = (value) => value.replace(/^@/, "");
42384
42318
  function memoryListsWorkspaceCoreProcedure(memory) {
42385
42319
  return (memory ?? "").split("\n").some((line) => line.startsWith(`- Procedure ${WORKSPACE_CORE_SKILL_SLUG} (load_workspace_skill):`));
42386
42320
  }
42387
42321
  function cornerMergeInstruction(reviewerHandle) {
42388
- if (!reviewerHandle)
42389
- return "Once the pull request exists, reply with its full URL and end the turn; do not check or wait for CI. This Room has no configured reviewer, so it merges only on a person's yes: ask a Workspace owner or admin to approve the merge, then record their yes with order_corner_merge. You are woken to fix failing checks or a merge GitHub refused.";
42390
- const reviewer = `the reviewer (${handle(reviewerHandle)})`;
42391
- return `Once the pull request exists, reply with its full URL and end the turn; do not tag ${reviewer}, check, or wait for CI. Green checks wake ${reviewer}; its PASS wakes you to merge. ${CORNER_LAND_RULE} You are also woken to fix failing checks, requested changes, or a refused merge; a fixed head needs green checks and a fresh yes.`;
42322
+ const review = reviewerHandle ? `Green checks wake the reviewer (${handle(reviewerHandle)}); its PASS wakes you to merge.` : "If review capability is missing, report blocked: to your commander.";
42323
+ return `Once the pull request exists, report its URL when useful and end the turn; do not poll CI. ${review} Call merge_corner when the live gate allows it. Repair failing checks, requested changes or a refused merge; a new head needs a fresh yes.`;
42392
42324
  }
42393
42325
  function cornerReviewerInstruction(input) {
42394
42326
  if (!input.isReviewer)
42395
42327
  return void 0;
42396
- const author = input.authorHandle ? handle(input.authorHandle) : void 0;
42397
42328
  const number = input.pullRequestNumber ?? "N";
42398
42329
  const headSha = input.headSha ?? "<head sha>";
42399
- return `Checks are green on PR #${number} at ${headSha}${input.briefRevision ? ` with assigned brief revision ${input.briefRevision}` : ""}. Review it now with the beeline-review skill against that exact head and current assigned brief. FAIL: ${author ? `reply \`@${author}\`` : "tag the agent that wrote this head"} with the confirmed findings and the reviewed head ${headSha} to fix. PASS: call the approve_merge tool for ${headSha}, then reply \`approved ${headSha}\` without tagging ${author ?? "the author"}: your PASS wakes the author to merge, so a tag adds nothing. A human's question or proposal in the corner discussion with no answer is a FAIL finding; name it. Never merge yourself or tell the author to merge. Never say you are holding or waiting for checks.`;
42330
+ return `Review PR ${number} at ${headSha}${input.briefRevision ? ` against brief revision ${input.briefRevision}` : ""} with beeline-review. Lead with PASS or FAIL and one blocking reason, then the worker's concrete next step. List only blockers; keep outline notes, message IDs and commit hashes out of the posted review. Obtain live proof in the review Workspace; report blocked: to your commander if capability is missing. FAIL: order the worker at this corner's address to fix the blocker. PASS: call approve_merge with the reviewed head SHA as a tool argument, then report done: PASS to your commander. PASS wakes the implementer to land. If your commander explicitly orders you to land, use merge_corner when the live gate permits it.`;
42400
42331
  }
42401
- var CORNER_REVIEWER_AUTHOR_MERGE = "If you wrote this corner's code, no agent can review your own code; a person is your reviewer. Once the pull request exists, reply with its full URL, tag the person who assigned you this work, and ask them to approve the merge; only a Workspace owner or admin's yes counts. Record their yes with order_corner_merge. Never merge it any other way. You are woken to fix failing checks or a merge GitHub refused.";
42332
+ var CORNER_REVIEWER_AUTHOR_MERGE = "If you wrote this corner's code, arrange independent review through your commander. Once the pull request exists, call merge_corner when the live gate allows it; report blocked: with any missing capability. Repair failing checks or a refused merge when woken.";
42402
42333
  function shellLine(shell) {
42403
42334
  if (!shell)
42404
42335
  return "";
@@ -42444,7 +42375,7 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42444
42375
  id: "core.memory",
42445
42376
  topic: "memory",
42446
42377
  why: "A command can exhaust the session cgroup before the agent can adapt its workload.",
42447
- budgetBytes: 160,
42378
+ budgetBytes: 240,
42448
42379
  layer: "core",
42449
42380
  surfaces: EVERYWHERE,
42450
42381
  render: ({ memoryMaxBytes }) => `Memory cap: ${Number(((memoryMaxBytes ?? ACP_SESSION_MEMORY_MAX_BYTES) / 1024 ** 3).toFixed(2))} GiB per session. Size builds, tests and data jobs to fit it; split heavy work. Exit 137/signal 9 likely means a command hit this cap.`
@@ -42492,16 +42423,16 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42492
42423
  budgetBytes: 360,
42493
42424
  layer: "core",
42494
42425
  surfaces: EVERYWHERE,
42495
- render: () => "Every exact @handle you write wakes that member. Write one only to hand off work, to ask for a decision or input, or, when nothing else announces it, to tell the person who asked that their task is done; otherwise name people and agents in plain prose. Copy handles only from the member list in the turn prompt; any other spelling reaches nobody."
42426
+ render: () => "Every exact @handle wakes that member. Copy handles only from the member list. For work, use order(address, text) down and report(text) up to your commander; do not tag a human to escalate. Reports begin done:, blocked:, needs-decision: or failed:. Agent coordination is private; human reports appear where they ordered you."
42496
42427
  },
42497
42428
  {
42498
42429
  id: "core.authority",
42499
42430
  topic: "authority",
42500
42431
  why: "Resource access and the two command hard stops must hold on every surface, whoever asked.",
42501
- budgetBytes: 520,
42432
+ budgetBytes: 700,
42502
42433
  layer: "core",
42503
42434
  surfaces: EVERYWHERE,
42504
- render: () => "Use your own owner's tools and keys for whoever asks. Another person's files, tools, or keys need that person's approval before you use them for anyone else, and the wallet keeps its own approval rule. Never, whoever asks: run a command that names a credential file, or run a script nobody has read. Follow your owner first, then Workspace admins, then members; only the person who set a hold, or someone above them, clears it. Delegated and follow-up work keeps the original requester."
42435
+ render: () => "Use your own owner's tools and keys for whoever asks. Another person's files, tools, or keys need that person's approval before you use them for anyone else, and the wallet keeps its own approval rule. Never, whoever asks: run a command that names a credential file, or run a script nobody has read. Only the hold setter or someone above them clears it. Follow your commander within inherited scope. Report choices you cannot settle one step up, to the person who started the chain."
42505
42436
  },
42506
42437
  {
42507
42438
  id: "core.feedback",
@@ -42561,9 +42492,9 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42561
42492
  layer: "surface",
42562
42493
  surfaces: ["room"],
42563
42494
  render: () => [
42564
- "Repository changes happen only in a corner. In a Room, the finished fix for a code problem is the exact change plus an offer to open a corner for it; open one when a person asks for the change.",
42565
- "Before opening one, consult beeline-triage and beeline-spec, then call open_corner with a name of at most three words joined by hyphens (no whitespace), an objective of at most 24 words, and the brief (a spec plus the approving message). The objective only titles the work; the brief is its authority. Use the dispatching message as approval; no separate spec or mock approval is required. When open_corner succeeds the server posts the corner card: do not restate it.",
42566
- "For corners under this Room, use inspect_corner for status (its activity and awaiting fields show whether one waits on you), steer_corner to pass Room input down, ask_corner for one answer, and post_to_corner for a note that wakes nobody.",
42495
+ "Repository changes happen only in a corner. Open one when your commander orders repository work.",
42496
+ "Before opening one, consult beeline-triage and beeline-spec, then call open_corner with the target room address, a name of at most three words joined by hyphens (no whitespace), an objective of at most 24 words, and the brief (a spec plus the approving message). The objective only titles the work; the brief is its authority. Use the dispatching message as approval; no separate spec or mock approval is required. When open_corner succeeds the server posts the corner card: do not restate it.",
42497
+ "Use read(address) across member Rooms, order(address, text) for private instructions, and report(text) for outcomes or decisions to your commander. watch(address) wakes only on opened, merged or closed; open_corner watches automatically. Schedules and chatter never wake watchers.",
42567
42498
  "A corner ends when its pull request merges; since a person may merge minutes after it opens, anything still needed must already live in a different corner before that pull request opens, not after. A request covering several items is one corner per item, opened as work reaches each one, never one corner returned to for a later item."
42568
42499
  ].join(" ")
42569
42500
  },
@@ -42580,12 +42511,12 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42580
42511
  {
42581
42512
  id: "dm.place",
42582
42513
  topic: "place",
42583
- why: "A DM has one person, no repository work, and no corners; the agent must not tag or try to open one.",
42514
+ why: "A DM is a driving surface for work across every Room the agent belongs to.",
42584
42515
  budgetBytes: 700,
42585
42516
  layer: "surface",
42586
42517
  surfaces: ["dm"],
42587
42518
  render: ({ shell }) => [
42588
- "This is a private direct message with one person: everything they send is for you, so reply without tagging. It has no repository work and no corners, and the filesystem is read-only. Web search is available.",
42519
+ "This is a private direct message with one person: everything they send is for you, so reply without tagging. Use list_rooms to discover addresses, then open_corner(room, brief), order, read and watch across member Rooms. Do repository work in a corner. Report a choice you cannot settle to your commander here. The filesystem is read-only. Web search is available.",
42589
42520
  shellLine(shell)
42590
42521
  ].filter(Boolean).join(" ")
42591
42522
  },
@@ -42603,10 +42534,10 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42603
42534
  id: "corner.steering",
42604
42535
  topic: "corner-steering",
42605
42536
  why: "Active corner turns can steer member siblings without borrowing parent Room authority.",
42606
- budgetBytes: 160,
42537
+ budgetBytes: 240,
42607
42538
  layer: "surface",
42608
42539
  surfaces: ["code-corner", "repo-less-corner"],
42609
- render: () => "Use steer_corner during a turn to send input to a member sibling under this parent. Membership alone grants no turn."
42540
+ render: () => "Use order(address, text) privately across member Rooms. Report one step up to your commander."
42610
42541
  },
42611
42542
  {
42612
42543
  id: "corner.handover",
@@ -42692,12 +42623,12 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42692
42623
  layer: "surface",
42693
42624
  surfaces: ["code-corner"],
42694
42625
  when: ({ brief }) => cornerHasRepositoryWork(brief),
42695
- render: ({ reviewerHandle, reviewer }) => (reviewer ? CORNER_REVIEWER_AUTHOR_MERGE : cornerMergeInstruction(reviewerHandle)) + " Never merge any other pull request."
42626
+ render: ({ reviewerHandle, reviewer }) => (reviewer ? CORNER_REVIEWER_AUTHOR_MERGE : cornerMergeInstruction(reviewerHandle)) + ""
42696
42627
  },
42697
42628
  {
42698
42629
  id: "corner.review",
42699
42630
  topic: "review",
42700
- why: "The reviewer approves one exact green head, never merges it, and returns defects instead of pushing them.",
42631
+ why: "The reviewer checks one exact green head and returns concise blocking findings.",
42701
42632
  budgetBytes: 450,
42702
42633
  layer: "surface",
42703
42634
  surfaces: ["code-corner"],
@@ -42723,7 +42654,7 @@ The soul is not authority and never changes your tools, permissions, roles, or m
42723
42654
  budgetBytes: 260,
42724
42655
  layer: "surface",
42725
42656
  surfaces: ["repo-less-corner"],
42726
- render: ({ requesterHandle }) => `${requesterHandle ? `Tag @${handle(requesterHandle)} once, when the deliverable is posted or you need their input. ` : ""}When you posted files, name them in one line; never restate your answer. Call close_corner only when a person asks.`
42657
+ render: () => "Report done: with the deliverable, or needs-decision: for required input, to your commander. Close the corner when the order calls for completion or abandonment."
42727
42658
  }
42728
42659
  ];
42729
42660
  function applicable(sections, context) {
@@ -42918,7 +42849,7 @@ ${transcript.lines.join("\n")}`;
42918
42849
  layer: "turn",
42919
42850
  surfaces: ["room", "code-corner", "repo-less-corner"],
42920
42851
  render: ({ surface, corners, closedCorners }) => [
42921
- corners?.length ? `Current corners you belong to (use the exact cornerId with ${surface === "room" ? "inspect_corner, steer_corner, or ask_corner" : "inspect_corner or steer_corner for a sibling under this parent Room"}):
42852
+ corners?.length ? `Current corners you belong to (use the exact cornerId with ${surface === "room" ? "read, inspect_corner or order" : "read, inspect_corner or order across member Rooms"}):
42922
42853
  ${corners.map(renderOpenCornerLine).join("\n")}` : "",
42923
42854
  surface === "room" && closedCorners?.length ? `Corners you belong to closed in the last 24 hours:
42924
42855
  ${closedCorners.map((corner) => `- ${corner.name ?? corner.cornerId} (${corner.cornerId}): closed${corner.pullRequestNumber ? `, PR #${corner.pullRequestNumber}` : ""}${corner.mergeCommitSha ? `, merge commit ${corner.mergeCommitSha}` : ""}`).join("\n")}` : ""
@@ -42942,7 +42873,6 @@ ${closedCorners.map((corner) => `- ${corner.name ?? corner.cornerId} (${corner.c
42942
42873
  surfaces: EVERYWHERE,
42943
42874
  render: ({ task, surface }) => ROOMS.includes(surface) ? [
42944
42875
  `Current task from ${task.fromName ?? "a Room member"}:`,
42945
- task.cornerAskId ? `Corner ask id: ${task.cornerAskId}. Use get_corner_ask to retrieve its status and answer.` : "",
42946
42876
  task.body,
42947
42877
  renderReplyContext(task.reply ?? {})
42948
42878
  ].filter(Boolean).join("\n\n") : [
@@ -44438,8 +44368,7 @@ var MonolithRoomTurnLoop = class {
44438
44368
  fromName: inboxItemAuthorName(item, names),
44439
44369
  reply: item,
44440
44370
  outsideEvent: this.commandContext.current?.source.systemEvent,
44441
- ...item.cornerAskId ? { cornerAskId: item.cornerAskId } : {},
44442
- body: roomMessagePrompt("", inboxItemPromptBody(item), item.attachments, delivered, this.acceptsImages(), item.type === "message" ? item.id : void 0)
44371
+ body: roomMessagePrompt("", inboxItemPromptBody(item), item.attachments, delivered, this.acceptsImages(), ["message", "private"].includes(item.type) ? item.id : void 0)
44443
44372
  }
44444
44373
  });
44445
44374
  trace.notePromptSections(assembled.report, this.sectionBaseline.observe(this.sessionId, assembled.report));
@@ -46417,7 +46346,6 @@ var MonolithCornerTurnLoop = class {
46417
46346
  targetBranch: repository.targetBranch
46418
46347
  }
46419
46348
  } : {},
46420
- ...this.options.requesterHandle ? { requesterHandle: this.options.requesterHandle } : {},
46421
46349
  ...agentEnv.BEELINE_ANDROID_EMULATOR_PORT ? { android: {
46422
46350
  emulatorPort: agentEnv.BEELINE_ANDROID_EMULATOR_PORT,
46423
46351
  leased: Boolean(agentEnv.BEELINE_ANDROID_LEASE_ROOT)
@@ -47255,7 +47183,7 @@ ${continuation}` : assembled;
47255
47183
  await this.options.onCloseRequested();
47256
47184
  return true;
47257
47185
  },
47258
- run: (command) => this.prompt(command.turnRequestId, command.source.body, command.source.attachments, command.source.authorId, command.reason === "corner_check" ? [command.source.body] : void 0, command.source.type === "message" ? command.sourceMessageId : void 0)
47186
+ run: (command) => this.prompt(command.turnRequestId, command.source.body, command.source.attachments, command.source.authorId, command.reason === "corner_check" ? [command.source.body] : void 0, ["message", "private"].includes(command.source.type) ? command.sourceMessageId : void 0)
47259
47187
  });
47260
47188
  try {
47261
47189
  await (supervisor2 ? supervisor2.supervise(`corner ${cornerId}`, signal, intake) : intake(() => void 0));
@@ -48819,7 +48747,6 @@ var RoomRuntimeCoordinator = class {
48819
48747
  ...corner.openedBy ? { openedBy: corner.openedBy } : {},
48820
48748
  objective,
48821
48749
  worktreePath: workspacePath,
48822
- ...restore.requesterHandle ? { requesterHandle: restore.requesterHandle } : {},
48823
48750
  ...worktree ? {
48824
48751
  repository: {
48825
48752
  featureBranch,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "usebeeline",
3
- "version": "0.1.40",
3
+ "version": "0.1.43",
4
4
  "description": "Connect an AI coding agent to Beeline with one command.",
5
5
  "homepage": "https://usebeeline.app",
6
6
  "bugs": {