fix(teaching): manifest actions ARE discoverable + textField reads 'text' — drop two stale host caveats - #5
Merged
Conversation
…ext' — drop two stale host caveats Two shipped-host behaviors were still taught as bugs/workarounds: 1. Manifest 'actions.definition' discovery (stale fn-163 caveat). The host's ActionsRegistryCorePlugin replays manifest contributions into DiscoveryStore at cold start and on plugin activation (replayManifestDefinitionContributions, ActionsRegistryCorePlugin.swift ~739-749 cold start / ~511-522 re-activation), and ActionsRegistryCorePluginTests verifies the stubs surface via the merged actions.all() / palette.query() catalog. Teaching now retains the merged-catalog contract: manifest-only entries ARE discoverable (badged "manifest only"), and become executable once runtime register() binds the handler. Dual registration stays the pattern — the rationale is now "manifest = discoverable metadata, runtime = executable", not "manifest never reaches discovery". 2. textField initial contents (obsolete 'value' workaround). The host reads properties["text"] first with legacy properties["value"] as back-compat fallback only (PluginViewDescriptorRenderer.swift ~230-232, fn-179 commit b18064e85). Teaching now documents 'text' as the supported property and removes the assertion-cast dual-key workaround. Touched: extension-api.md (both flagged regions + all() table row + palette paragraph + extensions[] blockquote), patterns.md par.3, SKILL.md, viewdescriptor-authoring/SKILL.md, plugin-architect.md, new-plugin.md, README.md, plus regenerated compiled/ artifacts (npm run check green; compiled context 179067 bytes, under the 179200-byte ceiling).
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.
Fixes two stale host caveats in the teaching sources, flagged by codex on AppOS-Desktop PR #141 (https://github.com/acebytes/AppOS-Desktop/pull/141) against the generated
plugin-factory-context.md.1. Manifest
actions.definitioncontributions ARE discoverable (stale fn-163 caveat)The bundle taught that manifest-declared actions "never reach discovery (host bug fn-163)". Verified against the shipped Desktop host:
Sources/TwoPanez/Services/Plugins/CorePlugins/ActionsPlugin/ActionsRegistryCorePlugin.swiftperforms cold-start replay of manifestactions.definitioncontributions intoDiscoveryStore(replayManifestDefinitionContributions, call sites at ~739-749 cold start and ~511-522 re-activation, impl at ~1878) plus lifecycle re-ingestion via the contributor lifecycle subscription.Tests/TwoPanezTests/Actions/ActionsRegistryCorePluginTests.swiftasserts qualified- and bare-form manifest contributions land inDiscoveryStoreat cold start, surface via the mergedactions.all()/palette.query()catalog, are replayed for.resolvedcontributors at production boot shape, and are never resurrected for disabled contributors.Teaching now retains the merged-catalog contract: manifest-only entries ARE discoverable (badged "manifest only" in the Action Browser) and surface
ACTION_NOT_FOUNDon invoke until runtimeregister()/registerFromCommand()binds the handler. Dual registration remains the shipped pattern; the rationale is corrected from "manifest never reaches discovery" to "manifest = discoverable metadata, runtime = executable handler".2.
textFieldreads typedtext(obsoletevalueworkaround)The bundle claimed the host reads only
value, so typedtext"renders empty", and taught an assertion-cast dual-key workaround. Verified against the shipped Desktop renderer:Sources/TwoPanez/Services/Plugins/PluginViewDescriptorRenderer.swiftlines 230-232 on main (fn-179, commit b18064e85) readproperties["text"]FIRST with legacy loose-JSONproperties["value"]as back-compat fallback only. Teaching now documentstextas the supported initial-contents property and drops the workaround.Touched surfaces
reference/extension-api.md— both flagged compile regions (ctx.actionscatalog prose +extensions[]blockquote +all()table row +ctx.paletteparagraph, and thetextFieldbullet)reference/patterns.md§3 (dual-registration pattern, no longer titled "fn-163 workaround")SKILL.md,skills/viewdescriptor-authoring/SKILL.md,agents/plugin-architect.md,commands/new-plugin.md,README.md— same two corrections on non-compiled surfacescompiled/artifacts +manifest.jsonregenerated via AppOS-Desktopscripts/compile-factory-context.shGates
npm run checkgreen (freshness + verify-knowledge 69 fences + compiled-freshness)./scripts/compile-factory-context.sh --checkgreen;swift test --parallel --filter 'E2EFactoryContextResourceTests'greenMerge order
This PR must merge BEFORE AppOS-Desktop PR #141 — #141's regenerated bundle asserts freshness against dev-plugin main (same ordering as the previous URL-contract round, PR #4).