@tiangong-ai/cli 0.0.60 → 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 (239) hide show
  1. package/AGENTS.md +17 -6
  2. package/README.md +577 -55
  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 +341 -28
  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/acquisition-routes.d.ts +1 -1
  72. package/dist/research/workspace/acquisition-routes.js +2 -11
  73. package/dist/research/workspace/acquisition-routes.js.map +1 -1
  74. package/dist/research/workspace/artifact-read-audit.d.ts +16 -0
  75. package/dist/research/workspace/artifact-read-audit.js +176 -0
  76. package/dist/research/workspace/artifact-read-audit.js.map +1 -0
  77. package/dist/research/workspace/artifact-trace.d.ts +12 -0
  78. package/dist/research/workspace/artifact-trace.js +109 -0
  79. package/dist/research/workspace/artifact-trace.js.map +1 -0
  80. package/dist/research/workspace/artifact-view-mcp.d.ts +75 -0
  81. package/dist/research/workspace/artifact-view-mcp.js +214 -0
  82. package/dist/research/workspace/artifact-view-mcp.js.map +1 -0
  83. package/dist/research/workspace/artifact-views.d.ts +100 -0
  84. package/dist/research/workspace/artifact-views.js +395 -0
  85. package/dist/research/workspace/artifact-views.js.map +1 -0
  86. package/dist/research/workspace/audit-bundle.d.ts +4 -0
  87. package/dist/research/workspace/audit-bundle.js +130 -11
  88. package/dist/research/workspace/audit-bundle.js.map +1 -1
  89. package/dist/research/workspace/broker.js +25 -4
  90. package/dist/research/workspace/broker.js.map +1 -1
  91. package/dist/research/workspace/constants.d.ts +1 -0
  92. package/dist/research/workspace/constants.js +1 -0
  93. package/dist/research/workspace/constants.js.map +1 -1
  94. package/dist/research/workspace/content-evidence.d.ts +1 -0
  95. package/dist/research/workspace/content-evidence.js +1 -1
  96. package/dist/research/workspace/content-evidence.js.map +1 -1
  97. package/dist/research/workspace/credentials.js +2 -1
  98. package/dist/research/workspace/credentials.js.map +1 -1
  99. package/dist/research/workspace/data-evidence-adapter.d.ts +71 -0
  100. package/dist/research/workspace/data-evidence-adapter.js +269 -59
  101. package/dist/research/workspace/data-evidence-adapter.js.map +1 -1
  102. package/dist/research/workspace/data-evidence-view.d.ts +58 -0
  103. package/dist/research/workspace/data-evidence-view.js +411 -0
  104. package/dist/research/workspace/data-evidence-view.js.map +1 -0
  105. package/dist/research/workspace/evidence-ledger.js +32 -29
  106. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  107. package/dist/research/workspace/evidence.d.ts +28 -0
  108. package/dist/research/workspace/evidence.js +48 -0
  109. package/dist/research/workspace/evidence.js.map +1 -1
  110. package/dist/research/workspace/executor.d.ts +32 -2
  111. package/dist/research/workspace/executor.js +286 -42
  112. package/dist/research/workspace/executor.js.map +1 -1
  113. package/dist/research/workspace/investigation-attempt.d.ts +159 -0
  114. package/dist/research/workspace/investigation-attempt.js +619 -0
  115. package/dist/research/workspace/investigation-attempt.js.map +1 -0
  116. package/dist/research/workspace/investigation-audit.d.ts +20 -0
  117. package/dist/research/workspace/investigation-audit.js +306 -0
  118. package/dist/research/workspace/investigation-audit.js.map +1 -0
  119. package/dist/research/workspace/investigation-candidate.d.ts +84 -0
  120. package/dist/research/workspace/investigation-candidate.js +156 -0
  121. package/dist/research/workspace/investigation-candidate.js.map +1 -0
  122. package/dist/research/workspace/investigation-certification.d.ts +39 -0
  123. package/dist/research/workspace/investigation-certification.js +152 -0
  124. package/dist/research/workspace/investigation-certification.js.map +1 -0
  125. package/dist/research/workspace/investigation-close.d.ts +47 -0
  126. package/dist/research/workspace/investigation-close.js +153 -0
  127. package/dist/research/workspace/investigation-close.js.map +1 -0
  128. package/dist/research/workspace/investigation-lineage.d.ts +8 -0
  129. package/dist/research/workspace/investigation-lineage.js +10 -0
  130. package/dist/research/workspace/investigation-lineage.js.map +1 -0
  131. package/dist/research/workspace/investigation-observer.d.ts +22 -0
  132. package/dist/research/workspace/investigation-observer.js +122 -0
  133. package/dist/research/workspace/investigation-observer.js.map +1 -0
  134. package/dist/research/workspace/investigation-promotion.d.ts +129 -0
  135. package/dist/research/workspace/investigation-promotion.js +316 -0
  136. package/dist/research/workspace/investigation-promotion.js.map +1 -0
  137. package/dist/research/workspace/investigation-requirements.d.ts +5 -0
  138. package/dist/research/workspace/investigation-requirements.js +32 -0
  139. package/dist/research/workspace/investigation-requirements.js.map +1 -0
  140. package/dist/research/workspace/investigation-resources.d.ts +12 -0
  141. package/dist/research/workspace/investigation-resources.js +78 -0
  142. package/dist/research/workspace/investigation-resources.js.map +1 -0
  143. package/dist/research/workspace/investigation-source-export.d.ts +6 -0
  144. package/dist/research/workspace/investigation-source-export.js +68 -0
  145. package/dist/research/workspace/investigation-source-export.js.map +1 -0
  146. package/dist/research/workspace/investigation-store.d.ts +9 -0
  147. package/dist/research/workspace/investigation-store.js +55 -0
  148. package/dist/research/workspace/investigation-store.js.map +1 -0
  149. package/dist/research/workspace/investigation.d.ts +424 -0
  150. package/dist/research/workspace/investigation.js +716 -0
  151. package/dist/research/workspace/investigation.js.map +1 -0
  152. package/dist/research/workspace/native-process-supervisor.d.ts +1 -0
  153. package/dist/research/workspace/native-process-supervisor.js +97 -0
  154. package/dist/research/workspace/native-process-supervisor.js.map +1 -0
  155. package/dist/research/workspace/native-run.d.ts +150 -0
  156. package/dist/research/workspace/native-run.js +879 -0
  157. package/dist/research/workspace/native-run.js.map +1 -0
  158. package/dist/research/workspace/preflight.d.ts +11 -2
  159. package/dist/research/workspace/preflight.js +28 -20
  160. package/dist/research/workspace/preflight.js.map +1 -1
  161. package/dist/research/workspace/project-authority.js +2 -0
  162. package/dist/research/workspace/project-authority.js.map +1 -1
  163. package/dist/research/workspace/project-budget.d.ts +41 -0
  164. package/dist/research/workspace/project-budget.js +265 -0
  165. package/dist/research/workspace/project-budget.js.map +1 -0
  166. package/dist/research/workspace/project-mutations.d.ts +1 -1
  167. package/dist/research/workspace/project-mutations.js +29 -3
  168. package/dist/research/workspace/project-mutations.js.map +1 -1
  169. package/dist/research/workspace/projects.d.ts +66 -0
  170. package/dist/research/workspace/projects.js +182 -3
  171. package/dist/research/workspace/projects.js.map +1 -1
  172. package/dist/research/workspace/provider-budget.d.ts +3 -0
  173. package/dist/research/workspace/provider-budget.js +45 -0
  174. package/dist/research/workspace/provider-budget.js.map +1 -0
  175. package/dist/research/workspace/provider-state.d.ts +1 -0
  176. package/dist/research/workspace/provider-state.js +20 -0
  177. package/dist/research/workspace/provider-state.js.map +1 -0
  178. package/dist/research/workspace/publication-lineage.d.ts +34 -0
  179. package/dist/research/workspace/publication-lineage.js +165 -0
  180. package/dist/research/workspace/publication-lineage.js.map +1 -0
  181. package/dist/research/workspace/publication-workflow.d.ts +24 -0
  182. package/dist/research/workspace/publication-workflow.js +118 -14
  183. package/dist/research/workspace/publication-workflow.js.map +1 -1
  184. package/dist/research/workspace/request-provenance.d.ts +67 -0
  185. package/dist/research/workspace/request-provenance.js +115 -0
  186. package/dist/research/workspace/request-provenance.js.map +1 -0
  187. package/dist/research/workspace/review-executor.d.ts +6 -1
  188. package/dist/research/workspace/review-executor.js +39 -14
  189. package/dist/research/workspace/review-executor.js.map +1 -1
  190. package/dist/research/workspace/runtime.d.ts +64 -1
  191. package/dist/research/workspace/runtime.js +359 -112
  192. package/dist/research/workspace/runtime.js.map +1 -1
  193. package/dist/research/workspace/sanitization.js +1 -1
  194. package/dist/research/workspace/sanitization.js.map +1 -1
  195. package/dist/research/workspace/schema-compatibility.d.ts +5 -0
  196. package/dist/research/workspace/schema-compatibility.js +55 -0
  197. package/dist/research/workspace/schema-compatibility.js.map +1 -0
  198. package/dist/research/workspace/scientific-amendment.d.ts +103 -0
  199. package/dist/research/workspace/scientific-amendment.js +537 -0
  200. package/dist/research/workspace/scientific-amendment.js.map +1 -0
  201. package/dist/research/workspace/scientific-design.js +8 -17
  202. package/dist/research/workspace/scientific-design.js.map +1 -1
  203. package/dist/research/workspace/scientific-fulfillment-audit.d.ts +21 -0
  204. package/dist/research/workspace/scientific-fulfillment-audit.js +217 -0
  205. package/dist/research/workspace/scientific-fulfillment-audit.js.map +1 -0
  206. package/dist/research/workspace/scientific-fulfillment.d.ts +130 -0
  207. package/dist/research/workspace/scientific-fulfillment.js +553 -0
  208. package/dist/research/workspace/scientific-fulfillment.js.map +1 -0
  209. package/dist/research/workspace/scientific-review-execution.js +236 -75
  210. package/dist/research/workspace/scientific-review-execution.js.map +1 -1
  211. package/dist/research/workspace/scientific-review.d.ts +6 -1
  212. package/dist/research/workspace/scientific-review.js +228 -52
  213. package/dist/research/workspace/scientific-review.js.map +1 -1
  214. package/dist/research/workspace/setup-catalog.js +3 -3
  215. package/dist/research/workspace/setup-release.d.ts +22 -0
  216. package/dist/research/workspace/setup-release.js +426 -0
  217. package/dist/research/workspace/setup-release.js.map +1 -0
  218. package/dist/research/workspace/setup-runtime-integrity.d.ts +2 -0
  219. package/dist/research/workspace/setup-runtime-integrity.js +31 -0
  220. package/dist/research/workspace/setup-runtime-integrity.js.map +1 -0
  221. package/dist/research/workspace/setup-upgrade.d.ts +17 -0
  222. package/dist/research/workspace/setup-upgrade.js +784 -0
  223. package/dist/research/workspace/setup-upgrade.js.map +1 -0
  224. package/dist/research/workspace/setup.d.ts +31 -39
  225. package/dist/research/workspace/setup.js +220 -17
  226. package/dist/research/workspace/setup.js.map +1 -1
  227. package/dist/research/workspace/task-acceptance.d.ts +17 -2
  228. package/dist/research/workspace/task-acceptance.js +106 -10
  229. package/dist/research/workspace/task-acceptance.js.map +1 -1
  230. package/dist/research/workspace/task-audit.d.ts +5 -1
  231. package/dist/research/workspace/task-audit.js +70 -5
  232. package/dist/research/workspace/task-audit.js.map +1 -1
  233. package/dist/research/workspace/task-contract.d.ts +4 -1
  234. package/dist/research/workspace/task-contract.js +26 -5
  235. package/dist/research/workspace/task-contract.js.map +1 -1
  236. package/dist/research/workspace/types.d.ts +50 -3
  237. package/dist/research/workspace/workspace.js +34 -4
  238. package/dist/research/workspace/workspace.js.map +1 -1
  239. 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-03
