Repository navigation
Record the claude.ai synced plugins as an owner-synced exception; correct the sync row (#27) - #1138
Open
seathatflowsinourveins wants to merge 4 commits into
Open
seathatflowsinourveins wants to merge 4 commits into
seathatflowsinourveins wants to merge 4 commits into
Conversation
…rect the sync row (#27) The syncClaudeAiPlugins disposition row said the sync was "off on both hosts" (2026-10-04). The settings template never set the key and Claude Code honours only false, so the sync was on: four plugins from the knowledge-work-plugins marketplace (cowork-plugin-management, lseg, daloopa, bigdata-com) loaded in 30 sessions on 2026-10-09, with 0 skill activations and 0 MCP calls since Loki's first event, and no catalog pin. - The row becomes defer-user and cites the new decision. - docs/decisions/2026-10-15-claudeai-synced-plugins-exception.md records the four as an owner-synced exception to the pin policy (command center, 2026-10-15T03:07Z). Trigger: the first invoke hit on any of them requires a catalog pin or the flip to false. The template and host settings stay unchanged; the flip, if the owner chooses it, is a follow-up. - evidence/artifacts/claudeai-synced-plugins-20261015/ holds the inventory and the Loki count scripts and outputs; no account or bucket identifiers and no host MCP server names. - tests/test_claudeai_synced_plugins_exception.py ties the row to the template; both of its tests failed on the old row. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ing cost (#27) The decision said the four unused synced plugins cost nothing measurable. /skill-doctor at 2.1.300 (headless, 0 turns, $0; 2026-10-15T04:55:55Z) lists their 66 skills in the system prompt of every turn: about 8,450 tokens (bigdata-com 6,360, lseg 1,230, daloopa 620, cowork-plugin-management 240), about half of the 16,490 listing tokens of all loaded skills. - evidence/artifacts/claudeai-synced-plugins-20261015/listing_cost.py and listing-cost.json: the measurement, per source. - The decision's rationale states the cost and names the per-plugin "<name>@synced": false route; the exception itself stands until the owner rules again with this number. - New test asserts the stated figure equals the measured sum and the old claim is gone; it failed before this commit. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…eep decision (#27) On the owner's direction of 2026-10-15 (01:05 ET, paraphrased by the command center: resolve the synced plugins cleanly with current practice), after the listing-cost measurement in this PR, the command center disabled bigdata-com, lseg, daloopa and cowork-plugin-management with the native CLI (`claude plugin disable <id> --scope user`), which writes "<name>@synced": false into enabledPlugins in user settings (read back 2026-10-15T05:17Z; claude plugin list shows them disabled). - The decision's status records the supersession, the inverse (`claude plugin enable <id> --scope user`) and why the sync itself stays on: a plugin the account adds later still arrives and meets the trigger. - The syncClaudeAiPlugins disposition row becomes default-on: the key stays unset on purpose and each synced plugin is disabled per plugin. - The test pins the new row and the dated supersession; it failed before this commit. Co-Authored-By: Claude Opus 5.5 <[email protected]>
5 tasks done
… default-on; describe the catalog rows one by one Fix round for #1138 at 9f63fc3 (GPT full1, five P2; the local review's P2 is the same as P2 1): - P2 1-3: listing_cost.py builds its probe with skill_usage.skill_doctor_argv() (drops only --strict-mcp-config on a host with a managed MCP config) and reads the output with parse_claude_output() (a result object or a verbose event array; an error result, a nonzero cost or a model turn is refused). A failed process, a refused result or a result with no table writes nothing, so earlier evidence stays. The per-row source sums are unchanged, so listing-cost.json stays reproducible. - P2 4: the decision now says the row is default-on (the sync stays on; per-plugin disables since 05:07Z). - P2 5: the inventory and the decision describe grand-catalog rows 447-450 one by one: 447 durable-memory WATCH pinned at ae1513ea; 448-450 PENDING with PROPOSED provisional dispositions and no pin. Fail-before (base files, new tests): 7 failures and 1 error, e.g. Tuples differ: (1, 0) != (0, 0) (the verbose array crashed), AssertionError: 0 == 0 (a failed run exited 0 and overwrote the output), Lists differ: ['defer-user'] != ['default-on'], 'all PROPOSED' unexpectedly found, AttributeError: no attribute 'main'. After: tests.test_claudeai_synced_plugins_exception 8 OK, tests.test_skill_usage OK; validate rc 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Scope
claude:setting:syncClaudeAiPluginsdisposition row. It said the claude.ai plugin sync was "off on both hosts", but the key was unset and the sync was on. Also records the four synced plugins as an owner-synced exception to the pin policy, with an invoke trigger.c8d7fa9e4lane:foundationcatalogs/foundation/upstream-surface-dispositions.json(one row);docs/decisions/2026-10-15-claudeai-synced-plugins-exception.md(new);evidence/artifacts/claudeai-synced-plugins-20261015/(new) and its rows inmanifests/evidence.json;tests/test_claudeai_synced_plugins_exception.py(new).What was synced (inventory on the 2604 host, Claude Code 2.1.300):
knowledge-work-pluginsmarketplace, in one of ten account buckets under~/.claude/plugins/synced/:lseg;daloopaanddaloopa-docs;bigdata.com..in_usemarkers match 30 Loki sessions on 2.1.295.Ruling (command center, 2026-10-15T03:07Z): hold the host flip; these are the owner's own claude.ai integrations, and the command center is asking the owner whether to keep them. Later the same day: a /skill-doctor run at 04:55:55Z found that the four plugins add about 8,450 of 16,490 listing tokens per turn. At 05:07Z, on the owner's direction (paraphrased by the command center), the command center disabled each one with
claude plugin disable <id> --scope user. The keep decision is superseded; the row isdefault-on(the sync stays on, and each plugin is disabled), as the decision record's Status and Corrects lines say.syncClaudeAiPlugins: false.SOTA sources
syncClaudeAiPlugins(https://code.claude.com/docs/en/settings-reference, read 2026-10-14 for client 2.1.300):~/.claude/plugins/synced/and load each as<name>@synced;falseis honoured, andtrueis the same as unset;falsemoves the synced plugins to~/.claude/plugins/.trash/.7779afb12e36, 2.1.275, added the sync and thesyncClaudeAiPlugins: falseopt-out.skill_activatedandtool_resultevents (https://code.claude.com/docs/en/monitoring-usage).Evidence-class table
native_proveninventory.json(read from~/.claude/plugins/synced/; identifiers left out)native_proven.in_usemarkers;window_sessions.pyagainst Loki 127.0.0.1:21300native_provenloki_by.pyoutput inskill-activations.jsonandmcp-tool-results.json(host server names left out)source_reviewadoption/templates/claude.settings.template.jsonatc8d7fa9e4Local commands run
UPSTREAM_SURFACE_TEST_CACHE=/nonexistentkeeps this host's installed surface-watch cache out of the cached-artifact tests; the re-baseline follow-up fixes that separately.Decision record
docs/decisions/2026-10-15-claudeai-synced-plugins-exception.md. It refines the 2026-09-25 sentence that the key stays unset: the key still stays unset, now as a recorded exception with a trigger.Fix round 1 (ac14d3f)
From GPT full1 at 9f63fc3 (
full1-pr1138/GPT-VERDICT-9f63fc311.md) and the local review at 9f63fc3 (review_output.json; its P2 is the same as GPT P2 1). Pushed under the command center's standing release rule (2026-10-15T11:11Z).listing_cost.pycrashed on the verbose event arrayskill_usage.parse_claude_output(), which handles both a single object and an event arrayListingCostScriptTests.test_a_verbose_event_array_and_a_result_object_measure_the_same, run through a fakeclaudeon PATH:Tuples differ: (1, 0) != (0, 0)- a nonzero exit;
- an error result, a nonzero cost or a model turn (the parser's checks);
- no table, or no source column.
The per-row source sums are unchanged, so
listing-cost.jsonstays reproducible.test_a_failed_or_unmeasured_run_leaves_earlier_evidence(4 cases):AssertionError: 0 == 0, and the sentinel was overwritten--strict-mcp-configblocked managed-MCP hostsskill_usage.skill_doctor_argv()test_the_probe_is_skill_usages_managed_mcp_compatible_argv:AttributeError: no attribute 'main'defer-user; it isdefault-ondefault-on, with the 05:07Z per-plugin disables; the Ruling paragraph above records the later eventstest_the_decision_names_the_rows_current_disposition:Lists differ: ['defer-user'] != ['default-on']- 447 durable-memory: WATCH, pinned at
ae1513ea;- 448 and 449: PENDING, provisional WATCH, no pin;
- 450: PENDING, provisional OUT-OF-SCOPE, no pin.
test_the_grand_catalog_rows_are_described_one_by_one:'all PROPOSED' unexpectedly foundpython3 -m unittest tests.test_claudeai_synced_plugins_exception tests.test_skill_usage: OK.scripts/validate.py: rc 0.One side effect: the fail-first run imported the old script, whose module-level code ran the real headless
/skill-doctor(a local command, 0 turns, $0). It wrote one untracked file into the worktree; the file was deleted and never committed.Checklist
🤖 Generated with Claude Code