/** * Entry point of the implement-feature algorithm (see algorithm.md). * * The `tddMode` flag selects between two separately-written variants: * - implement-feature-tdd.ts — test-first at every layer: write the * test, assert it FAILS, implement, assert it PASSES. The acceptance * test opens each slice by failing for the right reason. * - implement-feature-basic.ts — tests are written in the same step as * the feature code and only ever asserted green; the acceptance test * is authored as specification and first executed at hand-off. * * Both variants share the roles container (ImplementFeatureDeps) and the * mode-independent machinery in shared.ts. */ import type { ImplementFeatureDeps } from "./shared.js"; import type { TddModeOverrides } from "./types.js"; export type { ImplementFeatureDeps } from "./shared.js"; export interface ImplementFeatureOptions { /** * true → strict test-first (red before green, ATDD red-check). * false → tests written alongside the code, asserted green only. */ tddMode: boolean; /** * Optional per-participant exceptions to tddMode, keyed by client * platform or "backend". An override swaps only that participant's * inner feature loop; the outer discipline (red-check or not) stays * with the chosen variant. Example: { tddMode: true, * tddModeOverrides: { "mobile-app": false } } keeps strict test-first * everywhere except the mobile app, whose test executions are * expensive. */ tddModeOverrides?: TddModeOverrides; extraInstructions?: string; /** * Run the mobile smoke phase (release build on the device box + Maestro * against the real backend). DEFAULT false: smoke is the slowest, flakiest * phase (~5 min per mobile slice), so dev iterations skip it and rely on the * fast local checks (units, repo-equivalence, fake-vs-real contract, e2e vs * the fake). Enable it (CLI --smoke) for a final full pass before shipping — * smoke is the only phase that catches release-binary-against-real-backend * bugs, so a feature is not truly done until one run has passed WITH it. */ runSmoke?: boolean; /** * REQUIRED: path to the example project — a repository with the same * architecture whose code serves as the worked example for every kind * of step. The run fails without it. When working on the boilerplate * itself, pass the boilerplate's own root; a client project passes its * copy of the boilerplate. */ examplePath: string; } export declare function implementFeature(deps: ImplementFeatureDeps, featureFilePath: string, options: ImplementFeatureOptions): Promise; /** * The example path must be an absolute path to an existing directory — * the run fails immediately otherwise, before any step executes. * (Shared with the bootstrap algorithm, which validates the same input.) */ export declare function validatedExamplePath(examplePath: string): string;