16
- lastReviewedCommit: 06dadef170ab79c19eef9a35663e86fdee22479b
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
@@ -607,8 +705,9 @@ owns the same due gate. Pending implementations use `null` for implementation
607
705
  SHA-256, locator, and entrypoint; pending environments use `null` for lock
608
706
  SHA-256 and locator. They are exposed in every earlier review packet as
609
707
  `futureGateObligations` and become blocking mechanical errors at that gate.
610
- Freezing them requires a new authoritative generation; it never upgrades the
611
- old object in place.
708
+ Their predeclared slots may be fulfilled through the append-only same-project
709
+ command below. The original design bytes never change; a material assumption,
710
+ question, policy or already-frozen value still requires a reviewed successor.
612
711
 
613
712
  Use the same Policy project ID and exact design when preflighting and admitting
614
713
  the research project:
@@ -677,6 +776,31 @@ schema-valid, packet/session-bound review. A saved successful execution is
677
776
  replayed without another model call after revalidating its immutable proof.
678
777
  Failures require explicit `--retry` and remain bounded by the attempt budget;
679
778
  unreported usage and interrupted wall time retain conservative reservations.
779
+ Failed processes return a bounded, sanitized exit diagnostic and record it in
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
796
+ Claude invocation uses the same dialect-annotation conversion as
797
+ `research schema show NAME --compatibility claude-code`; canonical controller
798
+ validation and its scientific constraints remain unchanged.
799
+ The provider view explicitly types scalar constants/enums; returned values are
800
+ never coerced to satisfy the canonical schema.
801
+ Claude's structured result is used instead of any accompanying narrative;
802
+ declared error results remain failures, with their safe diagnostic ahead of
803
+ incidental stderr warnings.
680
804
  A nonpassing mechanical packet can receive an independent stop verdict, never
