For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
1Context
Alan R. Vazquez answered the alpha review questions on 2026-10-19 (GitHub issues #7 to #65, label alpha-review, all on commit a3790d3). node scripts/export-review.mjs reads 60 answers, of which 55 count. The answers sort into four groups:
| Group | Questions | Answer |
|---|---|---|
| Agree | 9 of 13 regions (4, 8, 16, 32, 64, 128 with 1 to 24 factors, 128 with 65 to 127, 256, 512), the class sentences, the additions (center points, replications, resolution only), 31 glossary entries, R23 | No change, except that the claims of the regions now apply |
| Change, with his text | Glossary generators (#33), clear_2fis (#34), effect_heredity (#36); references (#62: add Xu 2009, Ryan and Bulutoglu 2010, Mee 2009) |
Use his text |
| Change, bounds stand | Regions 1024 (#57, #59), 2048 (#58), 4096 (#60) | "MA designs only for up to 28 [32, 26] factors. The other are good designs found by Xu (2009) and Ryan and Bulutoglu (2010)." The regions already stop at 28, 32 and 26 factors |
| Not sure | Region 128 with 25 to 64 factors (#61), entries without an MA claim (#63), glossary all_2fis_clear (#46), the refused defaults (#64) |
See decisions F2 to F7 |
His "Other comments" answer (#65) proposes to tailor EXPERTA to one field of application (for example biotechnology, the food industry or manufacturing), because the readers of JQT and Quality Engineering already know FrF2. He will search for papers on applications to choose the field. This is a decision of both authors and is not part of this plan (decision F13).
Measurements made for this plan (FrF2 2.3.5, native R 4.6.1; scripts and output in replication_materials/plans/review-fixes-probes/):
all-2fis-clear.R: in entry 9-4.1 (9 factors, 32 runs) factor 9 is in no 2FI alias chain, so it has all 2FIs clear, and it is the only such factor of that design. 21 of the 327 entries whose name ends in.1have some, but not all, factors with this property, for example 7-2.1 (factors 4, 5, 7) and 8-3.1 (factors 5, 8).rank1-ties.R: the 19 entries that share rank 1 are all the catalogue entries of five sizes: 128 runs with 41, 42, 43, 44 and 50 factors. FrF2 selects the first of them (for example 41-34.1a). In each size the entries have equal distance distributions of the rows, so their word length patterns are equal at every length (MacWilliams identities).wlp-error-defaults.R: two FrF2 defaults have a stored WLP error, 21-16.1 and 22-17.1 (32 runs). The error is a split number (A6 = 1608 is stored as 160 and 8). By the computed WLP, each.1entry has less aberration than all other catalogue entries of its size (50 and 34 entries). The five other defaults with a stored WLP error are 20-8.1 to 24-12.1 in 4096 runs (the stored WLP is wrong from A13).xu2009-128-runs.R(128 runs, 25 to 39 factors): Xu (2009, Section 4) enumerates all odd 128-run designs of resolution IV, which exist only up to 40 factors. He finds that the odd designs of Block and Mee (2005) are complete, and he lists all MA and weak MA designs up to 40 factors (Table 9 of the preprint of 2007-09-28). The probe builds each of his MA designs from the printed columns. For every size from 25 to 40 factors, the FrF2.1entry has the same distance distribution, so the same word length pattern at every length. A4 to A6 also equal the printed values, which checks the transcription. A literature check found no report of a better design for these sizes. For 25 to 33 factors the MA status rests on Xu's computer enumeration only. For 1024, 2048 and 4096 runs, Xu (2009) shows MA up to 24, 23 and 24 factors, and Ryan and Bulutoglu (2010) add the sizes up to 28, 32 and 26 factors, so the sources of these regions are correct.
Goal: The app makes the MA and "good" claims that the review supports, uses the glossary texts and references that Alan R. Vazquez gave, and asks him again, on the review page, only the questions that are still open.
Architecture: The claim of a design is a new field catalogue.claim of the R report (MA, good, full_factorial or none), computed in r/ffd_report.R from the guarantee class, the size and a reviewed range for each region. The statement comes from the claim. The report version becomes 1.3.0, so stored projects rebuild with the existing rule (spec 8.1). The review page gets a list of questions that are asked again: answers filed before the question changed show as earlier answers and do not count.
Tech Stack: R 4.6.1 with FrF2 2.3.5 and DoE.base, WebR 0.6.0, Next.js 16.3.8, React 19.3.0, TypeScript 5.9.3, zod 4.6.5, vitest 4.1.11, Playwright 1.63.0. No new package.
Spec: replication_materials/plans/2026-10-14-ff-design-translator-design.md (version 7; Task 5 makes version 8), Sections 1.8, 7.7, 8.1, 9.5, 14.4, 17.1 and 19.
2Decisions
| # | Decision | Proposed by | Decided by |
|---|---|---|---|
| F1 | The MA claim applies in the 12 regions that Alan agreed to or kept (4, 8, 16, 32, 64; 128 with 1 to 24 and with 65 to 127 factors; 256, 512, 1024, 2048, 4096) and in the 128-run region with 25 to 64 factors (40 to 64 by his answer #61, 25 to 39 by F2). Statement: "Minimum aberration design from the FrF2 catalogue, entry {name}." (his answer #11). | Alan (#7 to #11, #50 to #60) | Alan |
| F2 | 128 runs with 25 to 39 factors get the MA claim now (xu2009-128-runs.R), with a check at generation time: for 25 to 40 factors, the claim needs the computed WLP of the design to equal the WLP of Xu's MA design of that size, built in R from his printed columns. If the check fails, the claim is none (fail closed). The check proves that the design has the aberration of Xu's design; the MA status of Xu's design rests on his complete enumeration. Alan is asked to confirm (F6). |
Claude | Fadel (2026-10-19: switch on if the designs can be verified when they are made) |
| F3 | The 19 entries that share rank 1 (128 runs; 41 to 44 and 50 factors) get the MA claim: they are the only entries of their sizes, Alan's answer #61 calls the 128-run catalogue designs with 40 to 64 factors MA, and their WLPs are equal (measured). | Claude | Fadel; Alan is asked to confirm (F6) |
| F4 | The unranked entries (223, names such as 29-19) and the 12 first-ranked entries outside the documented region (69-61.1 to 80-72.1, 256 runs) get the statement "Design from the FrF2 catalogue, entry {name}. FrF2 lists it as good, not necessarily minimum aberration." (his answer #11; comments #58 to #60 and #63). | Claude, from Alan's comments | Fadel; Alan is asked to confirm (F6) |
| F5 | 21-16.1 and 22-17.1 get the MA claim (32-run region confirmed; measured as best by the computed WLP among all entries of their size). The other 87 entries with a stored WLP error, the 7 broken entries and the ranked entries after the first keep the statement that names only the entry. | Claude | Fadel; Alan is asked to confirm (F6) |
| F6 | Four questions are asked again: the 128-run region (context: F1, F2 and the evidence), the entries without an MA claim (new title "Claims for the other catalogue entries", context: F3 to F5 as four numbered claims), and the glossary entries all_2fis_clear and guarantee (new texts, F9). An answer filed before a question changed shows under it as an earlier answer and does not count. The rule uses the issue number: the question counts only answers in issues after #65. |
Claude | Fadel |
| F7 | The refusal of 26-17.1 and 27-18.1 stays. Alan is revising the FrF2 findings (#64); the question stays as it is and is not asked again. | Alan (#64) | Alan |
| F8 | Glossary: the texts of generators, clear_2fis and effect_heredity use Alan's words (#33, #34, #36). Spec Section 1.8 takes the new effect heredity text, as it took his earlier text (R20). The 33 entries that he agreed to or wrote get reviewed_by: "Alan R. Vazquez" and reviewed_on: "2026-10-19". |
Alan | Alan |
| F9 | Glossary: all_2fis_clear gets a text from the measurement (9-4.1 is an example, not the only design), and guarantee describes the three statements of F1 and F4. Both stay "Draft, not yet reviewed" until Alan answers again (F6). |
Claude | Fadel |
| F10 | References: add the three works of #62 to the glossary references (Crossref-checked on 2026-10-19), cite them in the guarantee entry, and add Mee (2009) to spec Section 19. |
Alan (#62) | Alan |
| F11 | report_version becomes 1.3.0, because the statement and the new claim field change. Stored and imported projects of 1.2.0 rebuild with the existing rule (spec 8.1). |
Claude | Fadel |
| F12 | The known issues on the review page say that two glossary entries are drafts and that four questions are asked again. | Claude | Fadel |
| F13 | A new open item in spec 17.1: the field of application (Alan's comment #65), owners both authors, needed before the Milestone 4 test set and before the paper draft. The answers stay out of the public repository (spec 14.4). | Alan (#65) | Fadel and Alan |
| F14 | The scope of the paper (spec 17.1 row "The scope of the paper"): the paper covers the tool up to and including the design families of DoE.wrapper (Phase 4) and their benchmarks. The aim: a practitioner writes a short text with the factors and the constraints, and EXPERTA leads from the choice of a design, or of a sequence of designs in sequential experimentation, to the analysis. The row is answered; the order of the work after this plan is planned again in a separate design. | Fadel | Fadel (2026-10-19) |
Exact texts used by the tasks:
- Claim statements (F1, F4, and unchanged ones):
MA→ "Minimum aberration design from the FrF2 catalogue, entry {name}.";good→ "Design from the FrF2 catalogue, entry {name}. FrF2 lists it as good, not necessarily minimum aberration.";full_factorial→ "Full factorial design ({n} runs).";nonewith an entry → "Design from the FrF2 catalogue, entry {name}.";nonewithout an entry → "Design not from the FrF2 catalogue." - Glossary
generators: replace "equal to the product of some base factor columns" with "equal to the element-wise product of some base factor columns". Nothing else changes. - Glossary
clear_2fis: replace "The definition comes from FrF2 and does not take interactions of three or more factors into account." with "The definition comes from FrF2 and does not take interactions of three or more factors into account, assuming the principle of hierarchy. This principle states that main effects and two-factor interactions are more important than higher-order effects." - Glossary
effect_heredity(and spec 1.8): "Strong heredity: an interaction is more likely to be active if the main effects of all its factors are active. Weak heredity: an interaction is more likely to be active if the main effect of one of its factors is active." - Glossary
all_2fis_clear: "A factor has all 2FIs clear if every 2FI that contains the factor is clear. For example, in the FrF2 design for 9 factors in 32 runs (entry 9-4.1), no 2FI that contains factor 9 is aliased with a main effect or with another 2FI. So factor 9 has this property, and the other 8 factors do not. Other designs also have such factors, for example factors 4, 5 and 7 of entry 7-2.1 and factors 5 and 8 of entry 8-3.1 (both 32 runs). The factor order in step 2 sets which named factors have this property. In a design of resolution V or higher, and in a full factorial, every factor has this property." - Glossary
guarantee: "A minimum aberration (MA) design minimizes (A_3) first, then (A_4), and so on, among the designs of the same size. FrF2 selects each fractional design from its catalogue. The statement gives what a reviewed source supports for the selected entry. An MA entry gets "Minimum aberration design from the FrF2 catalogue, entry 7-3.1." A good design gets "Design from the FrF2 catalogue, entry 29-19. FrF2 lists it as good, not necessarily minimum aberration." Other entries get only the entry name. The statement also holds with center points, with replications and for a request that gives only a resolution." Reference: "Wu and Hamada (2021), Chapter 5; Groemping (2014); Xu (2009); Ryan and Bulutoglu (2010); Mee (2009)". - References (glossary and spec 19):
- "Mee, R. W. (2009). A comprehensive guide to factorial two-level experimentation. Springer." https://doi.org/10.1007/b105081
- "Ryan, K. J., and Bulutoglu, D. A. (2010). Minimum aberration fractional factorial designs with large N. Technometrics, 52(2), 250-255." https://doi.org/10.1198/TECH.2010.08020
- "Xu, H. (2009). Algorithmic construction of efficient fractional factorial designs with large run sizes. Technometrics, 51(3), 262-277." https://doi.org/10.1198/TECH.2009.07120
- Review page, region question asked again (
guarantee.region.128.25-64), context paragraphs: "Your answer of 2026-10-19 confirms 40 to 64 factors." / "For 25 to 39 factors, Xu (2009, Section 4) enumerates all odd 128-run designs of resolution IV, which exist only up to 40 factors, and finds that the odd designs of Block and Mee (2005) are complete. His table gives all MA and weak MA designs up to 40 factors. For each size from 25 to 40 factors, the first-ranked FrF2 entry has the same word length pattern at every length as the MA design in his table." / "The tool now makes the MA claim for 25 to 64 factors. For 25 to 40 factors, it also checks each design when it makes it: the word length pattern of the design must equal the pattern of Xu's MA design of that size, which the tool builds from his printed columns. If the check fails, the statement names only the entry." Question: "Do you agree with the MA claim for 25 to 39 factors in 128 runs?" - Review page,
guarantee.no-claim, title "Claims for the other catalogue entries", context paragraphs: "After your answers, the tool makes these four claims." / "1. The 19 entries that share rank 1 (128 runs with 41, 42, 43, 44 and 50 factors, names such as 41-34.1a) get the MA statement. They are the only catalogue entries of their size. Your answer calls the 128-run designs with 40 to 64 factors MA. The entries of each size have equal word length patterns at every length, computed from the design matrix." / "2. The entries without a running number (for example 29-19 in 1024 runs) and the 12 entries 69-61.1 to 80-72.1 in 256 runs get the statement for good designs." / "3. 21-16.1 and 22-17.1 (32 runs) get the MA statement. Their stored word length pattern is wrong only because one number is split in two (1608 is stored as 160 and 8). By the computed pattern, each has less aberration than every other catalogue entry of its size." / "4. The 4096-run entries 20-8.1 to 24-12.1 get only the entry name. Their stored pattern is wrong from (A_{13}), and the catalogue does not list every 4096-run design." Question: "Do you agree with these four claims? If not, give the number of the claim in the comment." - Review page, earlier answer line: "Earlier answer, before this question changed: {choice label} ({date}, {name})."
- Review page, intro sentence after the existing one: "Four questions are asked again after the answers of 2026-10-19. An earlier answer shows under each of them and does not count."
- Known issues (replaces the glossary item): 'Two glossary entries, "Guarantee statement" and "Factors with all 2FIs clear", show "Draft, not yet reviewed" until they are answered again.'
3Global Constraints
- Branch. Work on
review-fixes, made fromproject-pages(head 417faf4), becausereplication_materials/project/roadmap.jsonand the project site exist only there. Its pull request tomainfollows the merge ofproject-pages. - No package changes. Implementers do not run
npm installornpm ci(Dropbox).npm run setup:runtimesis allowed: it copiesr/into the git-ignoredpublic/r/. - Secrets and outside contact. Never read
.env. Subagents make no network call to Vercel, Upstash, GitHub or an LLM provider. The secret scan runs only asnode scripts/secret-scan.mjs --env <a made-up file>. - R. Native R is
C:/Program Files/R/R-4.6.1/bin/Rscript.exe(scripts/lib/rscript.mjs). Never pass several statements in oneRscript -e; run a script file. - Texts. The texts of this plan are exact. The other glossary entries, the R23 text and the other question texts do not change. About 80% ASD-STE100, plain academic tone.
- Generated files.
data/guarantee-table.jsonanddata/catalogue-summary.jsoncome only fromscripts/build-catalogue.R;data/glossary.jsononly fromnode scripts/build-glossary.mjs. Never edit them by hand. - Tests. All in
replication_materials/tests/. Test first.npm run check -- --fastafter each task;npm run checkafter Tasks 2, 4 and 5. - Commits. One or more per task, each ending with the attribution lines of the session (
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>and theClaude-Session:line), whatever model runs the task.
4Review Focus
- The boundaries of the 128-run regions and of the reference check: 24, 25, 40, 41, 64 and 65 factors all give MA, with basis
region,region_and_reference_wlp(25 and 40),region_and_equal_wlp_tie(41) andregion; a design of 30 factors whose WLP differs from Xu's gives none. Test in Task 1. - A design with center points or replications, and a request with only a resolution: the claim of the selected entry stays (Alan's answer #49). Test in Task 1.
- A stored or imported project with a report of version 1.2.0: it rebuilds to 1.3.0 and shows the new statement; when the rebuilt run sheet differs, the existing rule applies unchanged. Test in Task 2.
- An answer filed before a question was asked again, and one after it: only the later one counts, on the page, in the server read-back and in the CSV export; "Other comments" keeps every answer. Test in Task 4.
- A tie entry or an errata entry selected by a request: the report of 41 factors in 128 runs and of 21 factors in 32 runs passes all post-checks and shows the MA statement. Test in Task 1.
5Task 1: Claims in the R report and the guarantee table
Files:
- Modify:
r/ffd_report.R(the regions table,ffd_guarantee_claim(),ffd_guarantee_statement(), thecataloguepart of the report,FFD_REPORT_VERSION),scripts/build-catalogue.R,r/README.md - Rebuild:
data/guarantee-table.json,data/catalogue-summary.json - Test:
replication_materials/tests/r/test-guarantee.R,replication_materials/tests/r/test-report.R, createreplication_materials/tests/r/test-guarantee-evidence.R
Interfaces:
- Produces:
FFD_REPORT_VERSION <- "1.3.0";FFD_MA_REGIONSgainsreviewed_minandreviewed_max(the full range of each of the 13 regions; a later review can narrow one);FFD_ERRATA_MA <- c("21-16.1", "22-17.1");FFD_XU2009_128, a named list"25"to"40"of the added columns of Xu's MA designs, copied fromreplication_materials/plans/review-fixes-probes/xu2009-128-runs.Rwith a comment that names the source (Table 9 of the preprint of 2007-09-28);ffd_reference_wlp(nruns, nfac)builds that design (independent columns 1, 2, 4, ..., 64 in Yates order) and returns its WLP from the same WLP function as the report (spec 7.6), orNULLoutside 128 runs with 25 to 40 factors;ffd_guarantee_claim(class, entry_name, nruns, nfac, wlp)returnslist(claim, basis), withclaimone of"MA","good","full_factorial","none"andbasisone of"full_factorial","region","region_and_reference_wlp","reference_wlp_differs","region_and_equal_wlp_tie","errata_verified","frf2_good","none";ffd_guarantee_statement(claim, entry_name, nruns); the report'scataloguegetsclaimandclaim_basis(strings, unboxed).guarantee-table.json: top-levelreviewbecomes{ status: "partial", reviewer: "Alan R. Vazquez", reviewed_on: "2026-10-19", answers: "GitHub issues #7 to #65 (label alpha-review), commit a3790d3" }, each region getsreviewed_minandreviewed_max, and each entry getsclaimandclaim_basis.build-catalogue.Rcomputes the WLP only for the entries that need the reference check.
6Task 2: The app side of report 1.3.0
Files:
- Modify:
lib/report/types.ts(REPORT_VERSION = "1.3.0",catalogue.claim: z.enum(["MA", "good", "full_factorial", "none"]),catalogue.claim_basis: z.string()), the report fixtures inreplication_materials/tests/fixtures/reports/(made again withreplication_materials/tests/fixtures/make-report-fixtures.R) andreplication_materials/tests/fixtures/large-report.ts - Test: every test that pins the report version "1.2.0" (on 2026-10-19:
records.spec.ts:41,43,worker.spec.ts:14,engine-client.test.ts:7,rebuild.test.ts:7-8,report-html.test.ts:108,projects.test.ts:155,exports-xlsx.test.ts:63; search again withgrep -rn '1\.2\.0' replication_materials/tests), plusreport-types.test.tsanddesign.spec.ts:27
Interfaces:
- Consumes: the R report of Task 1.
- Produces:
report.catalogue.claimandreport.catalogue.claim_basisfor Phase 2 and the benchmarks.
7Task 3: Glossary texts, review dates and references
Files:
- Modify:
content/glossary.json,lib/review/known-issues.ts - Rebuild:
data/glossary.json(node scripts/build-glossary.mjs) - Test:
replication_materials/tests/unit/glossary.test.ts,replication_materials/tests/unit/review/known-issues.test.ts
Interfaces:
- Produces: the five texts and three references of the "Exact texts" list;
reviewed_by/reviewed_onon 33 entries;all_2fis_clearandguaranteekeepnull.
8Task 4: Questions asked again on the review page
Files:
- Create:
data/review-asked-again.json({ "after": 65, "questions": ["guarantee.region.128.25-64", "guarantee.no-claim", "glossary.all_2fis_clear", "glossary.guarantee"] }) - Modify:
lib/review/questions.ts(new contexts, title and question of F6),lib/review/answer.ts(latestAnswers),components/review/QuestionCard.tsx,components/review/ReviewPage.tsx(intro sentence; progress and "Show only questions without an answer" use the counted answers),scripts/export-review.mjs(thecountedcolumn reads the same JSON) - Test:
replication_materials/tests/unit/review/questions.test.ts,answer.test.ts,export.test.ts,replication_materials/tests/e2e/review.spec.ts
Interfaces:
- Produces:
StoredAnswergainsearlier: boolean;latestAnswersreturns for a question that is asked again the newest answer with an issue number aboveafter(not earlier), followed by the newest answer at or below it (earlier: true), and only these two; a question with only earlier answers has no counted answer.answeredIds(answers)(exported) gives the ids with a counted answer. "Other comments" keeps every answer.
9Task 5: Specification version 8 and the records
Files:
- Modify:
replication_materials/plans/2026-10-14-ff-design-translator-design.md(Version row; Section 1.8 heredity text; Section 7.7: the claims, the reviewed ranges, the statements and the review outcome of F1 to F7; Section 8.1: report 1.3.0; Section 9.5: 33 reviewed entries; Section 14.4: the questions asked again; Section 17.1: the guarantee and glossary rows say what is done and what is asked again, the R23 and references rows are done, a new row for F13, the row "The scope of the paper" is answered by F14, the refused defaults wait for Alan's revision of the FrF2 findings, and Section 7.7 describes the reference check of F2; Section 19: Mee (2009), and the DOIs of Xu (2009) and Ryan and Bulutoglu (2010)),replication_materials/process/process.json(event e34),replication_materials/project/roadmap.json(milestonereview: statenow, documents, blockers),README.md(Status, one sentence) - Rebuild:
replication_materials/plans/spec-page/(node scripts/build-spec-page.mjs), the plan pagereplication_materials/plans/review-fixes-plan-page/ - Test: the existing record tests (
npx vitest run --project unit replication_materials/tests/unit/project-site/) and the spec page test
10After the plan (needs approval for each step)
- Merge of
project-pages(its own pull request; the app does not change), then the pull request ofreview-fixestomain, merge, deployment to production. Checks on https://expertadoe.app: step 3 of a 7-factor 16-run design shows the MA sentence;site.specwithFFD_EXPECT_CSP=1;GET /api/reviewwithout the key gives 401. - Close the issues whose answer the app now applies, with a link to the pull request. The issues of the four questions asked again and of the refused defaults stay open. A closed issue still counts on the review page (spec 14.4).
- Fadel tells Alan once that four questions are asked again and that his texts are in the app (one message, as agreed).
- The switch-on of the project pages (its own plan checkpoint), then Milestone 4.