- Modified the autodev state to reflect the current testing phase and details of the new `jetson-e2e` tests. - Enhanced the "How to Test" documentation to provide clearer instructions on the demo replay validation process, including video and tlog alignment steps. - Updated architectural documentation to include the new demo replay operator flow and its dependencies. - Documented the removal of deprecated auto-sync features and clarified the operator-facing UI for replay validation. - Added new entries in the dependencies table for upcoming tasks related to the demo replay flow. These changes improve clarity and usability for operators and developers working with the demo replay system.
32 KiB
Meta-Repo Workflow
Workflow for meta-repositories — repos that aggregate multiple components via git submodules, npm/cargo/pnpm/go workspaces, or ad-hoc conventions. The meta-repo itself has little or no source code of its own; it orchestrates cross-cutting documentation, CI/CD, and component registration.
This flow differs fundamentally from greenfield and existing-code:
- No problem/research/plan phases — meta-repos don't build features, they coordinate existing ones
- No test spec / run tests — the meta-repo has no code to test
implementis scoped to suite-level work only — cross-repo concerns, repo/folder renames, suite-root infra additions (e.g.,.gitmodules,_infra/, suitee2e/). Per-component implementation lives in each component's own workspace/autodevcycle. The meta-repo's implement step (Step 3.5) executes only when_docs/tasks/todo/is non-empty AND the user explicitly opts in; placement is before the sync skills so subsequent Doc/E2E/CICD sync propagates the post-implementation state.- No
_docs/00_problem/artifacts — documentation target is_docs/*.mdunified docs, not per-feature_docs/NN_feature/folders - Primary artifact is
_docs/_repo-config.yaml— generated bymonorepo-discover, read by every other step
Step Reference Table
| Step | Name | Sub-Skill | Internal SubSteps |
|---|---|---|---|
| 1 | Discover | monorepo-discover/SKILL.md | Phase 1–10 |
| 2 | Config Review | (human checkpoint, no sub-skill) | — |
| 2.5 | Glossary & Architecture Vision | (inline, no sub-skill) | Steps 1–5 |
| 3 | Status | monorepo-status/SKILL.md | Sections 1–5 |
| 3.5 | Suite Implement | implement/SKILL.md (suite-level invocation context) | Steps 1–14 + 16 (Step 14.5 + Step 15 skipped); conditional on _docs/tasks/todo/ non-empty AND user opt-in |
| 4 | Document Sync | monorepo-document/SKILL.md | Phase 1–7 (conditional on doc drift) |
| 4.5 | Integration Test Sync | monorepo-e2e/SKILL.md | Phase 1–6 (conditional on suite-e2e drift; skipped if suite_e2e: block absent in config) |
| 5 | CICD Sync | monorepo-cicd/SKILL.md | Phase 1–7 (conditional on CI drift) |
| 6 | Loop | (auto-return to Step 3 on next invocation) | — |
Onboarding is NOT in the auto-chain. Onboarding a new component is always user-initiated (monorepo-onboard directly, or answering "yes" to the optional onboard branch at end of Step 5). The autodev does NOT silently onboard components it discovers.
Detection Rules
Resolution: when a state file exists, state.step + state.status drive detection and the conditions below are not consulted. When no state file exists (cold start), walk the rules in order — first match wins. Meta-repo uses _docs/_repo-config.yaml (and its confirmed_by_user flag) as its primary folder-probe signal rather than per-step artifact folders.
Step 1 — Discover
Condition: _docs/_repo-config.yaml does NOT exist
Action: Read and execute .cursor/skills/monorepo-discover/SKILL.md. After completion, auto-chain to Step 2 (Config Review).
Step 2 — Config Review (session boundary)
Condition: _docs/_repo-config.yaml exists AND top-level confirmed_by_user: false
Action: This is a hard session boundary. The skill cannot proceed until a human reviews the generated config and sets confirmed_by_user: true. Present using Choose format:
══════════════════════════════════════
DECISION REQUIRED: Config review pending
══════════════════════════════════════
_docs/_repo-config.yaml was generated by monorepo-discover
but has confirmed_by_user: false.
A) I've reviewed — proceed to Status
B) Pause — I'll review the config and come back later
══════════════════════════════════════
Recommendation: B — review the inferred mappings (tagged
`confirmed: false`), unresolved questions, and assumptions
before flipping confirmed_by_user: true.
══════════════════════════════════════
- If user picks A → verify
confirmed_by_user: trueis now set in the config. If stillfalse, re-ask. If true, auto-chain to Step 2.5 (Glossary & Architecture Vision). - If user picks B → mark Step 2 as
in_progress, update state file, end the session. Tell the user to invoke/autodevagain after reviewing.
Do NOT auto-flip confirmed_by_user. Only the human does that.
Step 2.5 — Glossary & Architecture Vision (one-shot)
Condition (folder fallback): _docs/_repo-config.yaml exists AND confirmed_by_user: true AND (_docs/glossary.md does NOT exist OR the cross-cutting architecture doc identified in docs.cross_cutting does NOT contain a ## Architecture Vision section).
State-driven: reached by auto-chain from Step 2 (user picked A).
Goal: Capture meta-repo-wide terminology and the user's architecture vision once, after the config is confirmed but before any sync skill runs. Without this, monorepo-document will faithfully propagate per-component changes but never surface a unified mental model of the meta-repo to the user, and the AI will keep re-inferring the same project terminology on every invocation.
Why inline (no sub-skill): monorepo-discover is hard-guarded to write only _repo-config.yaml; monorepo-document only edits existing docs. Glossary and architecture-vision creation is a first-time, user-confirmed write that crosses both guarantees, so it lives directly in the flow.
Inputs:
_docs/_repo-config.yaml(component list, doc map, conventions, assumptions log)- Cross-cutting docs listed under
docs.cross_cutting(existing architecture doc, if any) - Each component's
primary_doc(read-only, for terminology + responsibility extraction) - Root
README.mdifrepo.root_readmeis referenced
Outputs:
_docs/glossary.md(or<docs.root>/glossary.mdifdocs.root≠_docs/) — NEW- The cross-cutting architecture doc updated in place: a
## Architecture Visionsection is prepended (or merged into an existing "Vision" / "Overview" heading) - One new entry appended to
_docs/_repo-config.yamlunderassumptions_log:recording the run - A new top-level config entry:
glossary_doc: <path>so futuremonorepo-statusandmonorepo-documentruns treat the glossary as a known cross-cutting doc
Procedure:
-
Draft glossary from
_repo-config.yaml+ each component's primary doc. Include:- Component codenames as they appear in the config (
namefield) and any rename pairs the user noted inunresolved:resolutions - Domain terms that recur across ≥2 component docs
- Acronyms / abbreviations
- Convention names from
conventions:(e.g., commit prefix, deployment tier names) - Stakeholder personas if cross-cutting docs reference them
Each entry: one-line definition + source (
source: components.<name>.primary_docorsource: _repo-config.yaml conventions). Skip generic terms.
- Component codenames as they appear in the config (
-
Draft architecture vision from the meta-repo perspective:
- One paragraph: what the system as a whole is, what each component contributes, the runtime topology (one binary / N services / N clients + 1 server / hybrid), how components communicate (REST / gRPC / queue / DB-shared / file-shared)
- Components & responsibilities (one-line each), pulled directly from
_repo-config.yamlcomponents:list - Cross-cutting concerns ownership: which doc owns which concern (auth, schema, deployment, etc.) — pulled from
docs.cross_cutting[].owns - Architectural principles / non-negotiables the user has implied across components (e.g., "all components share a single Postgres", "submodules own their own CI", "deployment is per-tier, not per-component")
- Open questions / structural drift signals: components missing from
docs.cross_cutting, components in registry but not in config (registry mismatch), or contradictions between component primary docs
-
Present condensed view to the user (NOT the full draft files):
══════════════════════════════════════ REVIEW: Meta-Repo Glossary + Architecture Vision ══════════════════════════════════════ Glossary (N terms drafted from config + component docs): - <Term>: <one-line definition> - ... Architecture Vision — meta-repo level: <one-paragraph synopsis> Components / responsibilities: - <component>: <one-line> - ... Cross-cutting ownership: - <concern> → <doc> - ... Principles / non-negotiables: - <principle> - ... Open questions / drift signals: - <q1> - <q2> ══════════════════════════════════════ A) Looks correct — write the files B) Add / correct entries (provide diffs) C) Resolve open questions / drift signals first ══════════════════════════════════════ Recommendation: pick C if drift signals exist; otherwise B if components or principles don't match your intent; A only when the inferred vision is exactly right. ══════════════════════════════════════ -
Iterate:
- On B → integrate the user's diffs/additions, re-present, loop until A.
- On C → ask the listed open questions in one batch, integrate answers, re-present.
- Do NOT proceed to step 5 until the user picks A.
-
Save:
- Write
_docs/glossary.md(alphabetical) with**Status**: confirmed-by-user+ date. - Update the cross-cutting architecture doc identified in
docs.cross_cutting(or create one at_docs/00_architecture.mdif none exists and the user's option-B input named one): prepend## Architecture Visionwith the confirmed paragraph + components + ownership + principles. Preserve every existing H2 below verbatim. - Append to
_docs/_repo-config.yaml:- Top-level
glossary_doc: <path-relative-to-repo-root>(sibling ofdocs.root) - New
assumptions_log:entry:{ date: <today>, skill: autodev-meta-repo Step 2.5, run_notes: "Captured glossary + architecture vision", assumptions: [...] }
- Top-level
- Do NOT flip any
confirmed: false→confirmed: truein the config; this step writes its own confirmed artifact, it does not retroactively confirm config inferences.
- Write
Self-verification:
- Every glossary entry traces to either the config or a component primary doc
- Every component listed in the vision matches a
components:entry in the config - All open questions are answered or explicitly deferred (with the user's acknowledgement)
- The cross-cutting architecture doc still contains every H2 it had before this step
- User picked option A on the latest condensed view
Idempotency: if both _docs/glossary.md exists AND the architecture doc already has a ## Architecture Vision section, this step is skipped on re-invocation. To refresh, the user invokes /autodev after deleting glossary.md (or running monorepo-discover with structural changes that justify a re-confirmation).
After completion, auto-chain to Step 3 (Status).
Step 3 — Status
Condition (folder fallback): _docs/_repo-config.yaml exists AND confirmed_by_user: true AND (_docs/glossary.md exists OR glossary_doc: is recorded in the config).
State-driven: reached by auto-chain from Step 2.5, or entered on any re-invocation after a completed cycle.
Action: Read and execute .cursor/skills/monorepo-status/SKILL.md.
The status report identifies:
- Components with doc drift (commits newer than their mapped docs)
- Components with CI coverage gaps
- Registry/config mismatches
- Unresolved questions
Based on the report, auto-chain branches in this evaluation order (first match wins):
- Registry mismatch (new components not in config, or config component not in registry) → present the Choose format below FIRST. After the user resolves it (A: refresh discover, B: onboard, C: continue with mismatch acknowledged), proceed to the next rule. This rule has priority because a stale config would mislead Step 3.5's ownership-envelope synthesis and any sync skill's component scope.
- Pre-routing gate (Step 3.5 detection) — check
_docs/tasks/todo/for suite-level task files (*.mdexcluding files starting with_). If ≥1 task is present, auto-chain to Step 3.5 (Suite Implement). After Step 3.5 returns (regardless of A/B outcome), the post-implement re-status applies rules 3–6 below to the post-implementation state. - If doc drift found → auto-chain to Step 4 (Document Sync)
- Else if CI drift (only) found → auto-chain to Step 5 (CICD Sync)
- Else if suite-e2e drift (only) found → auto-chain to Step 4.5 (Integration Test Sync) (only when
suite_e2e:block exists in config) - Else → workflow done for this cycle.
Registry mismatch Choose format (rule 1):
══════════════════════════════════════
DECISION REQUIRED: Registry drift detected
══════════════════════════════════════
Components in registry but not in config: <list>
Components in config but not in registry: <list>
A) Run monorepo-discover to refresh config
B) Run monorepo-onboard for each new component (interactive)
C) Ignore for now — continue
══════════════════════════════════════
Recommendation: A — safest; re-detect everything, human reviews
══════════════════════════════════════
When rule 6 fires (no drift, no todo tasks), report "No drift. Meta-repo is in sync." and end the cycle. Loop waits for next invocation.
Step 3.5 — Suite Implement
Condition (folder fallback): _docs/tasks/todo/ exists AND contains ≥1 file matching *.md excluding files starting with _ (e.g., _dependencies_table.md is excluded by convention).
State-driven: reached by auto-chain from Step 3 when the pre-routing gate detected todo tasks. Inserted before the sync skills (Step 4 / 4.5 / 5) by deliberate design: implementing renames + cross-repo edits first means the subsequent sync skills propagate the actual landed state rather than the pre-change state, avoiding a second cycle to fix downstream drift.
Skip condition: _docs/tasks/todo/ is empty, missing, or contains only _* files. In that case Step 3.5 is skipped entirely and the cycle proceeds with Step 3's existing drift-based routing.
Goal: Execute suite-level implementation tasks — cross-repo concerns (e.g., autopilot + ui + suite e2e/ cutover in a coordinated change-set), folder renames (e.g., git mv flights missions + .gitmodules edit + _infra/ path refs), and suite-root infrastructure additions (e.g., _infra/dev/docker-compose.dev.yml). Per-component implementation work stays in each component's own workspace /autodev cycle.
Why this exists: the meta-repo's existing sync skills (monorepo-document, monorepo-cicd, monorepo-e2e) only propagate changes that already landed. They cannot execute a task spec. Without Step 3.5, suite-level tickets like AZ-543 (B4 repo rename) or AZ-506 (new dev compose) have no flow path forward — they require operator action outside autodev.
Inputs:
_docs/tasks/todo/*.md(excluding_*) — task specs in the existing format (Task/Component/Dependencies/Acceptance criteriaheaders)_docs/_repo-config.yaml—components[].pathlist, used to compute the suite-level OWNED envelope (workspace root EXCLUDING any path under a component's folder)_docs/tasks/_dependencies_table.md— synthesized by this step if missing (see Procedure)_docs/tasks/_suite_module_layout.md— synthesized by this step if missing (see Procedure)
Procedure:
-
Detection (already done by Step 3 pre-routing gate). List task files in
_docs/tasks/todo/(excluding_*). If 0 → skip Step 3.5. If ≥1 → continue. -
Present Choose:
══════════════════════════════════════ DECISION REQUIRED: <N> suite-level task(s) in _docs/tasks/todo/ ══════════════════════════════════════ Task(s) detected: - AZ-XXX: <title> (deps: <list or "—">) - AZ-YYY: <title> (deps: <list or "—">) ... A) Run implement skill on these task(s) now (then continue to Doc / E2E / CICD sync) B) Skip implement this cycle — continue to Doc / E2E / CICD sync without executing tasks C) Pause — review the tasks before deciding (end session, no state changes) ══════════════════════════════════════ Recommendation: A — running implement BEFORE syncs means subsequent sync skills propagate the post-implementation state. B is appropriate when tasks are blocked on user input or external coordination. C when the tasks themselves need owner clarification before execution. ══════════════════════════════════════ -
On user A — Pre-flight:
a. Working tree clean check. Run
git status --porcelain. If non-empty, surface to the user with a Choose A/B/C identical to the implement skill's prerequisite gate (commit/stash manually; agent commits aschore: WIP pre-implement; abort).b. Synthesize
_docs/tasks/_dependencies_table.mdif missing. Parse each in-scope task'sDependencies:field. Write a minimal table of the form:# Suite-Level Task Dependencies | Task ID | Depends on | Notes | |---------|------------|-------| | AZ-XXX | (none) | — | | AZ-YYY | AZ-XXX | — |If a task lists a dependency that is neither in
todo/nordone/, log a warning in the synthesized file but do not block — implement skill's Step 1 (Parse) will surface the issue if it actually blocks execution.c. Synthesize
_docs/tasks/_suite_module_layout.mdif missing. Default content:# Suite-Level Module Layout (synthetic) Generated by autodev meta-repo Step 3.5. The suite root has no per-feature decomposition; ownership is defined at the component-boundary level only. ## Per-Component Mapping | Component | Owns | Imports from | |-----------|----------------------------------|--------------| | suite | (workspace root) excluding any path listed under `_repo-config.yaml.components[].path` | (read-only) every component's primary doc + `_docs/*.md` | Suite-level tasks operate on: `.gitmodules`, `_infra/**`, `_docs/**` (excluding `_docs/tasks/_*` regenerated files), root `README.md`, `e2e/**` (suite e2e harness only). Forbidden paths for suite-level tasks: `<component>/**` for every component listed in `_repo-config.yaml.components[].path` — those edits live in the component's own workspace `/autodev` cycle.d. Prepare invocation context:
suite_level: true TASKS_DIR: _docs/tasks/ module_layout_path: _docs/tasks/_suite_module_layout.md -
Invoke implement skill. Read and execute
.cursor/skills/implement/SKILL.mdwith the prepared context. The skill's "Suite-level invocation context" subsection (added in tandem with this flow change) honors the three flags above and skips:- Step 14.5 (cumulative code review) — no
architecture_compliance_baseline.mdexists at the suite level; cross-task drift is captured by the nextmonorepo-statuscycle instead. - Step 15 (Product Implementation Completeness Gate) — the gate's inputs (
_docs/02_document/architecture.md,system-flows.md,components/*/description.md) do not exist in the meta-repo artifact layout. Suite tasks are infrastructure / coordination work, not feature implementation.
All other implement skill steps (1–14, 16) execute unchanged. Tracker integration (Step 5: In Progress, Step 12: In Testing) runs normally.
- Step 14.5 (cumulative code review) — no
-
Post-implement re-status. After the implement skill completes (last batch committed, all originally-todo tasks moved to
_docs/tasks/done/), silently re-run Step 3's drift detection logic — do NOT re-render the full Status report; just re-evaluate the drift signals against the post-implementation tree. Then auto-chain per the post-implementation drift findings:- Doc drift → Step 4 (Document Sync)
- Suite-e2e drift only → Step 4.5
- CI drift only → Step 5
- No drift → cycle complete
Note: the post-implement re-status is exactly why Step 3.5 is placed before sync. A repo rename will typically introduce doc + CI drift; the next invocation of Step 4 / Step 5 catches it on the same cycle.
-
On user B (skip) → mark Step 3.5
skippedin state file. Apply Step 3's original drift-based routing (compute from the pre-Step-3.5 Status report). -
On user C (pause) → end session. Update state to
step: 3.5, status: in_progress, sub_step: {phase: 0, name: awaiting-task-review, detail: "<N> tasks pending review"}. Tell the user to invoke/autodevagain after deciding. Do NOT modify any files — pre-flight has not run yet.
Self-verification (executed before invoking implement):
- Working tree is clean (or user explicitly chose B in the WIP-stash sub-Choose)
_docs/tasks/_dependencies_table.mdexists (synthesized if it didn't)_docs/tasks/_suite_module_layout.mdexists (synthesized if it didn't)- All in-scope task files have a
Component:field (skip + report any that don't — don't guess ownership) - Tracker availability gate satisfied per
protocols.md(ortracker: localpreviously chosen)
Failure handling:
- If implement returns FAILED → standard Failure Handling (
protocols.md): retry up to 3 times, then escalate. - If implement is interrupted mid-batch → next invocation re-detects via the implement skill's resumability protocol (read latest
_docs/03_implementation/suite_batch_*.md). Step 3.5 itself is reentrant: on re-entry, iftodo/still has tasks, it presents the Choose again with the remaining set. - Half-applied state risk (acknowledged): if implement is interrupted between commits, the working tree is clean at the last commit boundary but the in-flight batch is lost. The user is responsible for inspecting and re-invoking. This is intentional — automated rollback of suite-level renames +
.gitmodulesedits is more dangerous than a human-driven recovery.
Idempotency: if _docs/tasks/todo/ becomes empty after this step (all tasks moved to done/), the next /autodev invocation skips Step 3.5 entirely and proceeds with normal Status → sync flow.
Step 4 — Document Sync
State-driven: reached by auto-chain from Step 3 when the status report flagged doc drift.
Action: Read and execute .cursor/skills/monorepo-document/SKILL.md with scope = components flagged by status.
The skill:
- Runs its own drift check (M7)
- Asks user to confirm scope (components it will touch)
- Applies doc edits
- Skips any component with unconfirmed mapping (M5), reports
After completion:
- If the status report ALSO flagged suite-e2e drift → auto-chain to Step 4.5 (Integration Test Sync)
- Else if the status report ALSO flagged CI drift → auto-chain to Step 5 (CICD Sync)
- Else → end cycle, report done
Step 4.5 — Integration Test Sync
State-driven: reached by auto-chain from Step 3 (when status report flagged suite-e2e drift and no doc drift) or from Step 4 (when both doc and suite-e2e drift were flagged).
Skip condition: if _docs/_repo-config.yaml has no suite_e2e: block, this step is skipped entirely — there's no harness to sync. The status report should not flag suite-e2e drift in that case; if it does, that's a status-skill bug.
Action: Read and execute .cursor/skills/monorepo-e2e/SKILL.md with scope = components flagged by status.
The skill:
- Verifies every path under
suite_e2e.*exists (binary fixtures excepted — see the skill's Phase 1) - Classifies each flagged change against the suite-e2e impact table
- Applies edits to
e2e/docker-compose.suite-e2e.yml,e2e/fixtures/init.sql,e2e/fixtures/expected_detections.jsonmetadata, ande2e/runner/tests/*.spec.tsselectors as needed - Bumps baseline
fixture_versionwith a-stalesuffix and appends a_docs/_process_leftovers/entry whenever the detection model revision changes (binary fixture cannot be regenerated automatically) - Reports synced files; does not run the suite e2e itself
After completion:
- If the status report ALSO flagged CI drift → auto-chain to Step 5 (CICD Sync)
- Else → end cycle, report done
Step 5 — CICD Sync
State-driven: reached by auto-chain from Step 3 (when status report flagged CI drift and no doc/suite-e2e drift), Step 4, or Step 4.5.
Action: Read and execute .cursor/skills/monorepo-cicd/SKILL.md with scope = components flagged by status.
After completion, end cycle. Report files updated across doc, suite-e2e, and CI sync.
Step 6 — Loop (re-entry on next invocation)
State-driven: all triggered steps completed; the meta-repo cycle has finished.
Action: Update state file to step: 3, status: not_started so that next /autodev invocation starts from Status. The meta-repo flow is cyclical — there's no terminal "done" state, because drift can appear at any time as submodules evolve.
On re-invocation:
- If config was updated externally and
confirmed_by_userflipped back tofalse→ go back to Step 2 - Otherwise → Step 3 (Status)
Explicit Onboarding Branch (user-initiated)
Onboarding is not auto-chained. Two ways to invoke:
1. During Step 3 registry-mismatch handling — if user picks option B in the registry-mismatch Choose format, launch monorepo-onboard interactively for each new component.
2. Direct user request — if the user says "onboard " during any step, pause the current step, save state, run monorepo-onboard, then resume.
After onboarding completes, the config is updated. Auto-chain back to Step 3 (Status) to catch any remaining drift the new component introduced.
Auto-Chain Rules
| Completed Step | Next Action |
|---|---|
| Discover (1) | Auto-chain → Config Review (2) |
| Config Review (2, user picked A, confirmed_by_user: true) | Auto-chain → Glossary & Architecture Vision (2.5) |
| Config Review (2, user picked B) | Session boundary — end session, await re-invocation |
| Glossary & Architecture Vision (2.5) | Auto-chain → Status (3) |
| Status (3, todo tasks present) | Auto-chain → Suite Implement (3.5) — pre-routing gate fires before drift-based routing |
| Status (3, no todo tasks, doc drift) | Auto-chain → Document Sync (4) |
| Status (3, no todo tasks, suite-e2e drift only) | Auto-chain → Integration Test Sync (4.5) |
| Status (3, no todo tasks, CI drift only) | Auto-chain → CICD Sync (5) |
| Status (3, no todo tasks, no drift) | Cycle complete — end session, await re-invocation |
| Status (3, registry mismatch) | Ask user (A: discover, B: onboard, C: continue) |
| Suite Implement (3.5, user picked A, success) | Silent re-status; auto-chain per post-implementation drift (Step 4 / 4.5 / 5 / cycle complete) |
| Suite Implement (3.5, user picked B) | Mark skipped; auto-chain per Step 3's original drift findings |
| Suite Implement (3.5, user picked C) | Session boundary — end session, await re-invocation |
| Suite Implement (3.5, FAILED ×3) | Standard Failure Handling escalation (protocols.md) |
| Document Sync (4) + suite-e2e drift pending | Auto-chain → Integration Test Sync (4.5) |
| Document Sync (4) + CI drift only pending | Auto-chain → CICD Sync (5) |
| Document Sync (4) + no further drift | Cycle complete |
| Integration Test Sync (4.5) + CI drift pending | Auto-chain → CICD Sync (5) |
| Integration Test Sync (4.5) + no CI drift | Cycle complete |
| CICD Sync (5) | Cycle complete |
Status Summary — Step List
Flow name: meta-repo. Render using the banner template in protocols.md → "Banner Template (authoritative)".
Flow-specific slot values:
<header-suffix>: empty.<current-suffix>: empty.<footer-extras>: add a single line:Config: _docs/_repo-config.yaml [confirmed_by_user: <true|false>, last_updated: <date>]
| # | Step Name | Extra state tokens (beyond the shared set) |
|---|---|---|
| 1 | Discover | — |
| 2 | Config Review | IN PROGRESS (awaiting human) |
| 2.5 | Glossary & Architecture Vision | SKIPPED (already captured) |
| 3 | Status | DONE (no drift), DONE (N drifts) |
| 3.5 | Suite Implement | DONE (N tasks), SKIPPED (no todo tasks), SKIPPED (user picked B), IN PROGRESS (batch M of ~N), IN PROGRESS (awaiting-task-review) |
| 4 | Document Sync | DONE (N docs), SKIPPED (no doc drift) |
| 4.5 | Integration Test Sync | DONE (N files), SKIPPED (no suite-e2e drift), SKIPPED (no suite_e2e config block) |
| 5 | CICD Sync | DONE (N files), SKIPPED (no CI drift) |
All rows accept the shared state tokens (DONE, IN PROGRESS, NOT STARTED, FAILED (retry N/3)); rows 2.5, 3.5, 4, 4.5, and 5 additionally accept SKIPPED.
Row rendering format:
Step 1 Discover [<state token>]
Step 2 Config Review [<state token>]
Step 2.5 Glossary & Architecture Vision [<state token>]
Step 3 Status [<state token>]
Step 3.5 Suite Implement [<state token>]
Step 4 Document Sync [<state token>]
Step 4.5 Integration Test Sync [<state token>]
Step 5 CICD Sync [<state token>]
Notes for the meta-repo flow
- Session boundaries: Step 2 (Config Review pending), Step 2.5 (one-shot glossary/vision review), and Step 3.5 (when user picks C "Pause"). Step 3.5's A/B picks do NOT cross a session boundary — they auto-chain to syncs in the same session.
- Cyclical, not terminal: no "done forever" state. Each invocation completes a drift cycle; next invocation starts fresh.
- Tracker integration scope: this flow does NOT create Jira/ADO tickets in its sync skills (Status / Document Sync / E2E / CICD). Step 3.5 (Suite Implement) IS tracker-integrated — it transitions existing tickets In Progress → In Testing per the implement skill's standard tracker handling. Suite-level tickets are authored manually by the operator (typically as children of an Epic that spans multiple components, like AZ-539); the flow doesn't auto-create them.
- Per-component vs. suite-level work:
- Tickets that touch component source code (
<component>/src/**) belong in that component's own workspace/autodevcycle. The meta-repo flow does NOT execute them. - Tickets that touch suite-root paths only (
.gitmodules,_infra/**, suitee2e/**, rootREADME.md, suite_docs/**outsidetasks/_*) are eligible for Step 3.5. - Tickets that span both (e.g., AZ-550 B11 consumer cutover, which touches
autopilot/,ui/, AND suitee2e/) are NOT executable from a single workspace by design — split the ticket so the suite-level slice can run in Step 3.5 and the component slices run in their owning workspaces.
- Tickets that touch component source code (
- Onboarding is opt-in: never auto-onboarded. User must explicitly request.
- Failure handling: uses the same retry/escalation protocol as other flows (see
protocols.md).