681
805
  an override. The existing manual submit command remains available for an exact
682
806
  independent review.
@@ -685,6 +809,8 @@ Reviewer status is read-only and transport-aware. Native-direct does not
685
809
  require a bridge connection. Smoke configuration readiness is explicitly not
686
810
  production readiness and does not demand an attestation that smoke mode never
687
811
  writes. Production still requires its current reviewer doctor attestation.
812
+ Packet read responses carry their actual content and receipt together; a
813
+ receipt alone does not establish that the host displayed the content to its model.
688
814
 
689
815
  Repeat the same prepare/execute route for `evidence-construct`, adding an
690
816
  owner-reviewed JSON array of absolute canonical canary paths with
@@ -704,17 +830,40 @@ audit manifest separately records the raw stored packet-file digest. This keeps
704
830
  packet identity and byte-level transfer verification explicit rather than
705
831
  overloading one hash with both meanings.
706
832
 
707
- 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
708
838
  manuscript, schema-valid publication assessment, and an explicit submission
709
839
  manifest. The manuscript must contain Abstract, Introduction, Methods, Results,
710
- 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
711
844
  submission manifest must bind distinct absolute files for cover letter, title
712
845
  page, reporting checklist, data availability, code availability, and source
713
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.
714
856
  `research publication freeze` then content-addresses the Policy, scientific
