fix(agent): bound Antigravity ingestion flow

This commit is contained in:
vasily committed 2026-10-15 12:08:49 +08:00
1 parent 65bc8a9422
commit 5a6cd7af4f
6 files changed
+29 -17

No files matched your search

+1 -1
View File
@@ -25,7 +25,7 @@ Choose a focused skill; load only its applicable protocol and pipeline files:
For a connected workflow, use MCP discovery and `diagnostics` to confirm the available tools, their advertised input schemas, role, capabilities and scope. Those discovered schemas are authoritative for this session. Routine ingestion does not require reading `manifest.json`, `service-v1.json`, record schemas, README sections or helper-script source to rediscover tools. If a required tool is absent or an advertised schema produces a concrete mismatch, stop before mutation; inspect only the relevant pinned contract entry to diagnose that mismatch, then report it if unresolved. Use the host's native file listing and viewing tools for workspace inventory and pack instructions; do not invoke shell commands just to list files. This pack is bound to the local GEWU v1 contract, but native host workflows are NOT RUN. Do not invent commands or assume another host's custom tools exist. If required tools are unavailable, identify the blocked stage; prepare local drafts only when requested and label them unaccepted.
For Antigravity, call MCP tools using the schemas attached to discovered tools. Do not read generated per-tool JSON files from the CLI's local MCP cache; they duplicate those schemas. Open one only after a concrete argument validation error. Do not inspect installer state or helper-script implementation during routine ingestion.
For Antigravity, call MCP tools using the schemas attached to discovered tools and the host-specific argument reminders in [CONTRIBUTIONS.md](protocols/CONTRIBUTIONS.md). Follow this order once per run: `diagnostics`, `get_project_context`, then `run_create`; do not repeat a successful stage or inspect local run files. A staged source candidate is not readable through `get_source`; use its exact candidate in the proposal's `register_source` operation and cite its owned extraction with `source_extraction_block`. Do not use `run_command` or other shell tools for routine ingestion, pack-pin inspection, or schema lookup. Do not read generated per-tool JSON files from `~/.gemini/antigravity-cli/mcp`; after a concrete argument error, inspect only the relevant pinned entry in the pack's `contracts/service-v1.json`, then correct the call once. GEWU's proposal parser tolerates exactly one omitted final outer `}` when the repaired text is valid and contract-conforming; evaluation or submit responses report this as `input_repaired=true`. Other malformed payloads stay invalid. GEWU's Jev assessment runs inside `ingest_review_create`; do not call a separate Jev MCP server. Do not inspect installer state or helper-script implementation during routine ingestion.
Knowledge changes go through typed MCP proposals. Local artifacts under `Drafts/` and `Runs/` support work but are not accepted knowledge. Only a service acceptance receipt establishes acceptance. Keep credentials and source bodies out of status summaries; do not claim a cloud-backed host keeps all content local.
+1 -1
View File
@@ -1,6 +1,6 @@
# GEWU local research-agent pack
Version 0.20.6. Adds proposal grouping by semantic learning, guards against placeholder proposal probes, provides server-side canonical digest preparation, and stores compact run pins in the installation receipt. Includes explicit shared-scope requirements, agent-side duplicate checks, bounded citation reads and per-source budget checkpoints. Client-pilot findings now feed the checkpoint and citation protocols.
Version 0.20.11. Clarifies Antigravity's MCP argument envelope and required project/budget fields, enforces the one-pass diagnostics/context/run sequence, and distinguishes staged sources from registered sources. It keeps prepared proposal JSON byte-for-byte intact, records safe recovery from one missing outer brace in a copied proposal, distinguishes malformed proposals from valid policy holds, makes clear that run state is created through GEWU MCP rather than local run files, avoids headless shell/cache lookups and run-ID reuse across pack changes, groups proposals by semantic learning, guards against placeholder probes, uses server-side canonical digest preparation, stores compact run pins, requires explicit shared scope, checks duplicates, bounds citation reads and checkpoints per-source budgets.
This pack contains the [agent profile](AGENTS.md), Claude harness pointer ([CLAUDE.md](CLAUDE.md)), shared protocols, four skills and separate pipeline procedures. An existing local host supplies the model and tools. There is no standalone agent engine here.
+2 -2
View File
@@ -1212,7 +1212,7 @@
"name": "source_extraction_block"
},
{
"description": "Validate and submit one bounded typed proposal revision.",
"description": "Validate and submit one bounded proposal; report any safe input repair.",
"input_schema": {
"properties": {
"proposal_json": {
@@ -1246,7 +1246,7 @@
"name": "proposal_prepare"
},
{
"description": "Evaluate one bounded proposal without storing or publishing it.",
"description": "Evaluate one bounded proposal without storing or publishing it.\n\nA single missing final outer brace is repaired only if the result\nis valid JSON and matches the full contract. The response exposes\ninput_repaired=true. Other malformed JSON returns status=invalid.\nA valid proposal may instead return needs-review when an applicable\npolicy requires an owner decision.\n",
"input_schema": {
"properties": {
"proposal_json": {
+10 -10
View File
@@ -1,6 +1,6 @@
{
"pack_id": "gewu-research",
"pack_version": "0.20.6",
"pack_version": "0.20.11",
"manifest_version": "1.0.0",
"status": "local-contract-and-checkpoint-bound-hosts-not-qualified",
"execution": "existing-local-agent-host",
@@ -10,7 +10,7 @@
"contract_id": "gewu.service.v1",
"contract_version": 1,
"path": "contracts/service-v1.json",
"sha256": "bd60a522baffb3ec2824676d550f17591c5d2faf9d028db4eb23252785cacd4d",
"sha256": "b991c6d91bef378b2897b6582856bb9df79cdf48b68d3aa747a7d88cd41a4d68",
"scope": "Generated local MCP tool input schemas and v1 record schemas; native host workflows remain NOT RUN."
}
],
@@ -94,7 +94,7 @@
"compatible_checkpoint_contracts": [
"gewu.local-checkpoint@0.1.0"
],
"sha256": "ce5c36aa8d985ff7e889d1c58278d03ee0f3f199f3d8f8158b6cec79b49559a3",
"sha256": "348eec9da0fd0c76e9f71b6c77b23f01080c147f85fb35b2cc9e84022383e724",
"hash_encoding": "utf8-no-bom-lf"
},
{
@@ -137,7 +137,7 @@
"module_id": "contributions",
"kind": "protocol",
"entry": "protocols/CONTRIBUTIONS.md",
"implementation_version": "0.7.0",
"implementation_version": "0.11.0",
"provided_contract": {
"id": "gewu.protocol.contributions",
"version": "0.4.0"
@@ -159,14 +159,14 @@
"compatible_checkpoint_contracts": [
"gewu.local-checkpoint@0.1.0"
],
"sha256": "e9fe2f910dc3a84bd34e03b7ef974852ed8f697d5f23d667654745ebef76ff89",
"sha256": "27b158f2d7f66aeaeaa8abcf3c713d16edbbf99a3a345823244ba1b0fc2a9fae",
"hash_encoding": "utf8-no-bom-lf"
},
{
"module_id": "kb-ingest",
"kind": "skill",
"entry": "skills/kb-ingest/SKILL.md",
"implementation_version": "0.11.0",
"implementation_version": "0.15.0",
"provided_contract": {
"id": "gewu.skill.kb-ingest",
"version": "0.6.0"
@@ -190,7 +190,7 @@
"compatible_checkpoint_contracts": [
"gewu.local-checkpoint@0.1.0"
],
"sha256": "d09c3bdae82c7d17e4fa9b61e759284cf0cb533f03d29b1829893ad570568002",
"sha256": "0890d7156562d0d3f8b7ce64765a4e32f17013714256000a7d563348e039dec7",
"hash_encoding": "utf8-no-bom-lf"
},
{
@@ -397,7 +397,7 @@
"compatible_checkpoint_contracts": [
"gewu.local-checkpoint@0.1.0"
],
"sha256": "ae6322408732b4883e84adb06b87126598f035d1fcaef66c7b48a8dd0e2a743d",
"sha256": "c892ec1cc26670b2ecc6644ca3bed665569e9474e7b45f8d72a69abc3d9c73ce",
"hash_encoding": "utf8-no-bom-lf"
},
{
@@ -435,7 +435,7 @@
"compatible_checkpoint_contracts": [
"gewu.local-checkpoint@0.1.0"
],
"sha256": "bd60a522baffb3ec2824676d550f17591c5d2faf9d028db4eb23252785cacd4d",
"sha256": "b991c6d91bef378b2897b6582856bb9df79cdf48b68d3aa747a7d88cd41a4d68",
"hash_encoding": "utf8-no-bom-lf"
},
{
@@ -516,6 +516,6 @@
"snapshot": {
"algorithm": "sha256",
"scope": "modules array serialized as UTF-8 JSON with sorted keys and compact separators",
"digest": "5e22d9688aa0d977eda0cb2fde8d5dc9687baf30c731940f36b4e30fc0fab7ab"
"digest": "e9b1ea3991237382224500a01371f52bc137d4eb32d750a34d9176c456edca5a"
}
}
+13 -1
View File
@@ -2,6 +2,16 @@
Before a connected workflow, call `diagnostics` and use MCP discovery to confirm the required tools and their advertised input schemas. The schemas discovered from the active server are authoritative for this session. Do not open `manifest.json`, `contracts/service-v1.json`, record schemas, the README or helper-script source just to verify tool availability, arguments or checkpoint behavior. If a required tool is absent or a discovered schema causes a concrete mismatch, stop before mutation and inspect only the relevant pinned contract entry; report the drift if that does not resolve it. Diagnostics reports the authenticated role, authorized projects/capabilities, explicit selected scope, source-transfer limits, service/catalog versions and canonical/index revisions without returning credentials or principal IDs. `connection_status=authenticated` proves only this call; `workflow_status=not_verified` means native workflow acceptance remains separate. `proposal_evaluate` is the deterministic preflight for one complete, real proposal. Never probe it with a placeholder payload, zero digest or guessed identity; never call `proposal_status` with a fabricated proposal ID. The service's `proposal_submit` response remains authoritative. Owner decisions use a separate owner transport and are not available to agents. Runs are agent-owned, explicitly scoped service records; they do not schedule work or grant capability.
## Antigravity call argument reminders
Antigravity may expose MCP through a generic `call_mcp_tool` wrapper. Use the discovered server/tool names and its advertised schema; do not infer nested `scope` objects when the operation accepts flat scope fields. The wrapper's outer arguments are `ServerName`, `ToolName` and `Arguments`; `Arguments` contains only the target MCP tool's input object. For example, `get_source` is called as `{ServerName:"gewu-dome-pilot", ToolName:"get_source", Arguments:{project_id:"dome-performance", revision_id:"<exact revision id>"}}`. Do not nest the wrapper object inside `Arguments`. For common GEWU calls, the required arguments are: `gewu-dome-files/list_selected_files` `{}`; `upload_selected_file` `{file_id, project_id}`; `get_project_context` `{project_id}`; `get_source` `{project_id, revision_id}`; `source_extraction_block` `{project_id, extraction_id, block_id, offset, length}`; `list_sources` `{projects, include_shared, all_projects:false, limit, budget_tokens}`; `search` `{query, projects, include_shared, all_projects:false, limit, budget_tokens}`; `run_create` and `run_checkpoint` `{request_json}`; `proposal_prepare`, `proposal_evaluate`, and `proposal_submit` `{proposal_json}`; `ingest_review_create` `{review_json}`. The request/proposal/review values are serialized JSON strings that must follow their pinned record schemas. Never omit `project_id` from a selected-file upload or source read, or put `scope` inside search/list-source arguments. `get_source` reads registered sources only. A newly captured/uploaded source is staged; do not call `get_source` for it. Register its exact returned `source_candidate` in the same proposal that cites it, and read its evidence through the returned staged `extraction_id`.
For Antigravity, call `diagnostics`, `get_project_context` and `run_create` once each in that order. After a successful call, keep its returned IDs/context and move to the next stage. If a generic-wrapper call gets an argument validation error, inspect only the pinned entry for that tool, correct the outer wrapper once, and stop if the corrected call fails.
Use the agent's stable principal ID from operator-provided configuration; do not try the standalone Jev MCP server. Jev relevance and facet decisions run on the GEWU backend through `ingest_review_create`.
`run_create` is idempotent only for the same run ID and identical create payload. Create service run state through `run_create` with one `request_json` argument; the service is the source of truth, and no local `Runs/<run_id>` JSON file is required before creation. Do not search for or open a guessed local run file. On an uncertain response, reuse that exact request or check the real run ID with `run_status`. Never reuse a run ID with changed objective or pack pins. If the pack was reinstalled or upgraded after a run was created, leave that old run alone and start a new run with a unique ID and the current `.agents/gewu-install.json` `run_pins`. Read that receipt with the host's file-view tool; do not use shell to count or transform pins. In headless Antigravity, unapproved shell calls are denied and can consume model turns without advancing ingestion.
## Build attributable proposals
Use the stable principal ID assigned to the configured agent credential. The credential must have the `agent` role and grants for every affected project. Set `ProposalRevision.proposer_id`, each proposed node's `agent_id`, and each claim assessment's `assessor_id` to that principal ID. Do not substitute a model name, harness name or human display name. Diagnostics intentionally omits principal IDs; obtain the expected ID from the credential's operator-provided configuration, never guess it. If the identity is unknown or the service rejects attribution, stop and report the mismatch rather than changing IDs speculatively.
@@ -16,7 +26,9 @@ Before creating a new node, search the explicit project and shared scope with mu
Finalize claim text, evidence and locators, then call the read-only `proposal_prepare` MCP tool with the complete draft proposal. It fills each claim's exact typed `assertion_path`, assertion digest, evidence digests and final payload digest, and returns prepared `proposal_json`. Use that JSON unchanged for `proposal_evaluate`; after any edit, call `proposal_prepare` again. It does not evaluate, store or submit the proposal. Do not run shell commands or manually hash proposal content. If `proposal_prepare` is unavailable, stop before evaluation and report that deterministic digest preparation is missing.
`proposal_prepare` applies the canonical GEWU digest rules: UTF-8 canonical JSON, Unicode preserved, sorted keys, no insignificant whitespace and no NaN values. It binds assertions to normalized exact claim text, hashes complete evidence objects and hashes the final typed operations. Its server result is authoritative for dependent digest fields.
`proposal_prepare` applies the canonical GEWU digest rules: UTF-8 canonical JSON, Unicode preserved, sorted keys, no insignificant whitespace and no NaN values. It binds assertions to normalized exact claim text, hashes complete evidence objects and hashes the final typed operations. Its server result is authoritative for dependent digest fields. If Antigravity drops exactly the final outer `}` when copying the returned string, evaluation and submission can repair that one unambiguous truncation only when the repaired payload passes the full contract; the response then reports `input_repaired: true`. Any other malformed payload remains invalid.
Pass the returned `proposal_json` byte-for-byte to `proposal_evaluate`; do not retype, summarize, rebuild, or edit that serialized string. Keep proposals compact by grouping only one learning unit and including only the claims and evidence needed to support it. If evaluation returns `PROPOSAL_JSON_INVALID`, stop before submission and rebuild/re-prepare the draft once; never submit the malformed or previous payload. A valid evaluation with status `needs-review` (for example, finding `AUTO_ACCEPT_UNSPECIFIED`) is a policy hold requiring an owner decision, not a transport error or an instruction to bypass policy. Do not submit it as though it were eligible for automatic acceptance.
The proposal envelope must include `schema_version`, `proposal_id`, `revision`, `initiating_project_id`, `scope`, `base_commit`, `payload_digest`, `proposer_id`, `run_id` and `operations`. `proposal_prepare` fills dependent digests; it does not invent the run, scope, principal, base revision or proposal metadata. Do not add unsupported envelope fields such as `created_at` or `reason`. For a PDF citation, use `locator.kind="pdf_page_span"` and the page from the extraction block; `text_span` is for non-PDF text and cannot include a page. Do not call `proposal_evaluate` unless `proposal_prepare` returns `status="prepared"`; evaluate only its returned `proposal_json` unchanged. If preparation returns `status="invalid"`, correct the named issue and retry once. Never probe preparation with `{}` or another incomplete draft.
+2 -2
View File
@@ -6,11 +6,11 @@ description: Process explicitly selected sources for a GEWU project into evidenc
Read the pack's [evidence](../../protocols/EVIDENCE.md), [scope](../../protocols/SCOPE.md) and [contribution](../../protocols/CONTRIBUTIONS.md) protocols, then use the [ingestion pipeline](../../pipelines/ingest.md).
Inputs are the selected source(s), explicit project and the user's research objective. Use `get_project_context` for the project's north star, key questions, watch list, taxonomy extensions, research lenses and saved ingest guidance. Every project defaults to four research lenses: technical, conceptual, cultural-historical and financial-market. Treat these as coverage prompts, not quotas. Confirm required tools and arguments from MCP discovery and `diagnostics`; use the schema attached to each discovered tool. For Antigravity, do not open generated MCP cache JSON files or read future tool schemas in advance. Create the service run after diagnostics and project context; use `run_pins` from `.agents/gewu-install.json` as defined in CONTRIBUTIONS.md. If a required tool is absent or a call produces a concrete schema mismatch, inspect only that tool's pinned contract entry and report unresolved drift before mutation. Use the connector for local byte transfer; it returns a typed source metadata candidate without exposing the selected path or bytes. Selected `.vtt` and `.srt` files produce timestamped transcript cues; cite exact cue start/end times and the quote span. A declared NotebookLM export label is metadata only and is not export verification. For text explicitly pasted by the user, use `source_capture_text` with a stable capture ID and source key; it accepts UTF-8 plain text or Markdown up to 1 MB, archives and extracts it, and returns a typed candidate marked `capture_method=pasted-text`. Retry uncertain calls with the same capture ID and identical inputs; changed input under that ID conflicts. It does not register the candidate. `source_capture_url` fetches only operator-allowlisted public hosts and stages supported text, Markdown, HTML or PDF bytes; it also returns a source metadata candidate but does not register it. Add each new source's exact candidate as `register_source` in the proposal that cites it, or verify the source was already registered and readable. Use the candidate's `revision_id` and capture's `extraction_id`; never invent or substitute these IDs. Submit candidates with the normal typed proposal flow, and use `capture-failed` candidates only as bookmarks, never as factual evidence. URL source IDs follow the sanitized URL; local source IDs follow the connector's configured file ID; pasted-text source IDs are derived from the supplied stable key and revision IDs include the content digest. PDF extraction currently requires Linux bubblewrap, Poppler and prlimit. Unsupported formats and unavailable parsers must be reported without inventing an extraction. If the service is unavailable, report the blocked stage and only prepare an unaccepted local draft when that work was requested.
Inputs are the selected source(s), explicit project and the user's research objective. Use `get_project_context` for the project's north star, key questions, watch list, taxonomy extensions, research lenses and saved ingest guidance. Every project defaults to four research lenses: technical, conceptual, cultural-historical and financial-market. Treat these as coverage prompts, not quotas. Confirm required tools and arguments from MCP discovery and `diagnostics`; use the schema attached to each discovered tool and the Antigravity argument reminders in CONTRIBUTIONS.md. For Antigravity, do not use shell tools or inspect the host MCP cache. On a schema mismatch, use only the relevant pinned entry in `contracts/service-v1.json` and correct once. Use GEWU tools only; Jev runs inside the backend through `ingest_review_create`, not a standalone Jev MCP server. In Antigravity, call `diagnostics`, `get_project_context` and `run_create` once each in order; after a successful call, reuse its returned state rather than repeating it. Do not call `get_source` for a staged candidate: use its exact returned candidate in the proposal's `register_source` operation and read the source's citation through its staged extraction. Create the durable service run with `run_create` after diagnostics and project context; pass its `request_json` envelope using current `run_pins` from `.agents/gewu-install.json`. Do not look for a local `Runs/<run_id>` file before creation; run state is service-owned. Never reuse a run ID after changing the pack or create payload. Use the connector for local byte transfer; `upload_selected_file` requires both the configured `file_id` and the authorized `project_id`. It returns a typed source metadata candidate without exposing the selected path or bytes. Selected `.vtt` and `.srt` files produce timestamped transcript cues; cite exact cue start/end times and the quote span. A declared NotebookLM export label is metadata only and is not export verification. For text explicitly pasted by the user, use `source_capture_text` with a stable capture ID and source key; it accepts UTF-8 plain text or Markdown up to 1 MB, archives and extracts it, and returns a typed candidate marked `capture_method=pasted-text`. Retry uncertain calls with the same capture ID and identical inputs; changed input under that ID conflicts. It does not register the candidate. `source_capture_url` fetches only operator-allowlisted public hosts and stages supported text, Markdown, HTML or PDF bytes; it also returns a source metadata candidate but does not register it. Add each new source's exact candidate as `register_source` in the proposal that cites it, or verify the source was already registered and readable. Use the candidate's `revision_id` and capture's `extraction_id`; never invent or substitute these IDs. Submit candidates with the normal typed proposal flow, and use `capture-failed` candidates only as bookmarks, never as factual evidence. URL source IDs follow the sanitized URL; local source IDs follow the connector's configured file ID; pasted-text source IDs are derived from the supplied stable key and revision IDs include the content digest. PDF extraction currently requires Linux bubblewrap, Poppler and prlimit. Unsupported formats and unavailable parsers must be reported without inventing an extraction. If the service is unavailable, report the blocked stage and only prepare an unaccepted local draft when that work was requested.
Extract useful atomic assertions, problems, techniques or cases with their conditions across all four lenses where the source contains relevant material. Consider cultural history, philosophical context and market/financial evidence as project data when they explain the project's origins, concepts, adoption, audience, costs or viability; they are not automatically peripheral. First try to connect uncertain material to the north star, a key question, a saved rule or one of the lenses. Exclude only clearly unrelated material, unavailable evidence, or material the user explicitly excluded. Do not defer a section merely because its relevance is indirect, non-technical or historical. Continue normal evidence-backed proposal evaluation/submission for all plausible useful findings. When human relevance/categorization feedback or explicit Jev label normalization is needed, call `ingest_review_create` with a single `review_json` string, the complete `IngestReviewCreate` fields, and the exact extraction excerpt/locator. The required rationale field is `relevance_rationale`, not `reason`; include `review_id` and `extraction_id`. This persists a non-blocking notification and never blocks the evidence-backed proposal flow.
Before building each proposal, use the principal ID assigned to the configured agent credential for `proposer_id`, node `agent_id` and assessment `assessor_id`; do not use the model or harness name. If the operator has not provided that principal ID, stop before preparing or evaluating a proposal; diagnostics intentionally omits it. The proposal envelope requires `schema_version`, `proposal_id`, `revision`, `initiating_project_id`, `scope`, `base_commit`, `payload_digest`, `proposer_id`, `run_id` and `operations`. Use the current canonical revision from diagnostics as `base_commit`; do not add unsupported envelope fields. Finalize claim text, evidence and locators, then call `proposal_prepare` with the complete draft. It fills dependent digests but does not invent metadata or correct an invalid citation locator. For PDF evidence use `locator.kind="pdf_page_span"` with the extraction block's page; `text_span` cannot include a page. Proceed only when the tool returns `status="prepared"`, and pass its returned `proposal_json` unchanged to evaluation. If it returns `status="invalid"`, correct only the named issue and retry once. Do not probe it with an empty or incomplete proposal. If the tool is unavailable or rejects a corrected proposal, stop and report the concrete error.
Before building each proposal, use the principal ID assigned to the configured agent credential for `proposer_id`, node `agent_id` and assessment `assessor_id`; do not use the model or harness name. If the operator has not provided that principal ID, stop before preparing or evaluating a proposal; diagnostics intentionally omits it. The proposal envelope requires `schema_version`, `proposal_id`, `revision`, `initiating_project_id`, `scope`, `base_commit`, `payload_digest`, `proposer_id`, `run_id` and `operations`. Use the current canonical revision from diagnostics as `base_commit`; do not add unsupported envelope fields. Finalize claim text, evidence and locators, then call `proposal_prepare` with the complete draft. It fills dependent digests but does not invent metadata or correct an invalid citation locator. For PDF evidence use `locator.kind="pdf_page_span"` with the extraction block's page; `text_span` cannot include a page. Proceed only when the tool returns `status="prepared"`, and pass its returned `proposal_json` unchanged to evaluation. Do not retype, reconstruct or edit that serialized string between tools; keep proposal content limited to the claims and evidence needed for one learning unit. The service can repair exactly one missing final outer `}` if the result passes the full contract; when this occurs the evaluation or submission response includes `input_repaired: true`. Other malformed JSON stays invalid. If evaluation returns `PROPOSAL_JSON_INVALID`, do not submit; rebuild and prepare the draft once, then stop if it remains invalid. A valid `needs-review` result (including `AUTO_ACCEPT_UNSPECIFIED`) is a policy hold for an owner decision, not a transport failure or automatic-acceptance candidate; do not submit it as eligible. If a tool is unavailable or rejects a corrected proposal, stop and report the concrete error.
Use the input schema advertised for each MCP tool. If a call rejects its arguments, inspect only that tool's advertised/pinned schema, correct the arguments and retry once; do not probe unrelated tools or read the entire schema directory. Do not test proposal tools with invented IDs, placeholder identities, zero digests or incomplete payloads. Evaluate only the complete proposal for this learning unit; use `proposal_status` only for its real proposal ID and revision.