{ "schema": "pi.dropin.parity_gap_ledger.v1", "bead_id": "bd-13pqz", "generated_at_utc": "2026-02-14T19:16:00Z", "status": "active", "baseline_reference": "docs/dropin-upstream-baseline.json", "inventory_references": [ "docs/evidence/dropin-feature-inventory-matrix.json", "docs/dropin-112-feature-inventory-matrix.md" ], "severity_scale": { "critical": "Breaks strict drop-in behavior for existing integrators.", "high": "Likely observable divergence in common workflows.", "medium": "Narrower divergence, but still part of parity closure scope.", "low": "Non-blocking mismatch or governance/documentation alignment.", "waived": "Non-blocking divergence accepted by policy with explicit claim guard." }, "entries": [ { "gap_id": "gap-sdk-contract-shape", "priority_rank": 1, "area": "sdk", "mismatch_kind": "retired", "severity": "retired", "status": "retired", "retirement_date": "2026-04-22T17:50:00Z", "retirement_reason": "Strict SDK drop-in parity claim officially retired per bd-lnmtp.3.1 decision. Rust SDK provides functional equivalence through idiomatic API patterns.", "retirement_decision_bead": "bd-lnmtp.3.1", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:mode.sdk.embedding", "docs/evidence/dropin-feature-inventory-matrix.json#unknown:unknown-01-sdk-dropin-contract" ], "final_state": "Rust SDK provides equivalent functionality to TypeScript SDK using idiomatic Rust patterns. Contract shape parity no longer required.", "alternative_solution": "Use pi::sdk module for idiomatic Rust embedding with functional equivalence to TypeScript SDK capabilities.", "owner_issue_primary": "bd-1it6z", "owner_issue_supporting": [ "bd-c9usa", "bd-2ibww", "bd-3fbzn" ] }, { "gap_id": "gap-cli-extension-flag-pass-through", "priority_rank": 2, "area": "cli", "mismatch_kind": "closed", "severity": "resolved", "status": "closed", "closure_date": "2026-04-23T04:50:00Z", "closure_reason": "Extension flag pass-through fully implemented and tested. Comprehensive test coverage in tests/extension_flag_passthrough.rs with 11KB of integration tests covering CLI flag parsing, boolean flags, mixed flag sets, and edge cases.", "closure_bead": "bd-lnmtp.1", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:cli.extensions.dynamic_flags", "docs/evidence/dropin-feature-inventory-matrix.json#unknown:unknown-02-extension-cli-flag-pass-through" ], "final_state": "Two-pass CLI parsing implemented with extension-registered flag support. Extension flags properly extracted and passed through to extensions with correct precedence and semantics.", "verification_evidence": [ "tests/extension_flag_passthrough.rs - comprehensive integration tests", "tests/cli_edge_cases.rs - 40+ edge case test functions", "G04 certification gate marked as pass in docs/evidence/dropin-certification-verdict.json" ], "owner_issue_primary": "bd-2cd9b", "owner_issue_supporting": [ "bd-3meug" ] }, { "gap_id": "gap-json-auto-lifecycle-events", "priority_rank": 3, "area": "json-mode", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-28T04:30:15Z", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:json.events.auto_lifecycle", "docs/dropin-112-feature-inventory-matrix.md#summary:agent-events-auto-compaction-auto-retry" ], "final_state": "Auto-compaction and auto-retry lifecycle events serialize through AgentEvent in JSON/RPC paths, preserving camelCase fields and omitting absent optional payloads. Focused parity tests cover schema, ordering, retry success omission, and compaction missing-key failure omission.", "owner_issue_primary": "bd-3b9mx", "owner_issue_supporting": [ "bd-2my4b", "bd-2ilgm", "bd-38v5y" ], "closure_path": [ "Emit auto_compaction_* and auto_retry_* JSON events via AgentEvent serialization.", "Verify optional fields are absent instead of null when no result/finalError exists.", "Backstop RPC auto-compaction and auto-retry runtime paths with focused regression tests." ], "verification_evidence": [ "tests/json_mode_parity.rs: json_parity_auto_* schema and lifecycle matrix tests", "src/rpc.rs: rpc_auto_retry_retries_then_succeeds asserts successful auto_retry_end omits finalError", "src/rpc.rs: auto_compaction_missing_api_key_omits_absent_result_field asserts start/end ordering and failed auto_compaction_end omits result" ], "blocked_by": [] }, { "gap_id": "gap-json-rpc-command-semantic-coverage", "priority_rank": 4, "area": "json-mode", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-22T18:47:00Z", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:11-rpc-protocol-commands" ], "final_state": "RPC surface parity is classified command-by-command and event-by-event: 29 baseline commands, 29 Rust commands, 17 baseline events, 17 Rust events, 46 MATCH classifications, and zero IMPLEMENT divergences.", "alternative_solution": "N/A - no missing RPC command implementation remained after bd-lnmtp.2.1 surface classification.", "owner_issue_primary": "bd-lnmtp.2.2", "owner_issue_supporting": [ "bd-lnmtp.2.1", "bd-lnmtp.2.3", "bd-lnmtp.2.4" ], "closure_path": [ "Use docs/dropin-rpc-surface-diff.json as the command/event surface classification artifact.", "Confirm no IMPLEMENT divergences remain for RPC command semantics.", "Backstop extension UI request/response parity with deterministic fixture coverage while bd-lnmtp.2.3 owns aggregate stream-differential automation." ], "verification_evidence": [ "docs/dropin-rpc-surface-diff.json summary: baseline_command_count=29, rust_command_count=29, baseline_event_count=17, rust_event_count=17, match_count=46, implement_count=0", "tests/fixtures/rpc_extension_ui_scenarios.json: extension UI request/response fixture coverage", "tests/rpc_extension_ui_scenarios.rs: validates fixture schema, scenarios, ordering, timeout, abort, legacy id alias, and payload round-trip coverage" ], "blocked_by": [] }, { "gap_id": "gap-json-tool-and-extension-ui-events", "priority_rank": 5, "area": "json-mode", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-28T04:30:15Z", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:11-rpc-events-responses", "docs/dropin-112-feature-inventory-matrix.md#section:15-extension-api-surface-ui" ], "final_state": "Tool execution event names and extension_ui_request/response round-trips are validated by deterministic test evidence. The parity closure bead bd-359pl is closed with targeted RPC and json_mode_parity coverage.", "owner_issue_primary": "bd-359pl", "owner_issue_supporting": [ "bd-2my4b", "bd-38v5y" ], "closure_path": [ "Match JSON-mode tool and extension UI event behavior in bd-359pl.", "Align envelope/schema expectations with bd-2my4b.", "Verify command-path dispatch coverage alongside bd-38v5y." ], "verification_evidence": [ "tests/e2e_rpc.rs: extension_ui_request/response round-trips, id/requestId handling, and negative-path coverage", "tests/json_mode_parity.rs: tool_execution_start/update/end schema + event type assertions", "legacy_pi_mono_code/pi-mono/packages/agent/src/types.ts: upstream tool_execution_* event contract" ], "blocked_by": [] }, { "gap_id": "gap-cli-slash-command-surface", "priority_rank": 6, "area": "cli", "mismatch_kind": "resolved_differential_runner", "severity": "resolved", "status": "resolved", "reopened_date": "2026-05-18T10:07:45Z", "resolution_date": "2026-05-18T19:37:26Z", "closure_bead": "bd-7derw", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:5-slash-commands" ], "final_state": "tests/dropin_slash_differential.rs now requires real mirrored Rust Pi/pi-mono RPC success for every credential-free RPC-observable slash scenario. UI-only, process-exit, invalid parser, and model-dependent compaction scenarios are explicit policy exclusions from pass evidence and continue to fail closed if counted.", "release_claim_impact": "No longer blocks strict drop-in replacement claims. G04 and G10 may rely on the real mirrored slash-command differential evidence for the credential-free pass-evidence set.", "closure_path": [ "Provisioned the pinned legacy pi-mono runtime on the RCH worker used for the proof so legacy_pi_mono_code/pi-mono/node_modules/tsx/dist/cli.mjs is runnable.", "Required pass evidence to come only from slash inputs that map to credential-free shared RPC commands.", "Kept UI-only, process-exit, invalid parser, and model-dependent compaction scenarios fail-closed and out of pass evidence with explicit observability policy.", "Regenerated docs/evidence/dropin-differential-evidence-suite.json and docs/evidence/dropin-certification-verdict.json after the runner produced non-synthetic pass evidence." ], "verification_evidence": [ "rch exec -- cargo test --test dropin_slash_differential -- --nocapture passed 12/12 on ts2 at 2026-05-18T19:37:26Z", "tests/dropin_slash_differential.rs: test_slash_command_differential_harness_fails_closed_without_mirrored_success requires real mirrored pass evidence", "tests/dropin_slash_differential/mod.rs: scenario_requires_pass_evidence and slash_command_observability define the pass-evidence policy", "tests/dropin_slash_differential/mod.rs: Rust Pi and pi-mono are driven through mirrored JSONL RPC sequences", "docs/evidence/dropin-differential-evidence-suite.json: slash_command_differential status pass" ], "blocked_by": [], "owner_issue_primary": "bd-7derw", "owner_issue_supporting": [ "bd-jgnx0", "bd-3meug", "bd-35t7i" ] }, { "gap_id": "gap-extension-hook-lifecycle-coverage", "priority_rank": 7, "area": "extensions", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-05-01T22:12:48Z", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:10-extension-events-hook-points" ], "final_state": "Lifecycle hook parity is covered by tests/extensions_event_wiring.rs and the generated lifecycle_hook_parity_matrix.json evidence artifact. The proof covers startup, agent_start, input transforms, before_agent_start system-prompt mutation, user_bash first-result behavior, tool_call/tool_result ordering, agent_end, and cancellable session_before_switch/session_before_fork/session_before_compact/session_before_tree hooks.", "user_impact": "Lifecycle hook parity is now regression-covered for extension startup, user, agent, tool, and session-tree hook families.", "owner_issue_primary": "bd-wz2sg.4", "owner_issue_supporting": [ "bd-2xalc", "bd-3meug", "bd-359pl" ], "closure_bead": "bd-wz2sg.4", "closure_path": [ "Extend lifecycle hook coverage to user and pre-agent hook families.", "Cover session tree cancellation alongside switch/fork/compact cancellable paths.", "Regenerate the deterministic lifecycle hook parity matrix artifact." ], "verification_evidence": [ "tests/extensions_event_wiring.rs::lifecycle_hook_parity_matrix_writes_evidence_artifact", "tests/ext_conformance/reports/lifecycle_hooks/lifecycle_hook_parity_matrix.json", "src/extensions_js.rs::__pi_dispatch_event_inner" ], "blocked_by": [] }, { "gap_id": "gap-tool-io-limit-divergence", "priority_rank": 8, "area": "tools", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-22T19:10:00Z", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:4-built-in-tools" ], "final_state": "DEFAULT_MAX_BYTES aligned to 1,000,000 bytes in Rust tool/runtime defaults.", "alternative_solution": "N/A - full parity achieved for tool I/O limit configuration.", "owner_issue_primary": "bd-2xalc", "owner_issue_supporting": [ "bd-b4s4l", "bd-35t7i" ], "closure_path": [ "Decide canonical drop-in default and compatibility guardrails in bd-35t7i.", "Implement/tool-wire alignment under integration parity in bd-2xalc.", "Capture cross-size behavioral tests for truncation/error parity." ], "verification_evidence": [ "tests/dropin_tool_io_differential.rs exercises tool I/O threshold boundaries, process lifecycle timeout cleanup, and SSE framing", "tests/dropin_tool_io_differential/g09_tool_io_scenarios.json defines the executable G09 parity scenario matrix", "Documented default values in parity spec" ], "blocked_by": [ "bd-35t7i" ] }, { "gap_id": "gap-config-defaults-compaction-retry", "priority_rank": 9, "area": "config", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-22T18:35:00Z", "sources": [ "docs/dropin-112-feature-inventory-matrix.md#section:6-configuration-settings-compaction-retry" ], "final_state": "Compaction.reserveTokens and retry base/max delay defaults now match TS (16384/2000/60000) and docs are aligned.", "alternative_solution": "N/A - full parity achieved for compaction/retry configuration defaults.", "owner_issue_primary": "bd-uuf2z", "owner_issue_supporting": [ "bd-b4s4l" ], "closure_path": [ "Audit default provenance and precedence in bd-uuf2z.", "Align runtime behavior in session/compaction paths via bd-b4s4l.", "Pin expected defaults in spec docs and tests." ], "verification_evidence": [ "Config precedence tests proving TS-equivalent defaults", "Session behavior diffs for retry/compaction with unset config", "Updated settings parity table" ], "blocked_by": [] }, { "gap_id": "gap-config-ui-editor-knobs", "priority_rank": 10, "area": "config", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-05-10T07:15:00Z", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:config.ui_editor", "docs/dropin-config-surface-diff.json" ], "final_state": "UI/editor-related legacy knobs are parsed through camelCase aliases and recorded as pass in the config surface diff evidence.", "closure_bead": "bd-uuf2z", "closure_reason": "DROPIN-142 closed after config/env precedence parity validation; current config surface diff marks quietStartup, collapseChangelog, doubleEscapeAction, editorPaddingX, autocompleteMaxVisible, showHardwareCursor, sessionPickerInput, and lastChangelogVersion as pass.", "owner_issue_primary": "bd-uuf2z", "owner_issue_supporting": [ "bd-3meug" ], "closure_path": [ "Create per-knob parity checklist and implementation status in bd-uuf2z.", "Connect any CLI-triggered behaviors in bd-3meug.", "Add integration tests for representative UI/editor knob effects." ], "verification_evidence": [ "docs/dropin-config-surface-diff.json: legacy_settings_fields marks the UI/editor knobs as pass", "src/config.rs: camel_case_aliases_are_parsed covers quietStartup, collapseChangelog, doubleEscapeAction, editorPaddingX, autocompleteMaxVisible, sessionPickerInput, and related aliases", "bd-uuf2z close evidence: config_precedence suite 105/105 passing" ], "blocked_by": [] }, { "gap_id": "gap-config-markdown-indent", "priority_rank": 11, "area": "config", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-04-22T18:36:00Z", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:config.markdown" ], "final_state": "markdown.codeBlockIndent is implemented and wired for interactive + print rendering; inventory/docs updated.", "alternative_solution": "N/A - full parity achieved for markdown configuration options.", "owner_issue_primary": "bd-uuf2z", "owner_issue_supporting": [ "bd-3cqgd" ], "closure_path": [ "Confirm TS semantics for markdown.codeBlockIndent in parity notes.", "Implement or explicitly document non-support with certification sign-off.", "Add snapshot tests for markdown output formatting." ], "verification_evidence": [ "Config load/serialize tests for markdown.codeBlockIndent", "Markdown rendering snapshots with varied indentation settings", "Decision logged in drop-in spec artifacts" ], "blocked_by": [] }, { "gap_id": "gap-env-pi-ai-antigravity-version", "priority_rank": 12, "area": "config_and_env", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-05-10T07:15:00Z", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:env.contracts.pi_ai_antigravity_version", "src/providers/gemini.rs", "src/http/client.rs" ], "final_state": "PI_AI_ANTIGRAVITY_VERSION is classified as the google-antigravity user-agent version component for Google CLI/Antigravity routing.", "closure_bead": "bd-uuf2z", "closure_reason": "DROPIN-142 config/env parity closure covers representative env precedence, while current provider/http code consumes PI_AI_ANTIGRAVITY_VERSION in the Antigravity request path.", "owner_issue_primary": "bd-uuf2z", "owner_issue_supporting": [ "bd-3cqgd", "bd-hx9ks" ], "closure_path": [ "Classify whether variable is required, optional passthrough, or deprecated for strict parity.", "Implement equivalent handling or an explicit compatibility policy.", "Document final semantics and migration notes." ], "verification_evidence": [ "src/providers/gemini.rs reads PI_AI_ANTIGRAVITY_VERSION for google-antigravity request user_agent formatting", "src/http/client.rs antigravity_user_agent_format and antigravity_user_agent_in_request_headers cover request-header behavior", "bd-uuf2z close evidence: config_precedence suite 105/105 passing" ], "blocked_by": [] }, { "gap_id": "gap-provider-support-verification", "priority_rank": 13, "area": "providers", "mismatch_kind": "resolved", "severity": "resolved", "status": "resolved", "resolution_date": "2026-05-10T07:15:00Z", "sources": [ "docs/provider-native-parity-report.json", "docs/providers.md" ], "final_state": "Provider parity has current executable evidence: native/provider metadata verification is green, preset providers are covered by shared tests, and provider coverage docs reflect the current native module inventory.", "closure_bead": "bd-2xalc", "closure_reason": "DROPIN-145 and later provider coverage refreshes converted the stale provider unknowns into evidence-backed provider tables and executable verification reports.", "owner_issue_primary": "bd-2xalc", "owner_issue_supporting": [ "bd-uuf2z", "bd-8t27h.7" ], "closure_path": [ "Verify provider availability and auth/env wiring against pinned TS baseline.", "Classify each unknown as implemented, intentionally unsupported, or missing.", "Route missing support to implementation beads or explicit compatibility waivers." ], "verification_evidence": [ "docs/provider-native-parity-report.json: provider_native_verify 206/206 green and provider_metadata_comprehensive 112/112 green", "docs/provider-native-parity-report.json: 29 VCR-verified providers plus 55 preset providers covered by shared tests", "docs/providers.md: current native provider module table and traceability guard from bd-8t27h.7" ], "blocked_by": [] }, { "gap_id": "gap-rust-superset-governance", "priority_rank": 14, "area": "governance", "mismatch_kind": "waived_non_blocking_superset", "severity": "waived", "status": "waived", "waiver_date": "2026-05-10T07:15:00Z", "waiver_decision_bead": "bd-35t7i", "sources": [ "docs/evidence/dropin-feature-inventory-matrix.json#row:cli.flags.rust_only", "docs/evidence/dropin-feature-inventory-matrix.json#row:cli.subcommands.rust_only", "docs/evidence/dropin-feature-inventory-matrix.json#row:config.rust_additional_policy_knobs", "docs/dropin-112-feature-inventory-matrix.md#summary:features-in-rust-not-in-ts" ], "final_state": "Rust-only flags, subcommands, and policy knobs are accepted as non-blocking supersets when defaults remain compatible and strict release wording remains gated by the certification verdict.", "waiver_reason": "The hard certification contract explicitly blocks strict drop-in release language unless docs/evidence/dropin-certification-verdict.json reports overall_verdict = CERTIFIED; rust-only supersets are not a behavioral blocker when unused.", "release_claim_impact": "No strict replacement claim may rely on these supersets directly; strict wording remains governed by the certification verdict.", "owner_issue_primary": "bd-35t7i", "owner_issue_supporting": [ "bd-hx9ks", "bd-3cqgd" ], "closure_path": [ "Define policy for acceptable supersets under strict drop-in certification.", "Ensure supersets are non-breaking and gated behind explicit opt-in where needed.", "Align documentation language and certification criteria." ], "verification_evidence": [ "docs/contracts/dropin-certification-contract.json: strict replacement requires CERTIFIED verdict", "docs/evidence/dropin-certification-verdict.json: current overall_verdict = CERTIFIED and blocking_reasons is empty", "docs/integrator-migration-playbook.md and docs/testing-policy.md keep strict drop-in language gated by the certification verdict" ], "blocked_by": [] } ], "coverage_mapping": { "inventory_rows_requiring_ledger": [ { "row_id": "mode.sdk.embedding", "status": "partial_contract_shape_diff", "ledger_gap_id": "gap-sdk-contract-shape" }, { "row_id": "cli.extensions.dynamic_flags", "status": "partial_in_progress", "ledger_gap_id": "gap-cli-extension-flag-pass-through" }, { "row_id": "json.events.auto_lifecycle", "status": "resolved", "ledger_gap_id": "gap-json-auto-lifecycle-events" }, { "row_id": "config.ui_editor", "status": "resolved", "ledger_gap_id": "gap-config-ui-editor-knobs" }, { "row_id": "config.markdown", "status": "resolved", "ledger_gap_id": "gap-config-markdown-indent" }, { "row_id": "env.contracts.pi_ai_antigravity_version", "status": "resolved", "ledger_gap_id": "gap-env-pi-ai-antigravity-version" } ], "summary_divergence_items_requiring_ledger": [ { "summary_item": "Agent events auto_compaction/auto_retry parity", "ledger_gap_id": "gap-json-auto-lifecycle-events" }, { "summary_item": "Slash command parity unknowns", "ledger_gap_id": "gap-cli-slash-command-surface" }, { "summary_item": "RPC command parity unknowns", "ledger_gap_id": "gap-json-rpc-command-semantic-coverage" }, { "summary_item": "Extension hook-point parity coverage", "ledger_gap_id": "gap-extension-hook-lifecycle-coverage" }, { "summary_item": "Extension UI method parity unknowns", "ledger_gap_id": "gap-json-tool-and-extension-ui-events" }, { "summary_item": "Provider support unknowns", "ledger_gap_id": "gap-provider-support-verification" }, { "summary_item": "Tool byte-limit divergence", "ledger_gap_id": "gap-tool-io-limit-divergence" } ] }, "rollup": { "entry_count": 14, "severity_counts": { "high": 0, "medium": 0, "low": 0, "resolved": 12, "waived": 1, "retired": 1 }, "top_unblockers": [ "bd-35t7i", "bd-3meug", "bd-uuf2z", "bd-2xalc" ], "notes": [ "All currently identified mismatches from inventory sources are mapped to explicit owner issues, closure evidence, or a deliberate non-blocking waiver.", "Closed enabling beads (bd-2ilgm, bd-2km0n) are retained as supporting references where they affected gap state.", "Medium/low stale gaps were reconciled by bd-8t27h.8 on 2026-05-10; strict release claims remain gated by docs/evidence/dropin-certification-verdict.json.", "Any new mismatch discovery should append a new ledger entry and update coverage_mapping." ] } }