715
857
  design and early reviews, acquisition/content/inference snapshots, mode-bound
716
858
  analysis, Claim-Evidence Graph, base outputs, manuscript, assessment,
717
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.
718
867
  Computational/mixed analysis still requires reproduced metadata with exact
719
868
  implementation/environment bindings. Qualitative analysis uses
720
869
  `status: not-applicable`, null command/seed and empty implementation/environment
@@ -732,6 +881,9 @@ generation, packet, review, journal, and closure objects persist only their
732
881
  SHA-256 bindings.
733
882
 
734
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
735
887
  tiangong-ai research schema show publication-assessment --json
736
888
  tiangong-ai research publication freeze top-journal-paper \
737
889
  --manuscript /absolute/path/to/final-manuscript.md \
@@ -759,6 +911,16 @@ derivatives. Credentials, setup
759
911
  sources, browser profiles, native active state, capsules, unrelated projects,
760
912
  and host-specific absolute paths are excluded.
761
913
 
914
+ Text inspection distinguishes internal identifiers such as `interruptedSessionId`
915
+ from credential fields. It checks raw text and read-only decoded JSON/JSONL,
916
+ including escaped keys and nested string payloads, while retaining the exact
917
+ evidence and ledger bytes. Authentication values remain blocked even when wrapped
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.
923
+
762
924
  ```bash
763
925
  tiangong-ai research project audit export top-journal-paper \
764
926
  --output /absolute/path/to/new-audit-directory \
@@ -822,6 +984,11 @@ presentation Skills are post-closure authoring only. Run selected preprocessors
822
984
  and acquisition adapters with `research setup companion run`, then admit their
823
985
  exact hash-bound output separately. Automatic paper OA exhaustion returns an
824
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.
825
992
  The paper companion and its setup-doctor preflight both enter the verified
826
993
  Skill through `scripts/runtime.py`; the CLI never bypasses that lock by invoking
827
994
  `fetch.py` or importing `pypdf` from ambient Python. A missing runtime remains
@@ -859,8 +1026,10 @@ For large local sources, pass an immutable `--input-plan` to both preflight and
859
1026
  project initialization. Each plan entry may expose either a separate
860
1027
  `contextPath` or non-overlapping, one-based `contextRanges`; the producer sees
861
1028
  only that bounded context, while independent review receives the hash-verified
862
- full source. Symlinks, duplicate content, changed hashes, and context above
863
- `maxInputContextTokens` are rejected.
1029
+ full source. Symlinks, duplicate content and changed hashes are rejected.
1030
+ There is no total stage-context length gate: large admitted objects remain complete
1031
+ and are read through the packet's artifact directory instead of being forced into
1032
+ the initial prompt. This does not expose files deliberately withheld by an input plan.
864
1033
 
865
1034
  The workspace stores its current protocol state under `.tiangong-research/`.
866
1035
  Each project follows the evidence-first sequence: broad discovery, strict
@@ -871,6 +1040,13 @@ CodeBuddy session. The CLI never launches a nested producer process. Independent
871
1040
  runs through the other configured agent family's CLI, and execution is blocked
872
1041
  when the two roles use the same family.
873
1042
 
1043
+ Native packets direct the host to save one new JSON submission file, not to write
1044
+ admitted output paths. Acquire may retrieve files and readable derivatives for
1045
+ provisionally admitted sources through the packet's binding/registration commands;
1046
+ it may not reopen discovery. Analyze, synthesize and the isolated reviewer retain
1047
+ their no-new-evidence boundary. Headless reviewer prompts remain capsule-scoped
1048
+ and return JSON rather than saving native submission files.
1049
+
874
1050
  Every workspace mutation is serialized by an owner-recorded directory lease
875
1051
  with a heartbeat. A later command immediately reclaims a lease whose same-host
876
1052
  owner process is definitely dead; an unverifiable cross-host lease is reclaimed
@@ -940,6 +1116,29 @@ reviewer shell, browser, web, undeclared MCP, and Skill tools remain disabled.
940
1116
  Do not use Full Access, sandbox-disable flags, unsandboxed-command exceptions,
941
1117
  or silent transport fallback.
942
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
+
943
1142
  WorkBuddy/CodeBuddy capsule teardown never requests recursive bulk deletion
944
1143
  inside the outer IDE. Native stages remove only the single active-session
945
1144
  binding, while completed, aborted, handed-off, and reviewer/work-package
@@ -1165,7 +1364,8 @@ total tokens, USD 5,000, 30 days, and package ceilings of 12,000,000 for discove
1165
1364
  acquisition, 1,500,000 each for analysis and synthesis, and 2,500,000 for
1166
1365
  review. Primary output is bounded at 32,000 tokens and a separately invoked
1167
1366
  repair at 16,000. The production broker hard ceiling is 256 bounded views with
1168
- 32,000 context tokens per view; input context is bounded at 128,000 tokens.
1367
+ 32,000 context tokens per broker view. The legacy `maxInputContextTokens` setting
1368
+ is an embedding/planning hint, not an input admission or artifact-read ceiling.
1169
1369
  Top-journal admission additionally reserves three early scientific reviews at
1170
1370
  500,000 tokens each, four final publication reviews at 750,000 each, and one
1171
1371
  4,000,000-token revision cycle, including their finite wall-time allowances.
@@ -1174,7 +1374,7 @@ stop control ordinary use, while the finite ceilings, three attempts per
1174
1374
  package, and explicit confirmation above the cost threshold stop runaway work.
1175
1375
  Smoke-test workspaces retain their smaller low-cost defaults.
1176
1376
  Before project initialization and every executable package, the control plane
1177
- requires the complete token and conservative price reservation to fit. Native
1377
+ requires a token and conservative price estimate to fit the finite execution budget. Native
1178
1378
  producer stages reserve prompt, schema, admitted context, bounded broker
1179
1379
  context, and output allowance, but the host app does not expose trusted
1180
1380
  per-stage usage telemetry to this CLI. A successful native submit therefore
@@ -1184,9 +1384,15 @@ output bytes/tokens, provenance, coverage, hashes, and remaining project budget.
1184
1384
  It does not claim a provider-side turn or output-token cap for the host app.
1185
1385
 
1186
1386
  Independent review uses the pre-call reservation calculator and the reviewer's
1187
- provider-side structured-output/turn controls where available. Review admission
1188
- reserves three maximum-size generated artifacts plus one globally bounded
1189
- evidence-excerpt bundle, and formatting repair remains one separately budgeted,
1387
+ provider-side structured-output/turn controls where available. Claude packet-only
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
1390
+ token/cost guards because its CLI has no equivalent turn flag. Planning uses a
1391
+ small initial-context estimate and expected reads, not the entire corpus or an
1392
+ unbounded legacy context hint. Preflight reports `inputContextTokenLimit=null`.
1393
+ These are approximate estimates, not precise billing; scientific review keeps
1394
+ the approved remaining cost ceiling separate from its rough read-cost estimate.
1395
+ Formatting repair remains one separately budgeted,
1190
1396
  tool-free JSON correction. Production workspaces enforce a finite 256-view
1191
1397
  broker ceiling mechanically, while each project derives a much smaller working
1192
1398
  budget from its reviewed coverage requirements and stops early when they are
@@ -1198,6 +1404,55 @@ records and JSONL progress preserve sanitized accounting mode, event/item
1198
1404
  counts, provider turns, tool calls, reasoning tokens, and bounded provider
1199
1405
  errors.
1200
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
+
1201
1456
  Every evidence source must resolve to an admitted input, a completed broker
1202
1457
  receipt, or a completed structured data-runtime receipt. Successful broker and
1203
1458
  data results are immutable content-addressed objects under
@@ -1211,8 +1466,9 @@ context, evidence objects, and registered local input hashes before recording
1211
1466
  their safe locators. Capsule deletion therefore does not delete the durable
1212
1467
  review chain.
1213
1468
 
1214
- Native discovery preparation embeds the exact staged capability manifest and
1215
- each external Skill's top-level `SKILL.md`. It also projects every built-in data
1469
+ Native discovery preparation supplies the exact staged capability manifest and
1470
+ each external Skill's top-level `SKILL.md` inline or by an exact artifact reference.
1471
+ It also projects every built-in data
1216
1472
  operation dynamically, with no per-provider Research adapter. The current host
1217
1473
  may fetch generic broker evidence with `research project evidence fetch`, whose bounded request file
1218
1474
  contains logical IDs but no credential values. The manifest includes the locked,
@@ -1228,6 +1484,11 @@ with `tiangong-ai data describe`, then run the exact request through:
1228
1484
  tiangong-ai research project evidence data run <project-id> \
1229
1485
  --request /absolute/path/to/data-run-request.json \
1230
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
1231
1492
  ```
