Skip to content

The surveyor forge-guard adapter is declared unconditionally required but documented as conditionally installed #161

Description

@devantler

🤖 Generated by the Agentic Engineer

Evidence

The agentic-engineering provider-neutral desired state declares scripts/surveyor-forge-readonly.sh as an unconditional entry in spec.source.requiredRuntimeAssets, while the onboarding text in the same document instructs a consumer to install that adapter conditionally — quoting it:

plus scripts/surveyor-forge-readonly.sh only where the runtime presents a candidate command as structured JSON on standard input rather than as an argument

Measured at 439f4eee (plugin 4.4.12), resources/provider-neutral.desired-state.json:

Entry Declared
scripts/classify-default-branch-ci-runs.sh required, executable
scripts/forge-readonly-guard.sh required, executable
scripts/surveyor-forge-readonly.sh required, executable — unconditionally

Problem and who it affects

A consuming deployment reads that array as an allow-list and requires every entry to be present in the installed copy. So a runtime without full plugin support that presents candidate commands as arguments — exactly the case the onboarding text tells to omit the adapter — is instructed to omit a file that the manifest simultaneously declares mandatory.

Such a deployment is then permanently unable to report its definitions as current, no matter how correctly it is configured: the omission the text asked for is the drift the manifest reports. The two remedies are mutually exclusive as written, so a consumer cannot satisfy both.

This was surfaced by a Codex review (P2) on the consuming rollout PR devantler-tech/monorepo#3040 and independently confirmed against the consumer's own currency checker, which enumerates spec.source.requiredRuntimeAssets and requires each entry in every non-Cursor installed copy.

Why it belongs here rather than in the consumer

The consumer copy is byte-identical to this document (sha256 1d561af23c622da23044548c2d439226d754738e23e38eee4484911b7cef9db1), and the consumer's delivery-contract test hashes that copy against the pinned submodule. Editing the copy to resolve the contradiction would both fail that test and silently fork a verbatim artifact from its source, so the contradiction has to be resolved at the authoring end.

Expected behaviour

The manifest and the onboarding text agree: either the adapter is unconditionally required for every runtime, or the manifest represents the condition explicitly so a consumer can evaluate it and a currency check can honour it.

Acceptance criteria

  • The declaration and the onboarding text state the same requirement for scripts/surveyor-forge-readonly.sh.
  • A conditional asset, if that is the chosen shape, is machine-readable rather than described only in prose.
  • A correctly configured argument-passing fallback deployment can report CURRENT.
  • Existing full-plugin consumers are unaffected — a negative control, since they install all three today.

Size

Small — a manifest/prose reconciliation, plus whatever conditional representation is chosen.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions