Portability, drift, and verification
The repository’s boundary model becomes difficult when the same capability is copied, translated, or supplied by a service that changes after the repository snapshot. This chapter diagnoses the main forms of drift in cursor/plugins. It explains why some skills read live documentation, why pstack generates a runtime-specific harness, what repository CI can detect, and why the Agent Compatibility plugin treats startup and observed workflow friction as evidence rather than as a single verdict.
The visible symptom is often simple. A plugin is listed but cannot start. A generated copy is installed but does not reflect the source. A documented endpoint no longer answers the question. A local integration works on one machine but not another. These symptoms can share the phrase “the plugin is broken,” while their causes live at different boundaries.
Live documentation is a response to contract drift
Origin Apps makes the source-of-truth rule explicit. Its API skill says not to name endpoints, scopes, headers, or limits from memory. It directs the agent to begin with the live documentation index and then fetch the section that answers the question. The OpenAPI contract and the current documentation are treated as the authority because an API can change after a skill file was written.
This rule is not a rejection of packaged knowledge. The skill still provides a useful operating procedure. It says where to start, which distinctions to check first, and which assumptions are unsafe. It does not try to carry a frozen list of every endpoint into every run. The packaged artifact supplies navigation and caution. The live specification supplies current contract details.
The porting workflow applies the same discipline to a concrete migration. It reads an existing GitHub App’s actual code, maps its calls and webhook fields to the live Origin specification, records what carries over and what is missing, and writes a planning brief without silently changing the application. A matching name is only a candidate. A capability the live docs do not mention remains a question rather than an assumed feature.
This approach distinguishes two kinds of drift. Documentation drift occurs when an instruction no longer reflects the provider. Behavioral drift occurs when the provider or host changes even though the packaged instruction is unchanged. Reading the live source can reduce the first kind of error, but it cannot prove the second until the run is observed.
Generated copies trade duplication for portability
Pstack supports another runtime through a generated harness tree and a Claude Code adapter. The source plugin contains skills, agents, documentation, and Cursor-oriented names. The generated tree copies the supported material, adds the adapter line where needed, rewrites or preserves links for the destination layout, and includes the manifest forms required by the target host.
The duplication is intentional.