1232
1493
 
1233
1494
  This Research command calls the same TypeScript data service in-process; it does
@@ -1240,19 +1501,43 @@ credentialed operation must resolve its namespaced logical credential from the
1240
1501
  workspace's owner-only store or it is blocked before any provider request.
1241
1502
  Standalone `tiangong-ai data run` keeps its separate manifest-declared
1242
1503
  environment-variable policy. A blocked data result is not promoted to evidence.
1243
- Analyze and synthesize packets contain bounded, hash-verified prior-stage
1244
- artifacts and require no external evidence calls. Review is tool-free and uses the
1245
- reviewer's route-specific structured-output turn cap:
1246
- its prompt embeds the complete generated artifacts and a deterministic,
1247
- globally bounded set of excerpts distributed across registered local contexts
1248
- and broker receipts. Broker excerpts prioritize deterministic, sanitized
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.
1510
+ Analyze and synthesize packets contain hash-verified prior-stage artifacts and
1511
+ require no external evidence calls. Base and scientific review use only the
1512
+ packet-bound `research_list_artifacts` and `research_read_artifact` tools; shell,
1513
+ general filesystem, browser, broker and undeclared integrations remain disabled.
1514
+ The same surface works through native-direct and the signed sandbox-bridge.
1515
+ Small objects/excerpts are included initially; large objects are referenced without
1516
+ rejecting the stage. Broker excerpts prioritize deterministic, sanitized
1249
1517
  projections of the exact raw-response items selected by admitted evidence JSON
1250
1518
  Pointers; uncited receipts retain metadata-only bindings, and unresolved
1251
1519
  pointers receive a bounded-context fallback. The packet hash is schema-bound, but complete packet
1252
1520
  metadata is not redundantly copied into model context. Full local files,
1253
- original per-receipt bounded contexts, raw broker objects, and the complete
1254
- packet remain hash-bound for durable human/mechanical audit; the model must not
1255
- claim to have read beyond the embedded excerpts.
1521
+ original per-receipt contexts, raw broker objects, checks and counterevidence stay
1522
+ discoverable in the exact directory. Reads use opaque object IDs and byte offsets;
1523
+ UTF-8 pages preserve character boundaries. Omit `length` for a 16 KiB page or use
1524
+ `length: null` for the whole object, without a CLI read-length ceiling. Objects
1525
+ actually read are preserved under `reads/objects/`, with exact directory and
1526
+ packet/object/view hash receipts. Receipts prove bytes delivered, not comprehension
1527
+ or scientific truth; actual provider/model capacity remains a limitation.
1528
+
1529
+ Native hosts can use the same primitives without adding an IDE integration:
1530
+
1531
+ ```bash
1532
+ tiangong-ai research project stage artifacts PROJECT --session SESSION --workspace /absolute/workspace --json
1533
+ tiangong-ai research project stage read PROJECT --session SESSION --artifact OBJECT_ID --offset 0 --length 16384 --workspace /absolute/workspace --json
1534
+ tiangong-ai research project stage read PROJECT --session SESSION --artifact OBJECT_ID --length all --workspace /absolute/workspace --json
1535
+ ```
1536
+
1537
+ Follow `nextOffset` for subsequent pages. `--encoding base64` explicitly requests
1538
+ binary bytes; prefer a registered text derivative for interpretation. The channel
1539
+ does not scan arbitrary host paths or discover files created after the snapshot.
1540
+ Stopped, changed or expired native sessions cannot read through it.
1256
1541
  The CLI mechanically derives local full-text availability, source types,
1257
1542
  counts, date coverage, source IDs, and the coverage decision. A `partial`
1258
1543
  dimension is usable but incomplete; a missing dimension or unmet declared
