@tiangong-ai/cli 0.0.61 → 0.0.62

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 (210) hide show
  1. package/AGENTS.md +17 -6
  2. package/README.md +414 -33
  3. package/dist/data/builtins.js +33 -5
  4. package/dist/data/builtins.js.map +1 -1
  5. package/dist/data/catalog.js +46 -0
  6. package/dist/data/catalog.js.map +1 -1
  7. package/dist/data/commands.js +15 -1
  8. package/dist/data/commands.js.map +1 -1
  9. package/dist/data/connectors/airnow-hourly-observations.js +60 -10
  10. package/dist/data/connectors/airnow-hourly-observations.js.map +1 -1
  11. package/dist/data/connectors/epa-eis-records.js +16 -2
  12. package/dist/data/connectors/epa-eis-records.js.map +1 -1
  13. package/dist/data/connectors/gdelt-doc-search.js +54 -18
  14. package/dist/data/connectors/gdelt-doc-search.js.map +1 -1
  15. package/dist/data/connectors/gdelt-file-feeds.js +20 -11
  16. package/dist/data/connectors/gdelt-file-feeds.js.map +1 -1
  17. package/dist/data/connectors/gdelt-web-ngrams.d.ts +2 -0
  18. package/dist/data/connectors/gdelt-web-ngrams.js +350 -0
  19. package/dist/data/connectors/gdelt-web-ngrams.js.map +1 -0
  20. package/dist/data/connectors/gdelt-web-ngrams.schemas.d.ts +188 -0
  21. package/dist/data/connectors/gdelt-web-ngrams.schemas.js +138 -0
  22. package/dist/data/connectors/gdelt-web-ngrams.schemas.js.map +1 -0
  23. package/dist/data/connectors/nasa-firms-fire.js +4 -0
  24. package/dist/data/connectors/nasa-firms-fire.js.map +1 -1
  25. package/dist/data/connectors/open-meteo-air-quality.js +27 -22
  26. package/dist/data/connectors/open-meteo-air-quality.js.map +1 -1
  27. package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +4 -1
  28. package/dist/data/connectors/open-meteo-air-quality.schemas.js +21 -1
  29. package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -1
  30. package/dist/data/connectors/open-meteo-flood.js +28 -23
  31. package/dist/data/connectors/open-meteo-flood.js.map +1 -1
  32. package/dist/data/connectors/open-meteo-flood.schemas.d.ts +4 -1
  33. package/dist/data/connectors/open-meteo-flood.schemas.js +21 -1
  34. package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -1
  35. package/dist/data/connectors/open-meteo-historical-weather.js +26 -21
  36. package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -1
  37. package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +4 -1
  38. package/dist/data/connectors/open-meteo-historical-weather.schemas.js +21 -1
  39. package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -1
  40. package/dist/data/connectors/openaq-air-quality.js +50 -12
  41. package/dist/data/connectors/openaq-air-quality.js.map +1 -1
  42. package/dist/data/connectors/openaq-air-quality.schemas.d.ts +0 -4
  43. package/dist/data/connectors/openaq-air-quality.schemas.js +2 -2
  44. package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -1
  45. package/dist/data/connectors/youtube-public-content.js +76 -6
  46. package/dist/data/connectors/youtube-public-content.js.map +1 -1
  47. package/dist/data/connectors/youtube-public-content.schemas.d.ts +63 -3
  48. package/dist/data/connectors/youtube-public-content.schemas.js +56 -2
  49. package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -1
  50. package/dist/data/contracts.d.ts +22 -1
  51. package/dist/data/runtime/bounded-http.d.ts +2 -0
  52. package/dist/data/runtime/bounded-http.js +221 -59
  53. package/dist/data/runtime/bounded-http.js.map +1 -1
  54. package/dist/data/runtime/execute.d.ts +2 -0
  55. package/dist/data/runtime/execute.js +82 -60
  56. package/dist/data/runtime/execute.js.map +1 -1
  57. package/dist/data/runtime/http-timing.d.ts +15 -0
  58. package/dist/data/runtime/http-timing.js +59 -0
  59. package/dist/data/runtime/http-timing.js.map +1 -0
  60. package/dist/data/runtime/http-transport.d.ts +1 -0
  61. package/dist/data/runtime/http-transport.js +27 -0
  62. package/dist/data/runtime/http-transport.js.map +1 -0
  63. package/dist/data/schemas/catalog.v1.json +46 -0
  64. package/dist/data/schemas/discovery.v1.json +12 -0
  65. package/dist/data/schemas/error.v1.json +1 -0
  66. package/dist/data/schemas/manifest.v1.json +19 -1
  67. package/dist/research/orchestration.js +233 -10
  68. package/dist/research/orchestration.js.map +1 -1
  69. package/dist/research/setup-command.js +37 -6
  70. package/dist/research/setup-command.js.map +1 -1
  71. package/dist/research/workspace/audit-bundle.js +28 -8
  72. package/dist/research/workspace/audit-bundle.js.map +1 -1
  73. package/dist/research/workspace/broker.js +25 -4
  74. package/dist/research/workspace/broker.js.map +1 -1
  75. package/dist/research/workspace/constants.d.ts +1 -0
  76. package/dist/research/workspace/constants.js +1 -0
  77. package/dist/research/workspace/constants.js.map +1 -1
  78. package/dist/research/workspace/content-evidence.d.ts +1 -0
  79. package/dist/research/workspace/content-evidence.js +1 -1
  80. package/dist/research/workspace/content-evidence.js.map +1 -1
  81. package/dist/research/workspace/credentials.js +2 -1
  82. package/dist/research/workspace/credentials.js.map +1 -1
  83. package/dist/research/workspace/data-evidence-adapter.d.ts +71 -0
  84. package/dist/research/workspace/data-evidence-adapter.js +269 -59
  85. package/dist/research/workspace/data-evidence-adapter.js.map +1 -1
  86. package/dist/research/workspace/data-evidence-view.d.ts +58 -0
  87. package/dist/research/workspace/data-evidence-view.js +411 -0
  88. package/dist/research/workspace/data-evidence-view.js.map +1 -0
  89. package/dist/research/workspace/evidence-ledger.js +32 -29
  90. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  91. package/dist/research/workspace/evidence.d.ts +28 -0
  92. package/dist/research/workspace/evidence.js +48 -0
  93. package/dist/research/workspace/evidence.js.map +1 -1
  94. package/dist/research/workspace/executor.d.ts +27 -1
  95. package/dist/research/workspace/executor.js +180 -20
  96. package/dist/research/workspace/executor.js.map +1 -1
  97. package/dist/research/workspace/investigation-attempt.d.ts +159 -0
  98. package/dist/research/workspace/investigation-attempt.js +619 -0
  99. package/dist/research/workspace/investigation-attempt.js.map +1 -0
  100. package/dist/research/workspace/investigation-audit.d.ts +20 -0
  101. package/dist/research/workspace/investigation-audit.js +306 -0
  102. package/dist/research/workspace/investigation-audit.js.map +1 -0
  103. package/dist/research/workspace/investigation-candidate.d.ts +84 -0
  104. package/dist/research/workspace/investigation-candidate.js +156 -0
  105. package/dist/research/workspace/investigation-candidate.js.map +1 -0
  106. package/dist/research/workspace/investigation-certification.d.ts +39 -0
  107. package/dist/research/workspace/investigation-certification.js +152 -0
  108. package/dist/research/workspace/investigation-certification.js.map +1 -0
  109. package/dist/research/workspace/investigation-close.d.ts +47 -0
  110. package/dist/research/workspace/investigation-close.js +153 -0
  111. package/dist/research/workspace/investigation-close.js.map +1 -0
  112. package/dist/research/workspace/investigation-lineage.d.ts +8 -0
  113. package/dist/research/workspace/investigation-lineage.js +10 -0
  114. package/dist/research/workspace/investigation-lineage.js.map +1 -0
  115. package/dist/research/workspace/investigation-observer.d.ts +22 -0
  116. package/dist/research/workspace/investigation-observer.js +122 -0
  117. package/dist/research/workspace/investigation-observer.js.map +1 -0
  118. package/dist/research/workspace/investigation-promotion.d.ts +129 -0
  119. package/dist/research/workspace/investigation-promotion.js +316 -0
  120. package/dist/research/workspace/investigation-promotion.js.map +1 -0
  121. package/dist/research/workspace/investigation-requirements.d.ts +5 -0
  122. package/dist/research/workspace/investigation-requirements.js +32 -0
  123. package/dist/research/workspace/investigation-requirements.js.map +1 -0
  124. package/dist/research/workspace/investigation-resources.d.ts +12 -0
  125. package/dist/research/workspace/investigation-resources.js +78 -0
  126. package/dist/research/workspace/investigation-resources.js.map +1 -0
  127. package/dist/research/workspace/investigation-source-export.d.ts +6 -0
  128. package/dist/research/workspace/investigation-source-export.js +68 -0
  129. package/dist/research/workspace/investigation-source-export.js.map +1 -0
  130. package/dist/research/workspace/investigation-store.d.ts +9 -0
  131. package/dist/research/workspace/investigation-store.js +55 -0
  132. package/dist/research/workspace/investigation-store.js.map +1 -0
  133. package/dist/research/workspace/investigation.d.ts +424 -0
  134. package/dist/research/workspace/investigation.js +716 -0
  135. package/dist/research/workspace/investigation.js.map +1 -0
  136. package/dist/research/workspace/native-process-supervisor.d.ts +1 -0
  137. package/dist/research/workspace/native-process-supervisor.js +97 -0
  138. package/dist/research/workspace/native-process-supervisor.js.map +1 -0
  139. package/dist/research/workspace/native-run.d.ts +79 -6
  140. package/dist/research/workspace/native-run.js +293 -51
  141. package/dist/research/workspace/native-run.js.map +1 -1
  142. package/dist/research/workspace/preflight.d.ts +3 -0
  143. package/dist/research/workspace/preflight.js +11 -6
  144. package/dist/research/workspace/preflight.js.map +1 -1
  145. package/dist/research/workspace/project-authority.js +2 -0
  146. package/dist/research/workspace/project-authority.js.map +1 -1
  147. package/dist/research/workspace/project-budget.d.ts +41 -0
  148. package/dist/research/workspace/project-budget.js +265 -0
  149. package/dist/research/workspace/project-budget.js.map +1 -0
  150. package/dist/research/workspace/project-mutations.d.ts +1 -1
  151. package/dist/research/workspace/project-mutations.js +27 -3
  152. package/dist/research/workspace/project-mutations.js.map +1 -1
  153. package/dist/research/workspace/projects.d.ts +66 -0
  154. package/dist/research/workspace/projects.js +181 -3
  155. package/dist/research/workspace/projects.js.map +1 -1
  156. package/dist/research/workspace/provider-budget.d.ts +3 -0
  157. package/dist/research/workspace/provider-budget.js +45 -0
  158. package/dist/research/workspace/provider-budget.js.map +1 -0
  159. package/dist/research/workspace/provider-state.d.ts +1 -0
  160. package/dist/research/workspace/provider-state.js +20 -0
  161. package/dist/research/workspace/provider-state.js.map +1 -0
  162. package/dist/research/workspace/publication-lineage.d.ts +34 -0
  163. package/dist/research/workspace/publication-lineage.js +165 -0
  164. package/dist/research/workspace/publication-lineage.js.map +1 -0
  165. package/dist/research/workspace/publication-workflow.d.ts +24 -0
  166. package/dist/research/workspace/publication-workflow.js +118 -14
  167. package/dist/research/workspace/publication-workflow.js.map +1 -1
  168. package/dist/research/workspace/review-executor.d.ts +6 -1
  169. package/dist/research/workspace/review-executor.js +17 -3
  170. package/dist/research/workspace/review-executor.js.map +1 -1
  171. package/dist/research/workspace/runtime.d.ts +12 -1
  172. package/dist/research/workspace/runtime.js +143 -19
  173. package/dist/research/workspace/runtime.js.map +1 -1
  174. package/dist/research/workspace/scientific-amendment.d.ts +103 -0
  175. package/dist/research/workspace/scientific-amendment.js +537 -0
  176. package/dist/research/workspace/scientific-amendment.js.map +1 -0
  177. package/dist/research/workspace/scientific-fulfillment-audit.d.ts +20 -2
  178. package/dist/research/workspace/scientific-fulfillment-audit.js +87 -7
  179. package/dist/research/workspace/scientific-fulfillment-audit.js.map +1 -1
  180. package/dist/research/workspace/scientific-fulfillment.d.ts +10 -1
  181. package/dist/research/workspace/scientific-fulfillment.js +20 -6
  182. package/dist/research/workspace/scientific-fulfillment.js.map +1 -1
  183. package/dist/research/workspace/scientific-review-execution.js +162 -22
  184. package/dist/research/workspace/scientific-review-execution.js.map +1 -1
  185. package/dist/research/workspace/scientific-review.d.ts +2 -1
  186. package/dist/research/workspace/scientific-review.js +33 -2
  187. package/dist/research/workspace/scientific-review.js.map +1 -1
  188. package/dist/research/workspace/setup-catalog.js +3 -3
  189. package/dist/research/workspace/setup-release.d.ts +22 -0
  190. package/dist/research/workspace/setup-release.js +426 -0
  191. package/dist/research/workspace/setup-release.js.map +1 -0
  192. package/dist/research/workspace/setup-runtime-integrity.d.ts +2 -0
  193. package/dist/research/workspace/setup-runtime-integrity.js +31 -0
  194. package/dist/research/workspace/setup-runtime-integrity.js.map +1 -0
  195. package/dist/research/workspace/setup-upgrade.d.ts +17 -0
  196. package/dist/research/workspace/setup-upgrade.js +784 -0
  197. package/dist/research/workspace/setup-upgrade.js.map +1 -0
  198. package/dist/research/workspace/setup.d.ts +31 -39
  199. package/dist/research/workspace/setup.js +220 -17
  200. package/dist/research/workspace/setup.js.map +1 -1
  201. package/dist/research/workspace/task-acceptance.d.ts +8 -1
  202. package/dist/research/workspace/task-acceptance.js +37 -5
  203. package/dist/research/workspace/task-acceptance.js.map +1 -1
  204. package/dist/research/workspace/task-audit.d.ts +5 -1
  205. package/dist/research/workspace/task-audit.js +33 -18
  206. package/dist/research/workspace/task-audit.js.map +1 -1
  207. package/dist/research/workspace/types.d.ts +44 -0
  208. package/dist/research/workspace/workspace.js +34 -4
  209. package/dist/research/workspace/workspace.js.map +1 -1
  210. package/package.json +2 -1
