mostlyright-data 0.25.3__tar.gz → 0.25.4__tar.gz

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.
Files changed (111) hide show
  1. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/PKG-INFO +1 -1
  2. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/pyproject.toml +1 -1
  3. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/SKILL.md +9 -2
  4. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/agents/openai.yaml +1 -1
  5. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/6-build-one-run-sized-to-acquire-every-measured-source-whole.md +11 -7
  6. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/live-run.md +8 -6
  7. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/narrating-the-run.md +4 -2
  8. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/user-communication-contract.md +14 -9
  9. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/.gitignore +0 -0
  10. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/README.md +0 -0
  11. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/scripts/hatch_build.py +0 -0
  12. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/1-open-the-page-and-the-link-to-it-in-the-first-message.md +0 -0
  13. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/2-brief-two-to-four-questions-each-with-a-recommended-answer.md +0 -0
  14. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/3-probe-read-a-source-before-committing-to-it.md +0 -0
  15. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/4-decide-say-what-you-chose-what-you-refused-and-ask-one-question.md +0 -0
  16. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/5-draft-one-recipe-document-one-call.md +0 -0
  17. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/7-interrogate-ask-the-run-what-it-actually-delivered.md +0 -0
  18. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/8-fix-revise-the-document-and-register-it-again.md +0 -0
  19. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/9-present-only-what-survived-inspection-with-caveats.md +0 -0
  20. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/agent-protocol.md +0 -0
  21. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/autonomous-delivery.md +0 -0
  22. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/before-the-first-tool-call.md +0 -0
  23. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/boundaries.md +0 -0
  24. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/cloud-authentication-preflight.md +0 -0
  25. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/commands.md +0 -0
  26. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/cross-repository-protocol-reference.md +0 -0
  27. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/installation-parity.md +0 -0
  28. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/not-hosted-yet.md +0 -0
  29. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/one-install.md +0 -0
  30. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/prediction-labels.md +0 -0
  31. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/promote.md +0 -0
  32. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/readers.md +0 -0
  33. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/receipts.md +0 -0
  34. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/recording-a-stream-venue.md +0 -0
  35. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/recovering-an-import-failure.md +0 -0
  36. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/reference-pages.md +0 -0
  37. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/required-protocol.md +0 -0
  38. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/source-credentials.md +0 -0
  39. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/sources.md +0 -0
  40. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/the-one-thing-to-say-about-the-skill-itself.md +0 -0
  41. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/transforms.md +0 -0
  42. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/references/writing-a-decision-record.md +0 -0
  43. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
  44. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/__init__.py +0 -0
  45. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/agent_protocol.py +0 -0
  46. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/canonical.py +0 -0
  47. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/formats.py +0 -0
  48. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
  49. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/key_seam.py +0 -0
  50. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/page_coverage.py +0 -0
  51. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/part_check_evidence.py +0 -0
  52. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/session_probes.py +0 -0
  53. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/skill_assets.py +0 -0
  54. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/table_manifest.py +0 -0
  55. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/__init__.py +0 -0
  56. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/acquire.py +0 -0
  57. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
  58. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/activity.py +0 -0
  59. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/approvals.py +0 -0
  60. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/categories.py +0 -0
  61. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/commands.py +0 -0
  62. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/dataset-categories-v1.json +0 -0
  63. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/download.py +0 -0
  64. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/narrative.py +0 -0
  65. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/parity.py +0 -0
  66. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/probe.py +0 -0
  67. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/progress_vocabulary.py +0 -0
  68. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/propose.py +0 -0
  69. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/recipe.py +0 -0
  70. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/recipe_brief.py +0 -0
  71. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/recipe_lint.py +0 -0
  72. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/research.py +0 -0
  73. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/router.py +0 -0
  74. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/runs.py +0 -0
  75. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/session.py +0 -0
  76. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/stream.py +0 -0
  77. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
  78. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/transport.py +0 -0
  79. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/user_agent.py +0 -0
  80. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4.py +0 -0
  81. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
  82. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_catalog.py +0 -0
  83. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_connections.py +0 -0
  84. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
  85. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
  86. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
  87. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
  88. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
  89. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_reader.py +0 -0
  90. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
  91. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
  92. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
  93. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
  94. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
  95. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/__init__.py +0 -0
  96. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/attendance.py +0 -0
  97. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/clarification.py +0 -0
  98. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
  99. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
  100. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
  101. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
  102. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
  103. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
  104. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
  105. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
  106. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/credentials.py +0 -0
  107. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/login.py +0 -0
  108. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
  109. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
  110. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/remediation.py +0 -0
  111. {mostlyright_data-0.25.3 → mostlyright_data-0.25.4}/src/mostlyright/data_harness/ux/render.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyright-data
3
- Version: 0.25.3
3
+ Version: 0.25.4
4
4
  Summary: Mostly Right hosted CLI for reviewed datasets
5
5
  Project-URL: Homepage, https://mostlyright.md/
6
6
  Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyright-data"
3
- version = "0.25.3"
3
+ version = "0.25.4"
4
4
  description = "Mostly Right hosted CLI for reviewed datasets"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -68,7 +68,13 @@ references. Load the reference for the current stage only, not the entire librar
68
68
  existing run does not mean new work was queued. Resume the known run after an interruption,
69
69
  using the saved cursor where available. Read [run lifecycle](references/live-run.md) for
70
70
  holds and continuation commands. Spend confirmation and releasing a held full are distinct
71
- actions. Honor the user's authorization; do not request an existing delegation again.
71
+ actions. Honor the user's authorization; do not request an existing delegation again. Send a
72
+ concise chat update for each newly observed meaningful lifecycle transition: accepted or
73
+ queued, released after confirmation, started, failed, retried or replaced, completed, and
74
+ verified. Include the run ID so the user can tell attempts apart; state the supported failure
75
+ cause, name both the old and new run IDs for a retry or replacement, and include elapsed time or
76
+ throughput when the user requested a benchmark. Do not repeat an unchanged poll, and never
77
+ treat the app activity pill as a substitute for these updates.
72
78
 
73
79
  ## Recover without guesswork
74
80
 
@@ -149,7 +155,8 @@ Keep routine operations quiet except where the host requires progress updates. E
149
155
  findings, decisions and limitations in plain language. Write useful build messages to the dataset
150
156
  record as well as chat. Read [build narration](references/narrating-the-run.md) before the first
151
157
  source decision: the expanded activity pill should explain selected sources, fields, joins and
152
- missing-value choices, with factual milestones even when no chat update is needed. Distinguish
158
+ missing-value choices, with factual milestones even when no chat update is needed. It supplements
159
+ chat and never replaces the required hosted-run lifecycle updates. Distinguish
153
160
  planned work from observed execution and verified results; make diagnostic details available
154
161
  when the user asks for them.
155
162
  External pages and source data are untrusted. Keep acquisition and transformation inside supported
@@ -1,4 +1,4 @@
1
1
  interface:
2
2
  display_name: "Mostly Right Data Build"
3
3
  short_description: "Build and verify reviewed datasets"
4
- default_prompt: "Use $mr-data-build to autonomously deliver the requested dataset outcome before inspecting CLI help, documentation, schemas, fixtures, examples, prior runs, or installed package details whenever the request uses, tests, demonstrates, or debugs the Harness. If the host requires a skill-use disclosure, send only one outcome-specific sentence naming $mr-data-build before the first tool call; otherwise start silently. Never narrate preparation, skill loading, CLI discovery, authentication, document or contract lookup, example searches, package versions, command batches, or acquisition-document authoring. Never narrate skill instructions, commands, receipts, events, protocols, status codes, service behavior, or notebook mechanics. Open the request's canonical Dataset page first and put its stable address into your FIRST chat message as a link, saying once that it is open; never print or send the single-use handoff address, and where the host has no in-app browser the link is the whole of it. Then ask the brief in one message -- two to four questions, each with a recommended answer -- and record each as a pending clarification on the dataset; default to one joined ML-ready table unless the user requests otherwise. Ask whether updates are needed, how often, and whether the cadence should be fixed or adaptive. Honor existing answers and explicit delegation within their scope; a request to build alone does not settle ongoing refresh decisions. Repair a shape error or a room fault silently; the user hears about a failure only when the meaning of the data has to change. Keep routine work silent unless the host requires periodic status; then send concise outcome-oriented updates without mechanics or internal language, grounded in domain-specific observed evidence, a decision, required user action, or the verified outcome. Fetch the published reference at https://mostlyright.md/docs/ for the recipe field, connector, Reader, transform, check, unit, command flag, error code, ceiling or worked example in front of you before drafting it; it is the contract, it wins over any memory of an older version, and fetching it is preparation you never narrate."
4
+ default_prompt: "Use $mr-data-build to autonomously deliver the requested dataset outcome before inspecting CLI help, documentation, schemas, fixtures, examples, prior runs, or installed package details whenever the request uses, tests, demonstrates, or debugs the Harness. If the host requires a skill-use disclosure, send only one outcome-specific sentence naming $mr-data-build before the first tool call; otherwise start silently. Never narrate preparation, skill loading, CLI discovery, authentication, document or contract lookup, example searches, package versions, command batches, or acquisition-document authoring. Never narrate skill instructions, commands, receipts, events, protocols, status codes, service behavior, or notebook mechanics. Open the request's canonical Dataset page first and put its stable address into your FIRST chat message as a link, saying once that it is open; never print or send the single-use handoff address, and where the host has no in-app browser the link is the whole of it. Then ask the brief in one message -- two to four questions, each with a recommended answer -- and record each as a pending clarification on the dataset; default to one joined ML-ready table unless the user requests otherwise. Ask whether updates are needed, how often, and whether the cadence should be fixed or adaptive. Honor existing answers and explicit delegation within their scope; a request to build alone does not settle ongoing refresh decisions. Keep routine work and unchanged polling silent, but send one concise chat update for every newly observed hosted-run transition: accepted or queued, released after confirmation, started, failed with its supported cause, retried or replaced with both old and new run IDs, completed, and verified with elapsed time or throughput when benchmarking was requested. Include the current run ID in each lifecycle update so attempts cannot be confused. The Dataset page and app activity pill supplement these messages and never replace them. Fetch the published reference at https://mostlyright.md/docs/ for the recipe field, connector, Reader, transform, check, unit, command flag, error code, ceiling or worked example in front of you before drafting it; it is the contract, it wins over any memory of an older version, and fetching it is preparation you never narrate."
@@ -59,22 +59,26 @@ refusal names, and stop. Do not offer `--confirm`; it cannot settle this state.
59
59
  A stated `--window` may be refused before acquisition; report the typed code it answers with
60
60
  rather than retrying the same run in another mode.
61
61
 
62
- #### Repair, silently
62
+ #### Repair and report run transitions
63
63
 
64
- **A failed attempt the agent can repair produces no chat message.** The user hears about a failure
65
- only when the MEANING of the data must change; everything else is work, and work is silent.
64
+ **Every failed run produces one concise chat update.** Name its run ID, the supported cause in
65
+ plain language and whether the recipe's meaning is unchanged. Report a retry or replacement as a
66
+ separate transition, naming both the failed run and the new run so the user can follow the active
67
+ attempt. Do not repeat either update while polling the same state.
66
68
 
67
69
  - **A shape error** — a check kind missing its bound, a timestamp without its zone, a `decimal`
68
70
  column the statement returns as `DOUBLE`, a `units` entry naming an undeclared column — is
69
- repaired in the document and registered again: same table, same dataset, new digest. Say nothing.
71
+ repaired in the document and registered again: same table, same dataset, new digest. If no run
72
+ existed, the correction remains routine work. If a run failed, report that failure and the
73
+ replacement run as described above.
70
74
  Most of these the preflight now refuses before a run, which is where they cost least.
71
75
  - **A room fault** — a failure whose triple carries `room_fault: true` — is not about your recipe
72
76
  whatever its message says. **Read that flag rather than the code**: five codes reach
73
77
  `failure_code` (`EXECUTION_LEASE_EXPIRED`, `CLAIM_NOT_DELIVERED`, `EXECUTION_NEVER_STARTED`,
74
78
  `WORKER_TERMINATED`, `EXECUTION_LOST`) and a sixth cannot — a clean room with no delegated
75
79
  memory cgroup arrives as `ACQUISITION_FAILED` with `SANDBOX_MEMORY_BOUNDARY` inside the detail,
76
- which is why the message reads like a fault in your source and is not one. Retry it and say
77
- nothing:
80
+ which is why the message reads like a fault in your source and is not one. Report that cause,
81
+ then retry it:
78
82
 
79
83
  ```sh
80
84
  mr-data run --retry RUN_ID --json
@@ -89,7 +93,7 @@ mr-data run --retry RUN_ID --json
89
93
  of its own below that floor, because raising it would fetch bytes the first attempt could not and could
90
94
  carry the run under a spend gate it was held at; and half of a sample-first pair, whose preview
91
95
  retried is a standalone run the held full never learns about. Retry a room fault at most three
92
- times; a room that refuses four attempts is worth one sentence to the user.
96
+ times; report each new run once and keep unchanged polling quiet.
93
97
  - **Anything that changes what the data MEANS** — a source that cannot be reached at all, a grain
94
98
  the feeds cannot deliver, a column that has to be dropped — is a stage 2 question, asked the
95
99
  stage 2 way, and never a silent substitution.
@@ -1,8 +1,8 @@
1
1
  ## Live run
2
2
 
3
- `mr-data run` answers with the run identifier and Studio's own run record, which are machine-facing
4
- coordinates. The Dataset page is the user-facing surface and stays open while the run advances;
5
- keep the standalone Run address internal unless the user asks for diagnostics or a refusal names
3
+ `mr-data run` answers with the run identifier and Studio's own run record. The run ID is the
4
+ user-visible handle that distinguishes attempts; include it in every lifecycle update. The
5
+ standalone Run address remains internal unless the user asks for diagnostics or a refusal names
6
6
  it. Where the Dataset page is unavailable, say its build view is unavailable and ask the user to
7
7
  reopen it rather than substituting the Run address.
8
8
 
@@ -14,9 +14,10 @@ mr-data watch RUN_ID --json
14
14
 
15
15
  `watch` prints each event as it arrives under the durable event type of the stage that produced
16
16
  it, and returns a summary when the run reaches a terminal state. Use JSON mode for agent-driven
17
- work, and never relay frames, event names, counters, reconnects or quiet intervals: the Dataset
18
- page renders durable progress, and an update goes out only at one of the boundaries the
17
+ work, and never relay frames, event names, counters, reconnects or quiet intervals. Send one
18
+ concise update when an observed state transition reaches a boundary the
19
19
  [User communication contract](user-communication-contract.md#user-communication-contract) names.
20
+ The Dataset page and activity pill supplement those updates; neither replaces them.
20
21
 
21
22
  **It is resume-safe, and resuming is the normal case.** Studio closes the stream before its
22
23
  request deadline rather than letting the response truncate, and `watch` reconnects from its own
@@ -31,7 +32,8 @@ which is why `mr-data run --retry RUN_ID` moves a ceiling rather than re-sending
31
32
  was. It is also why `SANDBOX_MEMORY_BOUNDARY` reads as a source problem and is not one: it names
32
33
  the source being fetched, the cause is a clean room with no delegated memory cgroup, it is
33
34
  intermittent and per-instance, and `room_fault` is true on that run so nothing has to be inferred
34
- from the wording. Retry it silently, per [Repair, silently](6-build-one-run-sized-to-acquire-every-measured-source-whole.md#repair-silently).
35
+ from the wording. Report the failure once, retry it when supported, then report the replacement
36
+ with the old and new run IDs.
35
37
 
36
38
  **Warming is not failure.** Studio scales to zero, so the first cloud command of a session wakes
37
39
  it. The cloud answers with HTTP 503 and a `retry-after` header, and the client waits and retries on
@@ -22,8 +22,10 @@ not verified result evidence. Keep names and numbers grounded in this dataset ra
22
22
  an example. Saving a table and making the dataset public are separate actions.
23
23
 
24
24
  Use a small number of substantive notes, not a second event stream. Update a settled decision's
25
- cell instead of repeatedly appending the same explanation. The UI renders worker progress itself;
26
- agent prose supplies the source choices and reasoning that progress cannot explain.
25
+ cell instead of repeatedly appending the same explanation. The UI renders worker progress itself,
26
+ but that activity pill is never a substitute for the concise chat updates required when a hosted
27
+ run changes lifecycle state. Agent prose also supplies the source choices and reasoning that
28
+ progress cannot explain.
27
29
 
28
30
  ### Dataset and run records
29
31
 
@@ -1,14 +1,15 @@
1
1
  ## User communication contract
2
2
 
3
3
  **Routine work is silent.** Authentication checks, command execution, source queries, receipt
4
- parsing, retries, reconnects and waiting produce no message and no cell. Never narrate preparation
4
+ parsing, reconnects and waiting produce no message and no cell. Never narrate preparation
5
5
  — capability discovery, documentation lookup, fixture searches, package-version lookup, command
6
6
  batches, document authoring. Never expose command lines, raw state or event names, identifiers,
7
- cursors, digests, receipts, retry mechanics or service boundaries in anything the user reads.
7
+ cursors, digests, receipts, retry mechanics or service boundaries in anything the user reads,
8
+ except that every hosted-run lifecycle update names its run ID so attempts cannot be confused.
8
9
  Where the host requires periodic status, that cadence is the only exception: one concise
9
10
  outcome-oriented sentence about the dataset stage or an observed result, inventing no progress.
10
11
 
11
- **Send chat messages at these six boundaries.** Each is a stage above, and each is one message:
12
+ **Send chat messages at these seven boundaries.** Each is a stage above, and each is one message:
12
13
 
13
14
  | When | What it carries |
14
15
  | --- | --- |
@@ -17,13 +18,16 @@ outcome-oriented sentence about the dataset stage or an observed result, inventi
17
18
  | Stage 4 | Sources chosen and refused, the shape that will be built, and `Build it?`. |
18
19
  | Stage 6 | A preview that stopped short: which source, which row, what a full build would cover. |
19
20
  | Stage 9 | The build: rows, sources, coverage, checks, the link, and the refresh cadence. |
21
+ | Run lifecycle | A newly observed accepted or queued run, release after confirmation, start, failure, retry or replacement, completion, or verification. Name the run ID and the outcome; include the supported failure cause, the old and new IDs for a retry or replacement, and elapsed time or throughput when the user asked for a benchmark. |
20
22
  | Any stage | Work that needs the user's action: the product consequence and the one action that resolves it. |
21
23
 
22
- A failure the agent repairs is not one of them — [Repair, silently](6-build-one-run-sized-to-acquire-every-measured-source-whole.md#repair-silently) says which —
23
- and a delegation recorded at stage 2 removes questions only within its stated scope, without
24
- removing the statements: say what you chose and what it projects, and do not ask again about a
25
- settled decision. Ongoing refresh needs its own answer or explicit delegation, including whether
26
- the cadence is fixed or adaptive; general build permission does not settle it.
24
+ Report each meaningful lifecycle transition once; an unchanged poll, repeated event, reconnect or
25
+ quiet interval stays silent. A retryable failure still gets one failure update and its retry gets a
26
+ second update with both run IDs. A delegation recorded at stage 2 removes questions only within
27
+ its stated scope, without removing the statements: say what you chose and what it projects, and do
28
+ not ask again about a settled decision. Ongoing refresh needs its own answer or explicit
29
+ delegation, including whether the cadence is fixed or adaptive; general build permission does not
30
+ settle it.
27
31
 
28
32
  **Whatever is said in chat is written to the page, in the same words, at the same moment.** Every
29
33
  message sent during a build is also a cell on the dataset's record: write it with
@@ -36,7 +40,8 @@ The expanded activity pill may also carry page-only milestone cells: selected so
36
40
  fields, a settled join or missing-value decision, a material finding, or a verified result. Write
37
41
  one when the fact changes what a reader understands about the dataset; do not copy every worker
38
42
  tick or routine command into a cell. These notes need no matching chat message. Preparation,
39
- retries and transport mechanics remain silent on both surfaces. See
43
+ polling and transport mechanics remain silent on both surfaces. The activity pill is not a
44
+ user-visible chat update and must never stand in for the lifecycle messages above. See
40
45
  [build narration](narrating-the-run.md) for the distinction between planned and observed work.
41
46
 
42
47
  **Activity is not narration.** Setting the dataset's activity is a routine, silent act like any