Skip to content

feat(app-control): add environments, integrated apps and multi-repo to the control-skill contract #9590

Description

@kyle-sexton

Slice A9b of #9507 (second half of poteto's A9 draft, comment).

Problem

Environments, integrated apps and multi-repo setups are not in the contract.

Fix

  • ## Environments: consumer-named entries with url, dependency services, extends, write policy and production: true; production is read-only by default, attended production writes need a committed grant plus an in-session yes, unattended production writes are off. Per-tier Capture rows.
  • ## Integrated apps: an integrated app gets its own control skill, included by reference; a missing other-repo checkout stops with the setting and the repository named.
  • Drive's ready checks each dependency service. map create interviews for ownership across repositories.
  • Two-process stdlib-Python fixture (an app that redirects to a stub identity server) under plugins/app-control/skills/map/evals/fixtures/identity/.
  • Evals missing-other-checkout-stops-with-setting, integrated-app-composes, production-write-refused-by-default, unattended-production-write-off. Fragment: app-control minor.

Done when

  • grep -E '^## (Steps files|Environments|Integrated apps)' plugins/app-control/reference/control-skill.md | wc -l prints 3.
  • python3 -I plugins/app-control/skills/map/evals/fixtures/identity/serve.py --self-test exits 0.
  • The four evals pass.

Blocked by: A9a.

Activity

  1. github-actions commented on Oct 24, 2026

    @github-actions
    Contributor

    Proposed work class: none

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none

    Understood: this is slice A9b of #9507. It adds ## Environments and ## Integrated apps to the app-control control-skill contract. It also adds dependency-service checks in drive's ready, an ownership interview in map create, a two-process identity fixture, and four evals. The done-when checks are concrete and runnable.

    Nothing is missing. The issue says it is blocked by A9a, which looks like #9588 (steps-file semantics), so it needs that slice first. I found no duplicates. #9507 is the parent and #9579 and #9581 are neighbouring slices.

    Automated triage. A maintainer reviews it.

  2. self-assigned this
    on Oct 24, 2026
  3. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  4. kyle-sexton commented on Oct 26, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

priority: mediumReal value, no hard deadline; normal backlog flow.status: needs-decisionAwaiting a human or maintainer judgment call.

Fields

No fields configured for Feature.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions