v1.91.7.0 feat: add functional QA and pre-publication docs checks (#2983)

* feat: add surface-aware exploratory QA and ship documentation gates

* test: preserve delegated QA setup authority after main integration

* fix(qa): clarify exploration order and preserve report artifacts

* test(qa): follow the shared setup reference directly

* refactor(ship): make verification and recovery routes explicit

* test(ship): align evidence and review guards with explicit routes

* fix(workflows): clarify ship recovery and functional QA evidence

* fix(workflows): clarify approval recovery and full QA coverage

* refactor(workflows): order review transactions and clarify ship state

* fix(ship): clarify final verification and fail closed at publication

* fix(evals): attribute native atomic documentation writes

* fix(ship): clarify recovery and documentation lifecycle guidance

* fix(test): preserve observed native placeholder styling in CI

* fix(codex): report watchdog timeouts without a process-exit race

* Checkpoint functional QA implementation and workflow validation repairs

* Fix documentation and shared-review fixture contracts

* docs: clarify judge reuse and evaluation supervision

* test: align review evidence and selected case contracts

* test: verify append-only documentation checkpoints and recovery

* fix: qualify QA workflows and CI validation repairs

* fix: launch shared-libs fixture scripts on Windows

* fix: qualify QA deadlines, fixture isolation, and shard cleanup

* fix: preserve qualified QA and cancellation repairs

* fix: enforce functional fixture authority and share strict event decoding

* fix: retain free-test evidence and explain recovery

* fix: reject malformed native evidence after decoder consolidation

* test: use reliable capture for telemetry privacy filters

* test: refresh measured quick coverage and document validation costs

* Fix native fixture receipts and preserve VM validation evidence

* Align negative judge controls with upstream clarity policy

* Fix report-only QA preparation and public evidence handling

* Clarify QA-only preparation and current-report preservation

* Stream Ship quality judgments with an explicit 64k response contract

* Validate compact judge reasoning locally with supported wire schema

* Align functional QA fixture instructions with evidence acceptance

* Bind native browser diagnostics to execution evidence and align review verdicts

* Preserve native diagnostic line boundaries

* Serialize functional QA evidence from native captures

* Keep large QA evidence fixture payload out of Windows argv
This commit is contained in:
Garry Tan authored and GitHub committed 2026-09-29 06:07:35 -07:00
1 parent 65bfb0ce49
commit dcaea52800
333 files changed
+41755 -7357

No files matched your search

+6 -5
View File
@@ -151,7 +151,7 @@ function splitFrontmatter(raw: string, file: string): { frontmatter: string; bod
* Standalone generated STOP-Read blocks between horizontal rules replace
* entire carved steps and end the preceding H2. Nested pointers stay inside it.
*/
function scanH2Sections(bodyLines: string[]): H2Section[] {
function scanH2Sections(bodyLines: string[], stopAtH1 = false): H2Section[] {
const sections: H2Section[] = [];
let fence: { ch: string; len: number } | null = null;
@@ -170,6 +170,7 @@ function scanH2Sections(bodyLines: string[]): H2Section[] {
}
if (!fence) {
const heading = line.startsWith('## ');
const title = stopAtH1 && /^ {0,3}#(?:[ \t]|$)/.test(line);
let carvedStep = /^> \*\*STOP\.\*\* Before .+, Read `[^`]+\/sections\/[^`]+\.md` and execute it$/.test(line)
&& bodyLines[i + 1] === '> in full. Do not work from memory — that section is the source of truth for this step.';
if (carvedStep) {
@@ -179,7 +180,7 @@ function scanH2Sections(bodyLines: string[]): H2Section[] {
while (following < bodyLines.length && !bodyLines[following].trim()) following++;
carvedStep = bodyLines[preceding] === '---' && bodyLines[following] === '---';
}
if (heading || carvedStep) {
if (heading || title || carvedStep) {
const previous = sections.at(-1);
if (previous) previous.end = Math.min(previous.end, i);
if (heading) sections.push({ heading: line.slice(3).trim(), start: i, end: bodyLines.length });
@@ -189,7 +190,7 @@ function scanH2Sections(bodyLines: string[]): H2Section[] {
return sections;
}
function loadSkill(skillDirOrFile: string): {
function loadSkill(skillDirOrFile: string, stopAtH1 = false): {
file: string;
frontmatter: string;
bodyLines: string[];
@@ -198,7 +199,7 @@ function loadSkill(skillDirOrFile: string): {
const file = resolveSkillMd(skillDirOrFile);
const raw = fs.readFileSync(file, 'utf-8');
const { frontmatter, bodyLines } = splitFrontmatter(raw, file);
return { file, frontmatter, bodyLines, sections: scanH2Sections(bodyLines) };
return { file, frontmatter, bodyLines, sections: scanH2Sections(bodyLines, stopAtH1) };
}
function findSection(sections: H2Section[], name: string, file: string): H2Section {
@@ -240,7 +241,7 @@ export function extractSkillSections(skillDir: string, sections: string[]): stri
* ~780-line shared generated preamble and nothing else.
*/
export function extractSkillBody(skillDir: string): string {
const { file, frontmatter, bodyLines, sections: all } = loadSkill(skillDir);
const { file, frontmatter, bodyLines, sections: all } = loadSkill(skillDir, true);
const boundary = (names: string[]): H2Section => {
const matches = all.filter(section => names.includes(section.heading));
const label = names.map(name => `"## ${name}"`).join(' or ');