docs(plugins): consolidate foundation landing ledger and sample provenance

This commit is contained in:
陈奇 committed 2026-10-27 12:39:52 +00:00
1 parent 50fda91424
commit 1f0741698d
2 files changed
+274

No files matched your search

@@ -0,0 +1,97 @@
# Plugin foundation landing candidate
Draft #4011 is the single landing vehicle for the accumulated plugin foundation.
Earlier integration records describe frozen evidence, not the current acceptance
status. This candidate preserves their source history through ordinary merges.
It does not include global Agent/custom Chat #4006/#4012, model-picker #4002,
or terminal diagnostic #3999. No older source PR is closed by this preparation.
## Included commits
| Input | Exact input | Ordinary integration |
| --- | --- | --- |
| Prior #4011 | `d40b0d3c25ed00a33679e83be948fd1a5aa10bfa` | Starting point; all inherited contributions retained |
| Current main | `2796d1113a6310fae1779931f242e208a69b95a5` | `db1223d16`; Nginx #4010, macOS appearance #4013, closed-socket MCP reconnect #4016 |
| Author metadata and installed rows | `e4eb33856b335fe0b1d302827b1325ddfc23bdde` | `b3895a477`; preserves original avatar/badge, canonical v2 schema, b14 invalidation, exact visual-worker patch |
| Directory availability | `a36a906292cbe8033bc19b596dcaf7f853a804c7` | `d035cbea3`; no native adapter or expanded permission |
| Two-profile sync composition | `14ed19d2ed7cd1ecc201c9c910b112e97cc098ff` | `fc37ac48e`; tests only |
| Rejected-install catalog refresh | `50fda91424c915c1497e53a87a210e3943cb1e39` | Separate correction after bounded review; service and mounted-row regression only |
The only manual merge conflict was the end of `index.css`. Resolution retains
both the prior host-security theme block and main's window-background-blur block,
with their declarations unchanged. Automatic combinations retain main appearance
wiring alongside plugin settings/theme wiring, all five locales, preload methods,
the host services and SDK exports. No permission, source, endpoint, sandbox or
selected-resource restriction is relaxed. Package and lock inputs are unchanged.
`50fda9142` reuses the same selection-token comparison after an install-triggered
catalog refresh, including an install rejected for a changed/withdrawn selection.
The rejection is preserved; mounted authors no longer retain withdrawn enrichment.
The regression makes no package download or execution. It also preserves the
original synchronous unavailable-source rejection in `list()`: the first aggregate
runtime run caught that b14 changed it into a Promise rejection. The assertion was
not weakened. Corrected aggregate runtime: 711 pass, one native skip, zero failures
or cancellations. The original failed run and fail-before regression are retained.
## Checks and packages
Registered runtime, SDK/contract, Settings and actual connected host entrypoints,
changed-main MCP/appearance/editor regressions, example preparation, code generation,
lint and the normal production renderer build are run on this candidate. Exact
head, commands, counts and CI links are recorded in #4011. Package provenance is
in [the bounded sample manifest](foundation-packages.json): each archive is built
twice and whole-byte compared. Assistant is byte-identical to d40; Host changes
only README wording, with manifest/entrypoint unchanged. Database-owned, Rfam and
terminal archives change only `browser.js` minified bound identifier spelling.
Rebuilding the same sources with d40's generated SDK/contract artifacts reproduces
the exact old archive hashes. Parsing and normalizing lexical bindings yields
identical ASTs for all three bundles; manifests, protocol and permissions do not
change. Preparation does not connect, activate or query.
Local checks: runtime 711 pass/one existing native skip; SDK91; Settings and
connected host/security78; changed-main MCP/appearance/editor71; examples five
pass/one Docker opt-in skip. Contract/capability/Codex generation has no drift;
lint zero errors/seven existing warnings; normal production build36.13s. These
checks do not claim native UI, packaging or encrypted transport acceptance.
An earlier coding-executor full suite timed out after 15 minutes: 31 failures and
482 cancellations. Seven failures reproduced on unchanged d40; 24 were not probed
on that baseline. They remain unresolved evidence, not assumed baseline failures.
No additional long local full suite is used to conceal them. Clean-run exact-head
CI is a separate aggregate check and does not diagnose that historical run.
## Acceptance and landing order
1. Foundation: keep #4011 Draft until integrated CI/review and affected native UI
acceptance settle. d40 Settings, Host/Vault policy, terminal A/B selection and
inert multiline draft isolation, and native chat split/drag ownership passes
are historical evidence at their stated heads. They do not certify this new
current-main merge tree. The e4 row candidate remains frozen for its own normal
app light/dark/narrow verification. New avatar/catalog presentation and the
final install-refresh correction require their scoped review/acceptance.
2. Marketplace distribution: retain static-source identity and v2 delivery checks,
but track reviewed registry data, actual hosting/CDN and install/update/source
replacement/withdrawal acceptance separately. Current live source-only viewing
is not installation or deployment acceptance. Never weaken admitted-source or
destination guards to manufacture a pass.
3. Global Agent: #4006/#4012 remain a separate later increment, with their own
scope, review, CI and actual sample smoke. #4002 is also separate.
Historical integration vehicles #3967/#3989/#3993/#3997/#4001/#4004 are superseded
as landing vehicles, not discarded contributions. Their ancestors and native
receipts stay available. Unique source PRs remain intact; no premature closures.
Directory enumeration is intentionally unavailable in the default production
composition until a same-handle adapter exists. The advertised feature now tells
SDK callers the truth; filesystem permission alone does not enable it. The new
sync composition test proves local collect/apply/hydrate with real databases, not
encrypted cloud transport or native cloud-account sync. A native compatibility
transition needs two properly versioned builds; two 0.0.0 checkouts do not qualify.
Public database acceptance remains blocked by the retained TCP refusal before
protocol payload; the separately owned local fixture is pending. Source-policy,
compatibility and database gates must be explicitly reconciled by the parent,
not silently removed from requirements. Nested log-dialog overlap has source
coverage but no normal native route in the tested UI. This is code-readiness work,
not a claim that deployment, every original requirement or the whole project is
complete. No main merge, Ready transition, release or live metadata publication.
@@ -0,0 +1,177 @@
[
{
"name": "assistant",
"id": "com.netcatty.assistant",
"version": "0.1.0",
"sha256": "7943d4c3800914fe0acd3d0f3a3d7f7c1910c212a5dc58a044871a6a82485274",
"bytes": 17214,
"fileCount": 6,
"permissions": {
"required": [
"commands",
"views"
],
"optional": [
"ai.invoke",
"context.selected.list",
"context.selected.read"
]
},
"features": {
"required": [
"ai.model-invocation",
"context.selected-read"
]
},
"repeatIdentical": true,
"previousD40Sha256": "7943d4c3800914fe0acd3d0f3a3d7f7c1910c212a5dc58a044871a6a82485274",
"preparedOnly": true,
"noConnectionOrActivation": true,
"changedEntriesFromD40": [],
"delta": "Archive byte-identical."
},
{
"name": "database-owned",
"id": "com.netcatty.database-minimal",
"version": "0.1.0",
"sha256": "3c67f529cd5d2843dbf74a62d237b7b7d50d24a466ade85cce76b3adfff919a2",
"bytes": 11660,
"fileCount": 5,
"permissions": {
"required": [
"commands",
"views"
],
"optional": [
{
"permission": "network.stream",
"resources": [
"tcp://10.77.0.20:3306"
],
"reason": "Connect only to the prepared disposable fixture."
}
]
},
"features": {
"required": [
"network.byte-streams"
]
},
"repeatIdentical": true,
"previousD40Sha256": "f01c6a24382897d4b0bf4130941274abacb9a9a963f9b56ecaceb2c020f36874",
"preparedOnly": true,
"noConnectionOrActivation": true,
"changedEntriesFromD40": [
"browser.js"
],
"delta": "Generated SDK export changes alter only minified bound identifier spelling; scope-aware normalized AST is identical.",
"oldGeneratedRebuildSha256": "f01c6a24382897d4b0bf4130941274abacb9a9a963f9b56ecaceb2c020f36874",
"boundIdentifierAlphaEquivalent": true
},
{
"name": "database-rfam-readonly",
"id": "com.netcatty.database-rfam-readonly",
"version": "0.1.0",
"sha256": "554407c067ced0a6634599b7eccc7c6dbb4f2ff7c523d0bacbbbd4fb78c04612",
"bytes": 11003,
"fileCount": 5,
"permissions": {
"required": [
"commands",
"views"
],
"optional": [
{
"permission": "network.stream",
"resources": [
"tcp://mysql-rfam-public.ebi.ac.uk:4497"
],
"reason": "Run the fixed public Rfam acceptance query only after explicit authorization."
}
]
},
"features": {
"required": [
"network.byte-streams"
]
},
"repeatIdentical": true,
"previousD40Sha256": "aaca586669db454e91d61487e576ed524d1b7190eed182bc2cd0035e59caa0d3",
"preparedOnly": true,
"noConnectionOrActivation": true,
"changedEntriesFromD40": [
"browser.js"
],
"delta": "Generated SDK export changes alter only minified bound identifier spelling; scope-aware normalized AST is identical.",
"oldGeneratedRebuildSha256": "aaca586669db454e91d61487e576ed524d1b7190eed182bc2cd0035e59caa0d3",
"boundIdentifierAlphaEquivalent": true
},
{
"name": "host-actions",
"id": "com.netcatty.host-actions",
"version": "0.1.0",
"sha256": "9713f001449b0c749f518d42f013fa72ead6dd43f8e7ddd7843cc6ecc03027f9",
"bytes": 4789,
"fileCount": 3,
"permissions": {
"required": [
"commands",
"menus"
],
"optional": [
"vault.metadata",
"vault.write",
"ui.interact"
]
},
"features": {
"required": [
"vault.host-actions",
"commands.interactive"
]
},
"repeatIdentical": true,
"previousD40Sha256": "cf04f82dfe25ab5cda6f5f3dad0a8fb06c37bedf9924f556bee2b8402e542ef2",
"preparedOnly": true,
"noConnectionOrActivation": true,
"changedEntriesFromD40": [
"README.md"
],
"delta": "README wording follows permission policy. Manifest and browser entrypoint are byte-identical."
},
{
"name": "terminal-selection-draft",
"id": "com.netcatty.terminal-selection-draft",
"version": "0.1.0",
"sha256": "aaadd8687b1af1d6e1f9a56c52760ac0d19e7ed4e8212fb7c8775ed052ed74f1",
"bytes": 2954,
"fileCount": 2,
"permissions": {
"required": [
"commands",
"menus"
],
"optional": [
"terminal.selection.read",
"terminal.input.propose"
]
},
"features": {
"required": [
"terminal.selection-sharing",
"terminal.input-drafts",
"commands.interactive"
]
},
"repeatIdentical": true,
"previousD40Sha256": "4c9c2388b7f891156192a0b5ab7b23291beba3555e7ec8cf24fbe2dfe1242d5e",
"preparedOnly": true,
"noConnectionOrActivation": true,
"changedEntriesFromD40": [
"browser.js"
],
"delta": "Generated SDK export changes alter only minified bound identifier spelling; scope-aware normalized AST is identical.",
"oldGeneratedRebuildSha256": "4c9c2388b7f891156192a0b5ab7b23291beba3555e7ec8cf24fbe2dfe1242d5e",
"boundIdentifierAlphaEquivalent": true
}
]