Skip to content

Releases: engindemirog/ai-native-engineering-workspace

v1.16 — A feature fits in a day

Choose a tag to compare

@engindemirog engindemirog released this 21 Oct 10:17

From a field project where one feature (22 acceptance criteria, four fix rounds) took over a
working day. The root cause was size, magnified by repeated full runs and a dirty e2e database.
Text only — no script changes; every rule here is Documented.

  • Size signal: the spec's self-critique recommends a split when a spec holds more than one user
    capability or more than ~8–10 criteria; keeping it as one is recorded in the spec. R-08: a new
    capability mid-work is a new spec, not a change.
  • Data counts too (testing.md, Resource hygiene rule 5; ANEW-0007 revised): every run starts
    from a known state; what a run writes never reaches the next one. Bootstrap's inventory names it.
  • A full green is evidence for its commit — run it once (Two speeds rule 6; ANEW-0009
    revised): review, verify and gates cite the existing CHECK GREEN (full, …) of the exact commit
    (handoff, or a CI run whose SHA equals HEAD) instead of re-running. Writing one test runs that
    test
    (rule 7): authoring, never evidence; repeat runs only for R-03.
  • Fix rounds are counted: fix commits carry [plan NNNN/fix-k]; the review report opens with
    Review round n · fix rounds so far: k; a fourth round is not started before R-06.

Upgrading

  • docs/testing.md: intent — Resource hygiene rule 5 (data); Two speeds rules 6 (cite, don't
    re-run, same SHA) and 7 (one test while writing it; repeats only in R-03).
  • prompts/spec.md: intent — SIZE step in the self-critique. specs/TEMPLATE.md: the same hint
    in the Acceptance criteria comment.
  • prompts/build.md: intent — rule 7 while iterating; [plan NNNN/fix-k] on fix commits, no
    fourth round before R-06. docs/git.md: the fix-commit format.
  • prompts/review.md: intent — cite an existing full green for the commit; open with the round
    count; flag R-06 after round 3. prompts/verify.md: intent — cite, don't re-run.
  • prompts/recovery/spec-change.md (R-08): intent — a new capability is a new spec.
  • prompts/bootstrap.md: intent — the inventory names data left for the next run.
  • workflows/feature-development.md, prompts/recovery/README.md, README: the matching lines.
  • docs/decisions/anew/ANEW-0007, ANEW-0009: take as they are (each gains a Revised: line).
  • .anew-version: v1.16.
  • Full diff: v1.15...v1.16

v1.15 — Prompts close their gaps

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 12:31

