Skip to content

managed guidance hardcodes one install's stack (commerce plugins, Data Machine, a specific harvest exclude list) into text shipped to every managed site #320

Description

@chubes4

guidance/wordpress-source.managed.sh describes one specific install's stack as if it were universal. This text is generated into the AGENTS.md of every managed install, so the assertions are wrong on any site that does not happen to look like h44lacrosse.com.

Shipped in v1.11.1.

What it asserts that it cannot know

1. That the site sells things.

The rest of wp-content/plugins/ — third-party plugins, including commerce and payment code, and the runtime that gives you memory and tools. Editing these breaks your own environment or the site's ability to take money […]

There may be no store and no gateway. On a plain blog this is noise at best, and it teaches the agent a mental model of the install that is simply false.

2. That the remaining plugins are this agent's runtime.

"the runtime that gives you memory and tools" is a description of Data Machine, which is this install's happenstance, not a property of wp-content/plugins/.

3. A specific set of never-captured paths.

  • vendor/ and node_modules/ — installed dependency trees
  • composer.lock, package-lock.json, package.json — dependency manifests

That list is one operator's harvest excludes, copied verbatim. wp-coding-agents does not own the capture configuration and cannot read it. Presenting a guess as a definitive list is worse than saying nothing, because the agent will trust it and edit something that actually is captured — or skip something that is not.

4. That the editable set equals the captured set.

The editable list above is exactly what the operator's out-of-band capture records

That is the intended invariant of the posture, and the operator is responsible for maintaining it. The tool has no way to verify it and should not state it as fact.

Why this matters beyond tidiness

The whole point of #314 and #318 was that generated prose must not claim things the enforced policy cannot back. This is the same failure in a third form: prose claiming things about the environment that the tool never inspected. An agent that is told "editing this breaks the site's ability to take money" on a site with no commerce plugin has been handed a false model of its own install, by the file that is supposed to be its most reliable source of truth.

Fix

Describe the category and the reason; leave the specifics to the operator.

  • Read-only bullets become "plugins this site did not author, including whatever this agent itself depends on" — true everywhere, and it still conveys that the agent's own dependencies are off limits without naming them.
  • Give the reason generically: an update overwrites the change, and nothing captures it. Both hold regardless of what any particular plugin does.
  • Replace the specific never-captured list with the principle (installed dependency trees, lockfiles, and generated build output are not authored source) plus an instruction to ask the operator which paths this site actually captures rather than assume.
  • Soften the capture claim from "exactly what the capture records" to "what the operator declared as this site's own source", which is what the tool actually knows.

Add a regression guard in tests/posture.sh asserting the rendered managed prose contains none of: WooCommerce, Stripe, commerce, payment, money, composer.lock, package-lock, node_modules, Data Machine, homeboy, harvest.yml, wp-admin.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions