Skip to content

a-stranger-adopts-it-unaided — A stranger installs Majordomus and is stopped from a false done in ten minutes, and every outside first run teaches the tool

The stranger's first ten minutes are one measured gate, init tells an adopter something true about their own repository, and each real outside run is recorded unedited and turned into cases.

BLOCKED 0 of 4 issues done

ready
0
blocked
4
active
0
verify
0
done
0
cancelled
0

Problem

Every test of adoption runs either in this repository or in a fixture the maintainer drives. Case 1024 proves an installed release serves a foreign repository, but stops at the MCP server answering; nothing walks a stranger's path from the installer to the refusal that is the product's whole point, and nothing times it. init reports what it created, not what it found in the repository it entered. Outside first runs exist only as maintainer-written field reports kept outside any repository. The owner's 2026-10-12 order that outreach waits for this is recorded nowhere on master. Proposed in ADR 0206 (Public outreach begins only after a stranger has finished a first task unaided) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c241#2, chatgpt-majordomus:c241#4, chatgpt-majordomus:c256#5, chatgpt-majordomus:c137#2, chatgpt-majordomus:c269#5.

Outcome

The stranger's first ten minutes are one measured gate, init tells an adopter something true about their own repository, and each real outside run is recorded unedited and turned into cases.

Current state

scripts/ci/install-check and test/cases/1024_an_installed_release_serves_a_foreign_repository.sh install a fixture release and read initialize/tools/list (I2162 DONE). lib/init.sh prints 'created ...' and hook advice only. docs/ADOPTION.md describes the second run; docs/ADOPTION_SECOND_RUN.md, cited by a-second-adopter-is-served, is not on master. a-second-adopter-is-served holds one issue on master (I2601 VERIFY). No intent or ADR on master records 'beta before outreach'.

Desired state

A case runs the published-installer path to a refused and an accepted finish in a foreign fixture and records elapsed time and manual steps; init ends with its findings; .ai/repo/knowledge/curated carries one observed record per outside run, and each friction is an issue in this milestone or in a-second-adopter-is-served.

Scope

  • scripts/ci/install-check
  • lib/init.sh
  • docs/ADOPTION.md
  • .ai/repo/workflows
  • .ai/repo/knowledge/curated
  • .github/workflows
  • .ai/repo/ci/gates.yaml
  • .ai/repo/adrs
  • share/providers.yaml

Out of scope

  • Outreach channels, posts and dates
  • The adopting repositories themselves: evidence, read only
  • Fixes the second-adopter findings already carry

Acceptance criteria

  • Every criterion of intent a-stranger-adopts-it-unaided has its evidence
  • No issue of the milestone decides by the identity of the repository it runs in

Validation

  • majordomus plan validate

Risks

  • A ten-minute bar measured on a fast Mac may not hold on a cold Linux runner; the case records the platform and the bar is per platform
  • Outside runs depend on real people; the milestone cannot close by effort alone

Issues

Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.

issuestatuswavedepends ontitle
I3127 BLOCKED 1 I2162 A clean installation reaches its first refused finish in a foreign repository, and the time and the manual steps are recorded
I3128 BLOCKED 1 I3123 init ends with what it found in the repository it adopted, each finding naming its file
I3129 BLOCKED 2 I3127, I3128 An outside developer's first run is recorded as it happened, and each friction it met becomes an issue with a failing case
I3321 BLOCKED 2 I3127 In a foreign repository, the wired pre-push hook of the claude-code projection refuses what finish would refuse, through the installed release

The graph

a-stranger-adopts-it-unaided dependency graphfrom .ai/repo/project
flowchart LR
    I3127["I3127<br/>A clean installation reaches its first refused finish in a foreign repository, and the time and the manual steps are recorded"]:::blocked
    I3128["I3128<br/>init ends with what it found in the repository it adopted, each finding naming its file"]:::blocked
    I3129["I3129<br/>An outside developer's first run is recorded as it happened, and each friction it met becomes an issue with a failing case"]:::blocked
    I3321["I3321<br/>In a foreign repository, the wired pre-push hook of the claude-code projection refuses what finish would refuse, through the installed release"]:::blocked
    I3127 --> I3129
    I3127 --> I3321
    I3128 --> I3129
    classDef done stroke:#16a34a,fill:#dcfce7,color:#14532d,stroke-width:2px
    classDef active stroke:#2563eb,fill:#eff6ff,color:#1e3a8a,stroke-width:2px
    classDef verify stroke:#7c3aed,fill:#f5f3ff,color:#4c1d95,stroke-width:2px
    classDef ready stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef planned stroke:#0891b2,fill:#ecfeff,color:#164e63,stroke-width:2px
    classDef blocked stroke:#b45309,fill:#fffbeb,color:#78350f,stroke-width:2px
    classDef cancelled stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px
    classDef superseded stroke:#6b7280,fill:#f9fafb,color:#374151,stroke-width:2px

Canonical record: .ai/repo/project/milestones/a-stranger-adopts-it-unaided.yaml. Read it back with majordomus plan show a-stranger-adopts-it-unaided.

Searches the titles and descriptions of every page this site publishes.