package/README.md CHANGED
@@ -12,8 +12,8 @@ checkPaths:
12
12
  - package.json
13
13
  - bin/**
14
14
  - src/**
15
- lastReviewedAt: 2026-09-04
16
- lastReviewedCommit: 25b236a15c846c0168ffb84f8afa390d71985f4b
15
+ lastReviewedAt: 2026-09-11
16
+ lastReviewedCommit: f0dc2ee
17
17
  ---
18
18
 
19
19
  # Tiangong AI CLI
@@ -70,16 +70,43 @@ tiangong-ai data run <capability-id> <operation-id> \
70
70
  The command-line capability and operation must match the versions in the input
71
71
  envelope. Credentials are never accepted in argv or input JSON. Each connector
72
72
  declares exact logical environment-variable bindings, HTTPS endpoint scopes,
73
- and execution limits in its execution manifest. Data commands deliberately do
73
+ and acquisition limits in its execution manifest. Callers may explicitly
74
+ tighten those limits, but upper layers do not silently reinterpret Agent
75
+ context budgets as provider or record limits. Data commands deliberately do
74
76
  not load a cwd `.env` file.
75
77
 
76
78
  `data catalog` also returns a concise capability summary, what the capability
77
- provides and does not provide, operation summaries, and a separate discovery
78
- digest. `data describe` expands that layer with source ownership, coverage,
79
+ provides and does not provide, operation summaries, a separate discovery
80
+ digest, and an explicit `available` or `suspended` status. Suspended entries
81
+ remain inspectable, but `doctor` and `run` block before any provider request.
82
+ `data describe` expands that layer with source ownership, coverage,
79
83
  granularity, selection hints, typical uses, official documentation, freshness,
80
84
  license restrictions, and operation descriptions. Narrative discovery changes
81
85
  do not change the execution manifest digest used for compatibility binding.
82
86
  Operation input schemas include field-level descriptions and examples.
87
+ Operations may also publish stable feature IDs for Skills that depend on a
88
+ specific compatible behavior within the same contract major.
89
+
90
+ GDELT DOC requests are paced at least five seconds apart within one CLI process,
91
+ including split queries and retries. Missing-header 429 responses use bounded
92
+ exponential backoff and remain `rate-limited`, never `no-results`. Independent
93
+ processes sharing an egress must be coordinated by the caller. The opt-in positive
94
+ live gate and its timing/throughput definitions are documented in
95
+ [repository validation](docs/agents/repo-validation.md#gdelt-doc-live-acceptance).
96
+
97
+ Auto Research keeps three budgets separate: connector acquisition limits,
98
+ Evidence package bytes/files, and the Agent-visible context view. A validated
99
+ result is persisted in full when it fits the Evidence package budget;
100
+ `maxBrokerItems` and the context-token ceiling only shape the Agent view.
101
+ Receipts distinguish provider coverage, explicit limits reached, and context
102
+ projection instead of forcing them into one status. A projected result returns
103
+ an opaque, evidence-bound cursor; `research project evidence data read` serves
104
+ the next shape-aware view from immutable local Evidence without another
105
+ provider request or provider quota charge. Agents must either continue until
106
+ `nextCursor` is null or disclose the exact presented/total fraction.
107
+ The public Research command returns receipt identity, coverage, a structured
108
+ bounded context view, and continuation metadata. The complete core result
109
+ remains in immutable Evidence and is not duplicated into Agent stdout.
83
110
 
84
111
  JSON exits are `0` for success, `2` for request/contract errors, `3` for a
85
112
  blocked execution, and `4` for an explicit partial result. Public machine
@@ -90,7 +117,11 @@ The built-in capabilities are:
90
117
  - `airnow.hourly-observations` / `fetch-hourly`: fetches official AirNow
91
118
  `HourlyAQObs` files for a bounded UTC-hour window, bounding box, and pollutant
92
119
  list. Results retain source-file lineage and always state that AirNow data are
93
- preliminary and unsuitable as regulatory-grade AQS evidence.
120
+ preliminary and unsuitable as regulatory-grade AQS evidence. Independent
121
+ hourly files use bounded concurrency while output files and records retain
122
+ deterministic UTC-hour order. Execution uses the official
123
+ `files.airnowtech.org` S3 bucket through its regional S3 endpoint so a failing
124
+ CloudFront edge does not make the underlying public object unavailable.
94
125
  - `bluesky.public-posts` / `fetch-cascades`: fetches bounded public Bluesky
95
126
  post seeds from search, an author feed, a custom feed, or a list feed and can
96
127
  flatten visible reply cascades. Ranking, counters, moderation visibility, and
@@ -98,7 +129,10 @@ The built-in capabilities are:
98
129
  - `epa.eis-records` / `search`: retrieves bounded official EPA EIS Database
99
130
  common-search or UI-created search pages and parses title, CEQ/provider IDs,
100
131
  document type, dates, agencies, state, detail links, and document-availability
101
- cues. It does not fetch or assess linked EIS documents.
132
+ cues. Its endpoint-scoped, same-origin session cookie jar exists only in
133
+ memory so the provider's initial redirect can complete; cookies never enter
134
+ results, receipts, logs, or cross-origin requests. It does not fetch or assess
135
+ linked EIS documents.
102
136
  - `federal-register.documents` / `search`: searches bounded
103
137
  FederalRegister.gov document metadata by publication date plus term, agency,
104
138
  document type, topic, docket, or RIN filters. It does not follow result links,
@@ -106,48 +140,56 @@ The built-in capabilities are:
106
140
  - `gdelt.doc-search` / `search`: searches the rolling GDELT DOC 2.0 index for
107
141
  bounded article-link metadata or supported aggregate timelines. Automated
108
142
  multilingual extraction and uneven monitored-source coverage are explicit;
109
- it does not retrieve article bodies or establish ground-truth facts.
143
+ it does not retrieve article bodies or establish ground-truth facts. The
144
+ capability is currently suspended because representative modes do not pass a
145
+ stable live gate under the provider's dynamic load shedding.
146
+ - `gdelt.web-ngrams` / `search`: searches literal 1–4-word phrases in one
147
+ explicit published UTC minute's GZIP NGrams/TOC pair, returning matched
148
+ article links with file-scoped IDs. This local candidate extension is a
149
+ separately selected file-based alternative to DOC discovery, not a DOC query
150
+ or timeline substitute. Missing files block; malformed rows and omitted
151
+ matches are partial. No implicit time-range sampling or automatic fallback.
110
152
  - `gdelt.events`, `gdelt.gkg`, and `gdelt.mentions` / `fetch`: independently
111
153
  discoverable GDELT 2.0 table capabilities backed by one bounded TypeScript
112
154
  file-feed core. They fetch either the latest provider entry or at most twenty
113
155
  aligned 15-minute files, verify ZIP/CRC and advertised latest-file checksums,
114
- and emit closed named columns without persisting downloaded files.
156
+ and emit closed named columns without persisting downloaded files. Their
157
+ wide named-field JSON is preserved as Evidence; Agent context projection is
158
+ handled by Auto Research without changing the connector result.
115
159
  - `nasa-firms.active-fire` / `fetch-area`: retrieves bounded NASA FIRMS MODIS,
116
160
  VIIRS, or Landsat active-fire point detections, optionally validates source
117
161
  availability, and exposes chunk-level partial coverage. Hotspots are thermal
118
162
  anomalies, not fire perimeters or confirmed incident identities.
119
163
  - `open-meteo.air-quality` / `fetch-hourly`: retrieves bounded GMT hourly CAMS
120
164
  model-grid air-quality series for known coordinates; these are modeled
121
- background values rather than station observations.
165
+ background values rather than station observations. Missing and explicitly
166
+ returned all-null series are distinct machine-readable partial issues.
122
167
  - `open-meteo.flood` / `fetch-daily`: retrieves bounded daily GloFAS simulated
123
168
  river-discharge series for the represented river grid; it is neither gauge
124
- data nor a flood-alert service.
169
+ data nor a flood-alert service. Missing and explicitly returned all-null
170
+ series are distinct machine-readable partial issues.
125
171
  - `open-meteo.historical-weather` / `fetch`: retrieves bounded GMT hourly and/or
126
172
  daily historical weather reanalysis for one controlled model and known
127
173
  coordinates. ERA5 or ERA5-Land should be selected when multi-decade model
128
- consistency matters.
174
+ consistency matters. Missing requested series and provider-returned series
175
+ whose values are all `null` are distinct machine-readable partial issues.
129
176
  - `openaq.air-quality` / `search-locations` and `fetch-sensor-measurements`:
130
177
  discovers filtered OpenAQ v3 locations and retrieves a bounded raw, hourly,
131
178
  or daily series for one sensor. It preserves provider/license context but
132
179
  does not calculate AQI or make health or regulatory determinations.
133
- - `regulations-gov.comments` / `search` and `fetch-details`: searches bounded
134
- Regulations.gov public-comment metadata and retrieves curated details for
135
- explicit comment IDs. It omits named personal-profile fields, never submits
136
- comments, and returns attachment metadata without downloading file bytes.
137
- - `regulations-gov.attachments` / `download`: retrieves attachment metadata for
138
- exact public comment IDs and writes bounded files only from the official
139
- Regulations.gov download origin. It requires `--artifact-dir`, refuses to
140
- overwrite files, and commits SHA-256-bound relative files plus a manifest;
141
- it does not scan, open, extract, or interpret the untrusted bytes.
142
180
  - `usbr.project-records` / `fetch`: inventories caller-supplied official
143
181
  `www.usbr.gov` project or program pages plus bounded same-origin links. It
144
182
  preserves page response provenance but does not follow, download, parse, or
145
- assess linked records and is not USBR-wide search.
183
+ assess linked records and is not USBR-wide search. Execution is currently
184
+ suspended because the official origin returns a gateway rejection page in
185
+ the supported CLI environment.
146
186
  - `usbr.rise` / `discover-items` and `fetch-results`: scans bounded Bureau of
147
187
  Reclamation RISE catalog pages for client-filtered candidate item IDs, then
148
188
  retrieves bounded result rows for explicitly selected items. Provider scan
149
189
  order is not ranking, and operational values require item metadata and domain
150
- context before interpretation.
190
+ context before interpretation. Execution is currently suspended because both
191
+ the legacy API and the official EDR beta endpoint are rejected by the
192
+ provider gateway in the supported CLI environment.
151
193
  - `usgs.water-instantaneous-values` / `fetch`: retrieves bounded legacy USGS
152
194
  WaterServices instantaneous observations while preserving site, parameter,
153
195
  qualifier, provisional status, and source lifecycle warnings.
@@ -156,12 +198,17 @@ The built-in capabilities are:
156
198
  comment/reply text for explicit video IDs. It does not download media or
157
199
  transcripts and does not treat ranking or comments as representative opinion.
158
200
 
159
- Fourteen capabilities are keyless. NASA FIRMS requires `NASA_FIRMS_MAP_KEY`, which the
201
+ GDELT DOC, Regulations.gov comment/attachment, USBR RISE, and USBR project
202
+ records remain discoverable with `availability.status=suspended`, a stable
203
+ reason code, and explicit resume criteria. `doctor` and `run` block locally
204
+ without network access, and Auto Research excludes them from its executable
205
+ projection until their production live gates qualify them again.
206
+
207
+ Of the fifteen execution-enabled capabilities, twelve are keyless. NASA FIRMS requires `NASA_FIRMS_MAP_KEY`, which the
160
208
  CLI injects as a protected provider path segment; OpenAQ requires
161
- `OPENAQ_API_KEY`, Regulations.gov requires `REGGOV_API_KEY`, and YouTube requires
162
- `YOUTUBE_API_KEY`; the CLI injects all three as protected provider headers, with
163
- YouTube using `X-Goog-Api-Key` rather than a URL parameter. No secret is accepted
164
- in argv or input JSON. Exact input and output schemas,
209
+ `OPENAQ_API_KEY`, and YouTube requires `YOUTUBE_API_KEY`; the CLI injects the
210
+ latter two as protected provider headers, with YouTube using `X-Goog-Api-Key`
211
+ rather than a URL parameter. No secret is accepted in argv or input JSON. Exact input and output schemas,
165
212
  endpoint scopes and limits are available through the execution manifest, while
166
213
  source notes, coverage, selection guidance and license restrictions are
167
214
  available in the discovery metadata returned by `data describe`; static
@@ -383,6 +430,57 @@ bytes and report that a new native-host session is required before the routing
383
430
  instruction becomes active. Global-scope Skill installation does not create
384
431
  project instruction files.
385
432
 
433
+ ### Reviewed setup upgrades
434
+
435
+ Use `research setup update --check --candidate-version <exact-stable-version>`
436
+ to inspect one explicitly selected release. Omitting `--candidate-version` keeps
437
+ this a local catalog comparison with no registry request. The optional query
438
+ pins the public npm registry and package scope, has finite time/output limits,
439
+ and reports `newer`, `same`, `older`, or `unavailable`. Metadata includes the
440
+ exact version, tarball URL, SHA-512 integrity and Git commit. This validates
441
+ registry metadata; it does not independently download or authenticate the
442
+ package. An unavailable query never means that no update exists: when there is
443
+ no separately confirmed local migration, `updateAvailable` is `null`.
444
+
445
+ An older workspace resolver deliberately continues selecting its recorded CLI.
446
+ To use an upgrade-capable candidate, select its exact published version and run
447
+ that version directly; do not edit the runtime lock or use floating `latest`:
448
+
449
+ ```bash
450
+ REVIEWED_UPGRADE_CLI_VERSION=X.Y.Z # replace with one reviewed exact stable release
451
+ npx --yes --registry=https://registry.npmjs.org \
452
+ --@tiangong-ai:registry=https://registry.npmjs.org --strict-ssl=true \
453
+ --package "@tiangong-ai/cli@$REVIEWED_UPGRADE_CLI_VERSION" -- tiangong-ai \
454
+ research setup upgrade --plan --confirm-upgrade \
455
+ --workspace /absolute/path/to/workspace --json
456
+ ```
457
+
458
+ Review the returned immutable `planPath` and execute its `applyCommand`. The
459
+ candidate also binds the SHA-256 identity of `package.json`, `bin/` and `dist/`;
460
+ apply and rollback reject changed CLI runtime bytes before workspace mutation.
461
+ This content binding excludes installed dependencies and is not a publisher
462
+ signature. Ordinary research commands do not rescan these trees. Planning
463
+ leaves the active plan, runtime lock, configuration and installed Skills intact.
464
+ Apply stages the complete selected generation, verifies each prior-owned tree,
465
+ and reuses unchanged trees and verified downloads. Modified or linked targets
466
+ remain protected. It preserves the workspace identity, evidence, credentials,
467
+ budgets, current model/pricing choices, custom launchers and reviewer transport.
468
+ Changed license choices remain explicit; unchanged accepted licenses carry forward.
469
+
470
+ An interrupted commit blocks ordinary workspace use and reports the exact
471
+ candidate recovery command. Repeat that candidate's apply to resume, or use its
472
+ `rollbackCommand` to restore the directly bound prior generation with the new
473
+ updater. Rollback refuses conflicting owner changes or subsequent research
474
+ activity. Interrupted rollback remains blocked and resumes with the same command.
475
+ Private rollback preimages (including configured credentials) and prepared caches
476
+ are retained for recovery; they are excluded from portable setup audit exports.
477
+ Doctor runs after coherent activation; a repeated apply does not repeat a paid
478
+ check that already started. If its result was lost, explicitly inspect status
479
+ and run Doctor as needed. Old readiness attestations never certify new bytes.
480
+ A legacy already-mixed plan/lock fails with
481
+ `RESEARCH_SETUP_LEGACY_UPGRADE_RECOVERY_REQUIRED`; preserve its directly linked
482
+ setup history for diagnosis rather than deleting Skills or rewriting locks.
483
+
386
484
  ### Declarative setup
387
485
 
388
486
  For repeatable provisioning without a TTY, generate a safe workspace-local
@@ -679,7 +777,22 @@ replayed without another model call after revalidating its immutable proof.
679
777
  Failures require explicit `--retry` and remain bounded by the attempt budget;
680
778
  unreported usage and interrupted wall time retain conservative reservations.
681
779
  Failed processes return a bounded, sanitized exit diagnostic and record it in
682
- the journal; no full prompt or raw authentication output is persisted. Automatic
780
+ the journal; no full prompt or raw authentication output is persisted.
781
+ When the reviewer returns but submission is rejected, the error and failed
782
+ journal event also return an `executionRecord` locator and SHA-256. The locator
783
+ is relative to `.tiangong-research/` and points to an immutable
784
+ `scientific/failed-executions/` record containing the packet/run binding,
785
+ reported usage and identity, rejection code, and safely retained JSON stdout.
786
+ These are unaccepted execution observations, not a review receipt or permission
787
+ to pass a gate. Inspecting them does not call the provider; another execution
788
+ still requires explicit `--retry`.
789
+ Retained stdout is limited to the smaller of 1 MiB and the configured output
790
+ capture allowance. Unsafe, oversized, or malformed JSON keeps only its digest,
791
+ size and omission reason. If storage fails, `outputRetention=storage-unavailable`
792
+ is reported with the original error instead of claiming that a result was saved.
793
+ Successful review and replay use their existing output/receipt without this
794
+ additional failure capture.
795
+ Automatic
683
796
  Claude invocation uses the same dialect-annotation conversion as
684
797
  `research schema show NAME --compatibility claude-code`; canonical controller
685
798
  validation and its scientific constraints remain unchanged.
@@ -717,17 +830,40 @@ audit manifest separately records the raw stored packet-file digest. This keeps
717
830
  packet identity and byte-level transfer verification explicit rather than
718
831
  overloading one hash with both meanings.
719
832
 
720
- After base closure, the current native host writes a final Markdown/plain-text
833
+ After base closure, inspect `research publication lineage PROJECT --json` before
834
+ authoring materials. It verifies the existing closure and reviewed packet's
835
+ analysis, report and evidence-chain hashes and returns their analysis identity
836
+ with an empty material-file template. It does not certify or relabel previously
837
+ authored files. The current native host then writes a final Markdown/plain-text
721
838
  manuscript, schema-valid publication assessment, and an explicit submission
722
839
  manifest. The manuscript must contain Abstract, Introduction, Methods, Results,
723
- Discussion, Data availability, Code availability, and References. The
840
+ Discussion, Data availability, Code availability, and References. Decimal
841
+ section prefixes such as `1. Introduction`, `2 Methods`, `3.1 Results`, and
842
+ `4) Discussion` are accepted when separated from the title by whitespace;
843
+ unrelated titles and body text still cannot satisfy a required section. The
724
844
  submission manifest must bind distinct absolute files for cover letter, title
725
845
  page, reporting checklist, data availability, code availability, and source
726
846
  data; figure/table index, extended data, and supplementary methods are optional.
847
+ The schema-version-1 submission manifest also requires `resultLineage`, following
848
+ `research schema show publication-result-lineage --json`. Preserve the source
849
+ analysis identity from material preparation. Include a role, actual byte SHA-256
850
+ and source `analysisSha256` for the manuscript, assessment, every submission file
851
+ and each `supplement-N` (one-based supplied order). Include the actual figures,
852
+ tables and source inputs as submission files or supplements; an index alone is
853
+ not their contents. Do not replace a stale parent hash merely to pass validation.
854
+ Completeness and scientific derivation remain producer claims for independent
855
+ review; the CLI verifies declared lineage and bytes, not scientific truth.
727
856
  `research publication freeze` then content-addresses the Policy, scientific
728
857
  design and early reviews, acquisition/content/inference snapshots, mode-bound
729
858
  analysis, Claim-Evidence Graph, base outputs, manuscript, assessment,
730
859
  supplements, role-complete submission files, and reproducibility manifest.
860
+ Validation reads the frozen copies. The generation, review packet and closure
861
+ carry `analysisGenerationId` and a content-addressed material-results manifest;
862
+ the reproducibility record binds that manifest. A different closed generation,
863
+ changed report, mixed file parent or changed prepared bytes fails before review.
864
+ Status/review/closure recheck the current closed lineage and report the affected
865
+ object and binding. Legacy generations without the manifest retain their history
866
+ but cannot establish current readiness; prepare an honest binding and refreeze.
731
867
  Computational/mixed analysis still requires reproduced metadata with exact
732
868
  implementation/environment bindings. Qualitative analysis uses
733
869
  `status: not-applicable`, null command/seed and empty implementation/environment
@@ -745,6 +881,9 @@ generation, packet, review, journal, and closure objects persist only their
745
881
  SHA-256 bindings.
746
882
 
747
883
  ```bash
884
+ tiangong-ai research publication lineage top-journal-paper \
885
+ --workspace /absolute/path/to/workspace --json
886
+ tiangong-ai research schema show publication-result-lineage --json
748
887
  tiangong-ai research schema show publication-assessment --json
749
888
  tiangong-ai research publication freeze top-journal-paper \
750
889
  --manuscript /absolute/path/to/final-manuscript.md \
@@ -777,6 +916,10 @@ from credential fields. It checks raw text and read-only decoded JSON/JSONL,
777
916
  including escaped keys and nested string payloads, while retaining the exact
778
917
  evidence and ledger bytes. Authentication values remain blocked even when wrapped
779
918
  in arrays or objects; an identifier's UUID shape is never a credential exemption.
919
+ Within the existing 16 MiB per-file text scan bound, valid UTF-8 inputs are also
920
+ checked after staging under extensionless content hashes. Binary inputs remain
921
+ byte-preserving. A nonportable-path error reports a bundle-relative `details.path`
922
+ without disclosing the original host path or the matched source text.
780
923
 
781
924
  ```bash
782
925
  tiangong-ai research project audit export top-journal-paper \
@@ -841,6 +984,11 @@ presentation Skills are post-closure authoring only. Run selected preprocessors
841
984
  and acquisition adapters with `research setup companion run`, then admit their
842
985
  exact hash-bound output separately. Automatic paper OA exhaustion returns an
843
986
  explicit browser handoff and never launches or chooses a browser silently.
987
+ Paper results require the pinned adapter's identity-verified artifact.v3
988
+ manifest: matched document identity must agree between the result and manifest
989
+ and bind the requested or resolved DOI. PDF/manifest paths, bytes and hashes
990
+ remain checked independently. Structural-only legacy metadata cannot establish
991
+ document identity, and successful access does not imply redistribution rights.
844
992
  The paper companion and its setup-doctor preflight both enter the verified
845
993
  Skill through `scripts/runtime.py`; the CLI never bypasses that lock by invoking
846
994
  `fetch.py` or importing `pypdf` from ambient Python. A missing runtime remains
@@ -968,6 +1116,29 @@ reviewer shell, browser, web, undeclared MCP, and Skill tools remain disabled.
968
1116
  Do not use Full Access, sandbox-disable flags, unsandboxed-command exceptions,
969
1117
  or silent transport fallback.
970
1118
 
1119
+ Before sending reviewer material, inspect `research reviewer status --json`.
1120
+ The runtime reports the CLI family and configured model alias separately from
1121
+ `providerRouting`: the configured Claude endpoint origin/source, model-mapping
1122
+ sources and a digest of admitted routing values. Explicit process environment
1123
+ overrides the imported Claude `settings.json` env allowlist. Approved custom
1124
+ HTTPS gateways remain supported. Doctor's `reviewer-configured-routing` check
1125
+ is configuration inspection; it does not make a paid model request.
1126
+
1127
+ Routing changes invalidate the prior runtime binding before reviewer execution.
1128
+ Unchanged effective routing reuses the existing attestation; missing legacy
1129
+ bindings require an explicit smoke refresh. Status never starts paid checks.
1130
+ Paths, query strings, proxy credentials and mapped provider IDs are omitted
1131
+ from routing receipts. `identityVerification=unverified` is intentional: a CLI
1132
+ family, model alias, endpoint configuration or successful smoke cannot attest
1133
+ the actual upstream provider/model or historical HTTP destinations. A null
1134
+ endpoint means no supported explicit endpoint was resolved, not an official
1135
+ provider guarantee. Wrappers, proxies and runtime defaults remain outside that
1136
+ identity guarantee. Bridge status identifies transport readiness separately.
1137
+ Execution `model` and `runtime.model` retain the configured alias; optional
1138
+ `telemetry.reportedModel` records the sanitized CLI self-report, with null when
1139
+ absent. A mapped response name does not change the configured runtime identity
1140
+ or require another smoke. It is not independently verified provider identity.
1141
+
971
1142
  WorkBuddy/CodeBuddy capsule teardown never requests recursive bulk deletion
972
1143
  inside the outer IDE. Native stages remove only the single active-session
973
1144
  binding, while completed, aborted, handed-off, and reviewer/work-package
@@ -1214,7 +1385,8 @@ It does not claim a provider-side turn or output-token cap for the host app.
1214
1385
 
1215
1386
  Independent review uses the pre-call reservation calculator and the reviewer's
1216
1387
  provider-side structured-output/turn controls where available. Claude packet-only
1217
- review has a 64-turn provider guard; Codex uses the existing finite wall-time and
1388
+ review chooses the largest affordable turn count up to a 64-turn provider
1389
+ guard and uses that same count in its reservation; Codex uses the existing finite wall-time and
1218
1390
  token/cost guards because its CLI has no equivalent turn flag. Planning uses a
1219
1391
  small initial-context estimate and expected reads, not the entire corpus or an
1220
1392
  unbounded legacy context hint. Preflight reports `inputContextTokenLimit=null`.
@@ -1232,6 +1404,55 @@ records and JSONL progress preserve sanitized accounting mode, event/item
1232
1404
  counts, provider turns, tool calls, reasoning tokens, and bounded provider
1233
1405
  errors.
1234
1406
 
1407
+ Owners can opt into a numeric project authorization with `project init` or
1408
+ `project preflight --max-cost-usd`, or adopt it for an existing project:
1409
+
1410
+ ```bash
1411
+ tiangong-ai research project budget set PROJECT --max-cost-usd 50 \
1412
+ --provider-costs /absolute/provider-costs.json --confirm-budget \
1413
+ --workspace /absolute/workspace --json
1414
+ ```
1415
+
1416
+ The JSON file maps selected capability IDs to owner-reviewed USD maxima for one
1417
+ logical operation, for example `{ "method.public-source": 0.01 }`. Choose these
1418
+ values from your actual provider agreement; the example is synthetic. Each
1419
+ allocation includes that operation's bounded redirects, retries, and provider
1420
+ pagination. Missing prices block new provider work; they do not mean zero.
1421
+ Project and shared HTTP caches, and local reads of stored Data windows, require
1422
+ no new monetary allocation. The existing broker call-count budget still counts
1423
+ cache/tool invocations. Concurrent provider calls share one durable ledger;
1424
+ local ledger writes are serialized while network operations remain parallel.
1425
+
1426
+ The project ledger covers project stage/reviewer admissions and the project
1427
+ HTTP/Data evidence entrypoints. Workspace setup/Doctor probes, setup companion
1428
+ commands, standalone `data run`, and unrelated host-app actions have no project
1429
+ budget binding; their charges are unobserved here and must not be counted as
1430
+ zero. Native host work is represented by its declared allocation, not trusted
1431
+ provider metering.
1432
+
1433
+ The project budget response separates accounted estimates, pending reservations,
1434
+ remaining authorization, and overruns. It never reports a provider invoice.
1435
+ Model actions require declared route prices; native/provider operations use
1436
+ conservative allocations where trusted usage is unavailable. Increasing the
1437
+ authorization or changing provider maxima requires `--confirm-budget`.
1438
+ Tightening cannot exclude already spent or reserved exposure. Legacy projects
1439
+ retain their existing workspace controls until explicitly adopted; changing a
1440
+ project authorization leaves workspace settings and Doctor bindings intact.
1441
+ Fork/addendum recovery carries outstanding obligations to the current project
1442
+ without counting them twice. An uncertain operation remains pending until it
1443
+ ends or the owner explicitly resolves it with `project budget resolve`, a
1444
+ reservation ID, an accounted estimate, a reason, and `--confirm-budget`.
1445
+ A native reservation requires its original session to have ended first.
1446
+ Settled accounting evidence is immutable, including conservative allocated
1447
+ maxima; this interface does not revise historical costs or reconcile provider
1448
+ invoices. Choose reviewed per-operation maxima accordingly.
1449
+ An owner estimate above the ceiling records an overrun and blocks further
1450
+ positive-cost work; it does not silently increase the authorization.
1451
+ If a command fails after saving the decision but before writing its journal
1452
+ record, retrying the same command reconciles the missing record without changing
1453
+ the authorization or charging again. The record is marked as reconciliation;
1454
+ contradictory journal evidence stops the replay for inspection.
1455
+
1235
1456
  Every evidence source must resolve to an admitted input, a completed broker
1236
1457
  receipt, or a completed structured data-runtime receipt. Successful broker and
1237
1458
  data results are immutable content-addressed objects under
@@ -1263,6 +1484,11 @@ with `tiangong-ai data describe`, then run the exact request through:
1263
1484
  tiangong-ai research project evidence data run <project-id> \
1264
1485
  --request /absolute/path/to/data-run-request.json \
1265
1486
  --workspace /absolute/path/to/workspace --json
1487
+
1488
+ # When contextView.nextCursor is non-null, continue from persisted Evidence:
1489
+ tiangong-ai research project evidence data read <project-id> \
1490
+ --receipt <attempt-id> --cursor <opaque-next-cursor> \
1491
+ --workspace /absolute/path/to/workspace --json
1266
1492
  ```
1267
1493
 
1268
1494
  This Research command calls the same TypeScript data service in-process; it does
@@ -1275,6 +1501,12 @@ credentialed operation must resolve its namespaced logical credential from the
1275
1501
  workspace's owner-only store or it is blocked before any provider request.
1276
1502
  Standalone `tiangong-ai data run` keeps its separate manifest-declared
1277
1503
  environment-variable policy. A blocked data result is not promoted to evidence.
1504
+ Native packets publish data commands as `workspace-cli-relative-argv`;
1505
+ installed Auto Research must prefix them with its workspace-locked resolver
1506
+ rather than resolving a global CLI from `PATH`.
1507
+ Data Evidence continuation is read-only and does not consume another evidence-call
1508
+ or provider-request budget. Provider coverage, limits reached, and Agent context
1509
+ coverage are reported independently, so a result may be both partial and bounded.
1278
1510
  Analyze and synthesize packets contain hash-verified prior-stage artifacts and
1279
1511
  require no external evidence calls. Base and scientific review use only the
1280
1512
  packet-bound `research_list_artifacts` and `research_read_artifact` tools; shell,
@@ -1489,7 +1721,7 @@ acquisition snapshot; unchanged records are reused. Single and batch intake shar
1489
1721
  this rule. Historical records remain immutable, and atoms from deselected artifacts
1490
1722
  cannot fill current coverage. Same-snapshot conflicting extraction still fails.
1491
1723
 
1492
- Actual question/Policy/design changes or post-analysis work require the existing
1724
+ Substantive question/Policy/design changes or post-analysis work require the existing
1493
1725
  fork/addendum flow. Pre-feature snapshots without immutable evidence records cannot
1494
1726
  be repaired in place; use `research project fork SOURCE --to TARGET
1495
1727
  --resume-through discover` to reuse discovery/receipts/artifacts, or explicitly
@@ -1497,6 +1729,54 @@ start a new generation. There is no automatic migration. A top-journal successor
1497
1729
  requires a Policy approved for TARGET and `--design`, `--design-producer-agent`,
1498
1730
  and `--design-producer-session`; it cannot inherit scientific approval.
1499
1731
 
1732
+ ### Amend planned design declarations before analysis
1733
+
1734
+ At an idle boundary before analysis or inference freeze, a compatible runtime
1735
+ can amend an existing planned Policy rule's due gate, rationale, or links to
1736
+ already declared models/parameters. The question, claims, thresholds, model
1737
+ and parameter definitions/values, evidence requirements and Policy content stay
1738
+ fixed. Substantive changes continue through a reviewed successor.
1739
+
1740
+ ```bash
1741
+ tiangong-ai research schema show scientific-amendment --json
1742
+ tiangong-ai research scientific amendment plan PROJECT \
1743
+ --input /absolute/amendment-input.json --workspace /absolute/workspace --json
1744
+ ```
1745
+
1746
+ The closed input contains `schemaVersion: 1`, a reason and `changes`; use the
1747
+ schema for their exact fields. Amendment status exposes the current editable
1748
+ fields under `plannedRules`, so unchanged links can be preserved explicitly. Save the returned plan JSON unchanged externally.
1749
+ It shows before/after declarations, current parent bindings, preserved acquisition,
1750
+ invalidated scientific gates and `affectedTaskRequirementIds`. Planning does not
1751
+ mutate the project or request a provider. After explicit approval of that exact
1752
+ plan, retain the actual supplied confirmation text in a bounded UTF-8 file:
1753
+
1754
+ ```bash
1755
+ tiangong-ai research scientific amendment apply PROJECT \
1756
+ --plan /absolute/amendment-plan.json --confirm REVIEWED_PLAN_SHA256 \
1757
+ --authorization-source /absolute/confirmation.txt --workspace /absolute/workspace --json
1758
+ tiangong-ai research scientific amendment status PROJECT --workspace /absolute/workspace --json
1759
+ ```
1760
+
1761
+ The CLI records operator-supplied confirmation, not authenticated human identity.
1762
+ Original design bytes, fulfillment records and valid evidence remain unchanged;
1763
+ a new immutable declaration version and its exact parent/changes/source are
1764
+ retained. Planned rules are not marked scientifically satisfied. New early
1765
+ scientific reviews receive the version history and current effective design.
1766
+
1767
+ Task checks linked through existing claim/coverage bindings to changed rules
1768
+ become stale; unrelated checks remain reusable and idempotent. Affected check
1769
+ contexts expose `requiredDesignAmendmentSha256`; an explicit reassessment records
1770
+ its applicable amendment without requiring unchanged sources or calculations to
1771
+ be rerun. Unbound source-only checks do not establish the amended design's
1772
+ validity. Portable audit verifies the same selective relationships.
1773
+
1774
+ Changed parents or Policy, unsupported fields, active stages and late amendments
1775
+ reject. Inspect and replan instead of editing hashes. A committed but interrupted
1776
+ apply recovers through the existing project transaction and identical retry;
1777
+ unknown or conflicting files are preserved. This path does not add a new paid
1778
+ review role or silently upgrade a locked runtime that lacks these commands.
1779
+
1500
1780
  ### Fulfill predeclared scientific objects
1501
1781
 
1502
1782
  At an idle boundary before analysis, register the exact code/environment files
@@ -1638,6 +1918,107 @@ A completed workflow or approved reduced scope must not be described as satisfyi
1638
1918
  unanswered original requirements. Use the selected runtime's help/schema discovery
1639
1919
  once before adopting these commands; they are not an implicit runtime upgrade.
1640
1920
 
1921
+ Native producer stage packets preserve the original `taskContract` and also
1922
+ carry `taskAcceptance`, compiled from the same authoritative check view used by
1923
+ status/review. Recorded, failed, stale and unanswered rows remain distinct. The
1924
+ packet artifact directory exposes `inputs/task-acceptance.json` and its exact
1925
+ check result files for on-demand reading, including non-calculation results.
1926
+ Compilation occurs during fresh preparation; replay returns the existing packet.
1927
+ A recorded check still requires the existing independent review for acceptance.
1928
+
1929
+ ## Bounded computational investigations
1930
+
1931
+ Use an investigation for a still-unanswered computational requirement when the
1932
+ native producer needs several diagnostic attempts over fixed acquired inputs.
1933
+ The native host supplies hypotheses, programs, configuration choices and
1934
+ interpretation; the CLI observes individual calculations and records their
1935
+ relationships. It does not launch another producer or retry loop.
1936
+
1937
+ Discover the exact selected CLI's closed schemas first:
1938
+
1939
+ ```bash
1940
+ tiangong-ai research schema show investigation --json
1941
+ tiangong-ai research schema show investigation-attempt --json
1942
+ tiangong-ai research schema show investigation-candidate --json
1943
+ tiangong-ai research schema show investigation-promotion --json
1944
+ tiangong-ai research schema show investigation-close --json
1945
+ ```
1946
+
1947
+ An envelope binds the requirement, Policy/design and acquisition versions, exact
1948
+ canonical input hashes, existing Node/Python runtimes, program and environment
1949
+ bytes, allowed numerical options and required diagnostic metrics/status fields.
1950
+ Configure the numeric project budget before approval. Limits include maximum
1951
+ runs, cumulative/per-run wall time, cost allocations, per-run `maxOutputBytes`
1952
+ and cumulative `maxTotalOutputBytes`. The per-run byte limit is at most 512 MiB.
1953
+ A read-only plan starts no program; approval requires its exact hash and the
1954
+ actual supplied authorization text:
1955
+
1956
+ ```bash
1957
+ tiangong-ai research project investigation plan PROJECT --input /absolute/envelope.json --json
1958
+ tiangong-ai research project investigation approve PROJECT --input /absolute/envelope.json --confirm PLAN_SHA256 --authorization-source /absolute/approval.txt --json
1959
+ tiangong-ai research project investigation attempt PROJECT --input /absolute/attempt.json --json
1960
+ tiangong-ai research project investigation status PROJECT --investigation INVESTIGATION_ID --json
1961
+ ```
1962
+
1963
+ Add `--workspace /absolute/research` when operating outside the selected research
1964
+ workspace. Use a separate scratch directory outside that workspace. Calculation
1965
+ confinement denies host network access and workspace reads, makes runtime roots
1966
+ read-only, and allows capsule writes. An unsupported boundary is refused before
1967
+ execution. Environment locks remain declarations, not dependency attestation;
1968
+ programs that require installation or broader capabilities need a separately
1969
+ reviewed scope.
1970
+
1971
+ Within the approved envelope, attempts need no repeated owner approval. Each
1972
+ records a hypothesis, parent attempt (the previous committed attempt by default,
1973
+ or explicit `parentAttemptId`), configuration changes, exact results and bounded
1974
+ logs. Missing declared solver telemetry is diagnostic-incomplete. Process or
1975
+ solver failures remain diagnostic observations, not scientific answers.
1976
+
1977
+ Output accounting includes stdout/stderr and the observed high-water sizes of
1978
+ declared output files, including the runtime probe. Streams are checked as they
1979
+ arrive; files are checked periodically and at completion. Observed overshoot is
1980
+ retained honestly; this is not a quota on every temporary filesystem write.
1981
+ Exceeding the byte budget terminates the calculation, prevents result admission
1982
+ and stops further attempts under that envelope. Unknown cost remains unknown;
1983
+ software accounting retains the approved upper-bound allocation.
1984
+
1985
+ An identical committed attempt returns its original result. An unresolved start
1986
+ keeps its reservation and cannot be blindly replayed or replaced. A one-shot
1987
+ process guard retains the deadline independently of the observer and terminates
1988
+ the calculation if that observer disconnects; missing durable results remain
1989
+ unresolved rather than being reconstructed as success. Status exposes current
1990
+ authority, reservations and the permitted next action. Unresolved attempt status
1991
+ and promoted `task run inspect` also check the local supervisor process identity;
1992
+ a missing or mismatched process never establishes completion or permits retry.
1993
+ These local coordinates stay outside portable audit records. `select` records a
1994
+ candidate; `close` records why investigation stopped and releases unused cost
1995
+ allocation while preserving history. It refuses closure with unresolved work.
1996
+
1997
+ ```bash
1998
+ tiangong-ai research project investigation select PROJECT --input /absolute/selection.json --json
1999
+ tiangong-ai research project investigation close PROJECT --input /absolute/closure.json --json
2000
+ tiangong-ai research project investigation promotion plan PROJECT --input /absolute/promotion.json --json
2001
+ tiangong-ai research project investigation promotion approve PROJECT --input /absolute/promotion.json --confirm PLAN_SHA256 --authorization-source /absolute/promotion-approval.txt --json
2002
+ ```
2003
+
2004
+ Promotion approval alone does not freeze scientific objects or satisfy the task.
2005
+ Use existing scientific object registration and fulfillment for predeclared
2006
+ pending slots, or a separately approved authoritative successor for a changed
2007
+ frozen design. Then supply `investigationPromotionSha256` in a new `task run
2008
+ observe` request using the exact frozen recipe. That approval admits one fresh
2009
+ certification; a failed or unresolved certification does not authorize another.
2010
+ A candidate or older ordinary run cannot substitute for it. A passed observation
2011
+ can enter task-check records, with the existing independent review still required
2012
+ before the task is answered.
2013
+
2014
+ Portable audits retain the investigation, attempt, candidate, promotion,
2015
+ certification and closure relationships. A successor includes the explicitly
2016
+ referenced source investigation's immutable records and blobs, excluding local
2017
+ routing and unrelated investigations. Verification reconstructs the scientific
2018
+ view at promotion and certification start, so a later freeze cannot retroactively
2019
+ certify an earlier run. Hash/relationship verification does not
2020
+ establish authorship, hermetic execution or scientific truth.
2021
+
1641
2022
  ## Research Search
1642
2023
 
1643
2024
  Forward research-oriented search requests to SCI, report, patent, and ESG edge