A review of every prompt against the roles, workflows and testing rules. Text only — no script
changes; every rule added here is Documented.

  • review.md: loads the approved plan too (the Tests dimension checks its criterion ↔ test map);
    new Plan conformance dimension — changed files outside the plan's list are findings (R-07);
    Correctness covers every User experience state and accessibility.
  • build.md: an error from the current plan step is fixed inside BUILD; R-01 starts when the error
    comes from outside the step or survives two attempts. The ramp list adds R-03, R-10 and R-09.
  • plan.md and specs/plans/TEMPLATE.md: the criterion ↔ test map has a Profile column
    (fast or full); a new test must be caught by its step's selector (testing.md, rule 4).
  • spec.md, plan.md, adr.md, review.md, verify.md: write in the docs language from
    AGENTS.md; field labels stay English.
  • spec.md: ask for a link to a fixed version of the design (or a dated export); a design that
    changes later is a spec change (R-08).
  • clarify.md: at most ~7 questions, ordered by impact; the rest wait for the self-critique.
  • verify.md: the evidence paragraph is a list; "a test that can't fail" is checked by reading
    the assert or by breaking the code in a temporary copy outside the repo, never committed.
  • bootstrap.md: the testing interview asks, for UI work, the e2e tool and who owns the
    app-under-test lifecycle.
  • R-09: the fresh session deletes the state file once it has taken over; nothing outlives it
    unless moved into the plan. R-03, R-08, R-12 end with ./scripts/check (full) green. R-05, R-06,
    R-09 and R-10 change no code (R-05's red reproduction is the point), so they carry no check exit.

Upgrading

  • Documents (intent, apply in your own words if you translated them): each bullet above is the
    intent for its file; docs/commands.md — /review reads the plan.
  • specs/plans/TEMPLATE.md: add the Profile column; existing plans need no change.
  • .anew-version: v1.15.
  • Full diff: v1.14...v1.15

v1.14 — Fast output is caught as evidence

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 09:42

From the same field report; it is also ANEW-0009's first revisit trigger.

  • scripts/doctor warns (every mode, never fails) when a shipped spec, or in CI the pull request
    description, shows CHECK GREEN (fast, …) and no CHECK GREEN (full, …). The description is
    read from the event payload ($GITHUB_EVENT_PATH), no network; it is checked when the PR is
    opened, reopened or pushed to, not on a description-only edit. An untagged conf's
    (fast = full: …) run counts as full. The rule moves from Documented to Validated.
  • R-02 (red test): many unrelated tests red at once → check the environment first (daemons,
    containers, ports); a crashed environment is not a code fault.
  • scripts/selftest covers the warning for specs and PR descriptions, and that full output, or an
    untagged --fast run, is not reported.

Upgrading

  • scripts/doctor (behavior): for each specs/done/*.md, and for $GITHUB_EVENT_PATH when it is
    a pull-request payload, warn if the text contains CHECK GREEN (fast, and not
    CHECK GREEN (full,.
  • scripts/selftest (behavior): the doctor wrapper also unsets GITHUB_EVENT_PATH; new
    doctor_pr <payload> helper; the scenarios above.
  • docs/testing.md: intent — Two speeds rule 2 names the doctor warning.
  • prompts/recovery/red-test.md: intent — environment first when many unrelated tests are red.
  • README: the "Evidence cites the full profile" row is Validated.
  • .anew-version: v1.14.
  • Full diff: v1.13...v1.14

v1.13 — Upgrades without collisions

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 09:34

From the same field report: upgrading a derived project meant guessing its base, renumbering the
template's ADRs around the project's own, and losing local script extensions to "copy".

  • .anew-version records the ANEW version a workspace is based on; scripts/doctor prints it
    (ok ANEW base version: v1.13) and warns when it is missing. In the template, scripts/selftest
    checks it matches the newest CHANGELOG entry.
  • The template's decisions move to docs/decisions/anew/ as ANEW-0001 … ANEW-0009 (each
    with a Revised: line; decisions unchanged), plus ANEW-0010 recording why. Project ADRs number
    from 0001 in docs/decisions/ with no collisions; prompts/adr.md counts only those.
  • CHANGELOG opens with "How to upgrade": base from .anew-version, behavior lists for scripts,
    one-line intents for documents, a diff link per release.
  • scripts/selftest checks usage output by its usage: prefix and exit code, not its full text,
    so a legitimate extension of a script's arguments is not reported as a difference.

Upgrading

  • .anew-version (new): one line, v1.13.
  • scripts/doctor (behavior): print ANEW base version: <first line of .anew-version> as ok;
    warn when the file is missing. Never fail on it.
  • scripts/selftest (behavior): usage assertions match usage: only; fixture copies
    .anew-version; the version scenarios above.
  • docs/decisions/: move the template decisions you have (ADR 0001–0009 as shipped by ANEW, if
    you kept them in your own range) to docs/decisions/anew/ under their ANEW-NNNN names, or take
    the folder from v1.13 and delete your copies. Your own ADRs stay where they are; one that had
    to be renumbered around a template ADR may keep its number. Add ANEW-0010.
  • docs/decisions/README.md: intent — two owners, two places; the next project number counts
    only docs/decisions/.
  • prompts/adr.md: intent — NNNN is the highest in docs/decisions/ + 1, anew/ excluded.
  • README: the docs/decisions/ row names the two places.
  • Full diff: v1.12...v1.13

v1.12 — Check tells you how long it took

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 09:26

From a field report (a two-stack project that adopted v1.7): the split between fast and full is
decided on step durations, and nothing in ANEW measured them.

  • scripts/check prints <== <step> (n s) after every step (red ones too) and the total in the
    green line: CHECK GREEN (full, 14 steps, 1080 s). date +%s, no bc; where the clock gives
    no number, times are left out and the run still counts. The ==> <step> lines and the
    CHECK GREEN (<profile>, n steps / CHECK FAILED (<profile>) at step: prefixes are unchanged.
  • docs/testing.md, Two speeds: "~a minute" is a per-step threshold, not a fast total; when fast
    grows too long, drop lint, then formatting, then unit tests. New rule 4: split a test step by a
    selector (category, trait, tag, namespace) and its inverse, never by a list — a test added
    later then still runs in one profile. New rule 5: decide on the median of at least 3 runs.
  • prompts/bootstrap.md (3d) applies rules 4 and 5 at the gate.
  • scripts/selftest checks that durations are present (never their value) and that a missing
    clock leaves them out.

Upgrading

scripts/check (behavior, for copies you extended): time each step with date +%s and print
<== <step> (n s) after it, red or green; append , <total> s inside the green line; print no
time when date +%s is not a number. Anything that parses the green line must accept the extra
field. docs/testing.md: Two speeds rule 3 (per-step threshold, removal order), new rules 4 and 5.
prompts/bootstrap.md 3d: selector split, median of 3. Full diff: v1.11...v1.12

v1.11 — Codex becomes a first-class adapter

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 08:56
  • adapters/codex/: every command as a project-level Codex skill (skills/<name>/SKILL.md, the
    same pointers as the Cursor commands), invoked as $analyze, $plan 0003, … No pointer file:
    Codex reads AGENTS.md natively. Each skill is explicit only (agents/openai.yaml:
    allow_implicit_invocation: false), so Codex never starts a gated stage by itself. Review runs
    in a fresh Codex session; specs/done/ is backed by CI. The deprecated user-level custom
    prompts (~/.codex/prompts/) are not used.
  • ./scripts/init codex installs the skills to .agents/skills/ (kept unless --force).
  • scripts/doctor: adapter parity covers Codex (adapter parity: <x> missing in codex) and fails
    on a Codex skill that is not explicit-only; .agents/skills/ counts as an installed adapter.
    scripts/selftest covers both checks.
  • README (quickstart, command sentences, a Codex column in "How strongly is each rule held?"),
    adapters/README.md and docs/commands.md list Codex next to the other tools.

Upgrading

Where Codex is used, run ./scripts/init codex and commit .agents/skills/. Template users copy
adapters/codex/ and the scripts/init, scripts/doctor and scripts/selftest changes.

v1.10 — The commands document themselves

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 08:26
  • docs/commands.md: one page for all 17 commands (5 scripts, 12 slash commands) — command map
    with the four human gates, then for each: what it does, when to use it, reads / writes, stops
    at, lite / strict, refusal (verbatim), common mistake; a quick-reference table and the two
    golden rules. It points at the files that define the rules instead of restating them; the
    recovery catalog stays in prompts/recovery/README.md.
  • README links it at the top ("New here?").
  • scripts/doctor requires docs/commands.md like any core file and, where adapters/ exists,
    fails when a command or script has no section in it
    (command reference out of date: /<x> missing from docs/commands.md). scripts/selftest proves
    the guard fires and clears.
  • No behavior changes.

Upgrading

Copy docs/commands.md, the README "New here?" line, scripts/doctor and scripts/selftest.
If you added your own commands, give each a ### `/<name>` section in docs/commands.md.

v1.9.1 — README stands on its own

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 08:09
  • README drops the "Origin" section that pointed to the course: ANEW is now its own environment,
    separate from it. No change to the core.

Upgrading

Nothing to copy.

v1.9 — The residue test is one command

Choose a tag to compare

@engindemirog engindemirog released this 19 Oct 08:03
  • scripts/residue runs the residue test (docs/testing.md, Resource hygiene): it measures processes
    and available memory, runs ./scripts/check twice (--fast for the fast profile), and names
    every survivor with its command line; memory over the tolerance (ANEW_RESIDUE_MB, 512 MB) is
    residue too. A process only counts if it is still alive at a second look. Unix-likes via ps,
    Windows (Git Bash) via PowerShell/CIM. A red check aborts it: the test needs a green check.
  • docs/testing.md, prompts/bootstrap.md and workflows/bootstrap.md name the command, for both
    profiles; docs/testing.md adds: rerun it whenever scripts/check.conf changes.
  • scripts/selftest covers it (usage, red check, --fast, a leaked process named, a waited-for
    child not reported). Its assertions look for the scenario's own marker, so a busy machine cannot
    make them flaky.

Upgrading

Copy scripts/residue (keep it executable) and scripts/selftest, then run ./scripts/residue and
./scripts/residue --fast against your scripts/check.conf.

v1.8 — ANEW proves its own scripts

Choose a tag to compare

@engindemirog engindemirog released this 16 Oct 13:49
  • scripts/selftest: 50 scenario checks that scripts/check (profiles, tags, failures, arguments,
    stdin) and scripts/doctor (every gate, --strict, immutability, twin specs, mini-specs,
    evidence hygiene, adapter parity, missing core files) behave as documented. Each scenario runs
    in a throwaway copy of the ANEW core outside the repo; a project's own specs and code are never
    copied, so it behaves the same in the template and in bootstrapped projects. CI runs it after
    doctor.
  • README catches up with v1.4–v1.7: the enforcement table gains evidence hygiene (Validated),
    resource hygiene and the UX section (Documented); --fast, evidence pointers and the selftest
    are described; the ADR range and the script count no longer go stale.
  • docs/decisions/README.md: accepted ADRs may take editorial corrections that leave the decision
    unchanged, recorded as a Revised: line. ADR 0007 records its v1.6.1 wording change that way.

Upgrading

Copy scripts/selftest (keep it executable) and add its step to your CI's doctor job
(.github/workflows/check.yml). If you changed scripts/check or scripts/doctor locally, the
selftest tells you where your copy now differs from the documented behavior.