@@ -1436,7 +1721,7 @@ acquisition snapshot; unchanged records are reused. Single and batch intake shar
1436
1721
  this rule. Historical records remain immutable, and atoms from deselected artifacts
1437
1722
  cannot fill current coverage. Same-snapshot conflicting extraction still fails.
1438
1723
 
1439
- 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
1440
1725
  fork/addendum flow. Pre-feature snapshots without immutable evidence records cannot
1441
1726
  be repaired in place; use `research project fork SOURCE --to TARGET
1442
1727
  --resume-through discover` to reuse discovery/receipts/artifacts, or explicitly
@@ -1444,6 +1729,91 @@ start a new generation. There is no automatic migration. A top-journal successor
1444
1729
  requires a Policy approved for TARGET and `--design`, `--design-producer-agent`,
1445
1730
  and `--design-producer-session`; it cannot inherit scientific approval.
1446
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
+
1780
+ ### Fulfill predeclared scientific objects
1781
+
1782
+ At an idle boundary before analysis, register the exact code/environment files
1783
+ as scientific objects, then supply only the pending slots already named in the
1784
+ frozen design:
1785
+
1786
+ ```bash
1787
+ tiangong-ai research schema show scientific-fulfillment --json
1788
+ tiangong-ai research scientific fulfillment status PROJECT --workspace /absolute/workspace --json
1789
+ tiangong-ai research scientific fulfillment record PROJECT \
1790
+ --input /absolute/fulfillment.json --workspace /absolute/workspace --json
1791
+ ```
1792
+
1793
+ The closed input names `designSha256`, the exact `parentFulfillmentSha256`
1794
+ (`null` initially), a non-sensitive reason, and arrays `modelImplementations`,
1795
+ `environmentLocks`, and `parameterStates`. Model entries bind the registered
1796
+ `objectLocator`, raw `sha256`, registration `recordSha256`, and the declared
1797
+ `modelId`; implementations additionally supply `entrypoint`. Parameter entries
1798
+ name the existing `parameterId` and every exact `stateId`, its source-derived
1799
+ `value`, and admitted `evidenceAtomIds` from the frozen typed-content snapshot.
1800
+ Units, state sets, ranges, factors, composition, claims, thresholds and Policy
1801
+ cannot be changed through this intake. At least one pending slot is required.
1802
+
1803
+ Identical replay returns the same immutable record. Replacing an already-frozen
1804
+ slot, guessing a parent, an active native session, or analysis/inference already
1805
+ started is refused. The journal is the commit point; interrupted state projection
1806
+ uses the same narrow recovery mechanism as acquisition/scope revisions.
1807
+
1808
+ Only the fulfillment's due gate and later scientific gates are reset; earlier
1809
+ reviews remain bound to their unchanged deadline-specific design view. New review
1810
+ packets include the original design, the exact fulfillment chain, the effective
1811
+ view and registered code/environment bytes. Filing objects does **not** mark the
1812
+ original Policy rule scientifically satisfied or certify code execution. The
1813
+ existing independent reviewer must assess the actual objects and rule. Portable
1814
+ audits retain the raw objects and registration metadata and verify the committed
1815
+ fulfillment head, slot semantics and current review view after relocation.
1816
+
1447
1817
  ### Original task, current scope, and actual checks
1448
1818
 
1449
1819
  For a new research project, record a small original-requirement checklist after
@@ -1462,6 +1832,17 @@ Each requirement has a stable ID, acceptance condition, `checkKind` (`evidence`,
1462
1832
  coverage dimensions. Original wording cannot be overwritten. Old projects without
1463
1833
  a task remain explicitly unassessed rather than retrospectively accepted.
1464
1834
 
1835
+ Optional `requestProvenance` supplies `mode` (`verbatim`, `interpreted`, or
1836
+ `reconstructed`), `source` (`kind: user-message|user-file`, exact `text`, `locator`
1837
+ or null), and `explanation`. A null source is valid only for reconstruction.
1838
+ Verbatim source text must equal `originalRequest` exactly, including BOM and line
1839
+ endings. Source bytes are immutable; locator values are retained only by hash.
1840
+ Missing provenance is explicitly `unrecorded`, never inferred retroactively.
1841
+ Scope changes and forks preserve it. Declared origin is not authenticated authorship;
1842
+ secrets are rejected before admission.
1843
+ Scientific review also stages the exact supplied request-source object, so its
1844
+ original bytes are available through the same packet-only read channel as its hash.
1845
+
1465
1846
  Before analysis, use `research schema show task-scope-change` and
1466
1847
  `project task scope propose PROJECT --input FILE --expected-contract SHA` to
1467
1848
  propose a change. Review the returned `changes.details` before/after values, then
@@ -1479,17 +1860,57 @@ between native stages. Records bind the exact requirement version, source/atom/
1479
1860
  finding IDs, and explicitly selected bounded UTF-8 result files. The declared
1480
1861
  command is stored only by hash and is **not executed by this command**. Raw result
1481
1862
  bytes are copied into immutable hash-addressed objects; secrets and control-store
1482
- sources are rejected. Positive/negative computational outcomes need a command and
1483
- results; failed, inconclusive, and not-run checks remain honest without invented
1484
- results. All records say `trust=native-observation`, `executionCertified=false`.
1863
+ sources are rejected. A reported computation without an observed run remains
1864
+ `unverified-execution`, not an answered computational requirement. Failed,
1865
+ inconclusive and not-run checks remain honest without invented results. Evidence
1866
+ and proof checks need no fabricated computation. All records say
1867
+ `trust=native-observation`, `executionCertified=false`.
1868
+
1869
+ For an actual calculation, the native host authors and reviews one ordinary
1870
+ Node/Python program and explicitly requests observation:
1871
+
1872
+ ```bash
1873
+ tiangong-ai research schema show task-native-run --json
1874
+ tiangong-ai research project task run observe PROJECT \
1875
+ --input /absolute/native-run.json --confirm-execution --workspace /absolute/workspace --json
1876
+ tiangong-ai research project task run inspect PROJECT --run RUN_ID \
1877
+ --workspace /absolute/workspace --json
1878
+ ```
1485
1879
 
1486
- One unchanged result blob is stored and included once per reviewer context. The
1880
+ The closed request binds the computational requirement version, explicit
1881
+ interpreter, script, environment-lock declaration, current acquisition artifact
1882
+ IDs/hashes, unique output filenames, non-secret arguments and finite timeout.
1883
+ Use `{input:ID}` / `{output:ID}` placeholders rather than host paths in arguments,
1884
+ and name `nativeSessionId` when a producer stage is active. The CLI snapshots
1885
+ inputs and plans exact output paths before invoking the ordinary program. It
1886
+ adds no permission bypass or dependency installation, forwards no provider
1887
+ credentials and launches no reasoning agent. The workspace lease is released
1888
+ during computation. Program authoring and scientific decisions remain native.
1889
+
1890
+ The returned record binds runtime/code/input/output bytes, process exit/signal
1891
+ and time. Use `nativeRunSha256` at acceptance; those results come only from that
1892
+ run, not a directory scan or unrelated external files. Success requires a zero
1893
+ exit, stable inputs and every declared output; failure/timeout/cancellation and
1894
+ missing or changed outputs remain nonpassing records. Committed replay does not
1895
+ run again. An incomplete interrupted run requires inspection and an explicitly
1896
+ new run ID, not automatic retry. `stagingDirectoryName` is only a safe relative
1897
+ local-inspection hint; permanent hash-bound objects carry audit authority.
1898
+ `observation=cli-observed-native-process` is not mathematical correctness or an
1899
+ authenticated execution certificate. The dependency lock is explicitly
1900
+ `declared-lock-not-attested`; no hermetic-environment claim is inferred.
1901
+
1902
+ One unchanged result blob is stored once and appears once in the reviewer directory. The
1487
1903
  existing independent review receives the original request, original/current
1488
1904
  requirements, exact checks and results, and returns a bound `taskAssessment`;
1489
1905
  there is no additional default paid review round. Missing current checks stop
1490
1906
  before review, and stale/failed/inconclusive checks cannot be promoted to answered.
1491
1907
  Publication packets and portable audit verification retain these relationships;
1492
1908
  hash integrity does not prove execution, scientific validity, or editorial acceptance.
1909
+ Native and scientific packets stage observed programs, locks, inputs and outputs
1910
+ for exact on-demand inspection. Portable audit checks native start/completion
1911
+ events, requirement versions and all run objects. It also replays read selectors
1912
+ against the exact stored object, directory and packet/delivery records; a rehashed
1913
+ outer inventory cannot hide missing program bytes or a changed read receipt.
1493
1914
 
1494
1915
  `project task status` and each `research run` project summary report original and
1495
1916
  current task completion separately from workflow completion and publication verdict.
@@ -1497,6 +1918,107 @@ A completed workflow or approved reduced scope must not be described as satisfyi
1497
1918
  unanswered original requirements. Use the selected runtime's help/schema discovery
1498
1919
  once before adopting these commands; they are not an implicit runtime upgrade.
1499
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
+
1500
2022
  ## Research Search
1501
2023
 
1502
2024
  Forward research-oriented search requests to SCI, report, patent, and ESG edge