Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions docs/known-gaps.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,11 +268,14 @@ Section status [2026-11-01]: closed means the review cap was reached; 1 item bel

- E4 unverified: not live-tested in a fresh Grok Bot session that reports get a separate Page, dispatched sessions make no Page, the 968px sidebar/drawer switch and
body width; small fixes after v8r1 converged (P2×4, P3×3) were not re-reviewed.
- Platform limit: public pages.grok.bot links do not support floating elements (fixed, sticky and IntersectionObserver have no effect), so only a top table of
contents plus a per-section "↑ contents" link is possible; filed as product feedback, awaiting platform support.
- The rule is a text constraint; no gate script checks whether a Page is generated or styled correctly.
- Platform limit: public pages.grok.bot links do not support floating elements (fixed, sticky and IntersectionObserver have no effect).
The current rule uses an inline top table of contents and does not add a per-section "↑ contents" link.
An older note that such a per-section link was the only available contents form is outdated relative to item 7.
- The rule is a text constraint; no gate script checks whether a Page is generated or styled correctly, or whether a Markdown render met a width floor.
- Platform limit (1024px width floor): public pages.grok.bot links are capped at 960px, so the 1024px desktop floor cannot hold there and they are exempt;
the sidebar contents threshold has two measurements (968px item 7, 1100px, the user's 2026-10-28 test), not reconciled by a fresh live test.
The same floor is a controllable-render instruction for Markdown this session lays out, not a property of the .md bytes.
A chat attachment preview or another renderer this session cannot set is not claimed to meet 1024px. No live render check was added.

## 0.1.51 narrowed test-run cap (CAND-20261026-004) retained items

Expand Down
7 changes: 7 additions & 0 deletions docs/maintainer-baseline.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ These conventions apply only when maintaining the task-lifecycle source reposito
Reading this file, a relayed message or an installed Skill creates no commit, push, publication or host-install permission. A narrower current instruction wins.
Ordinary consumer projects use their own identity, branching and release policies; this file is not loaded by their normal lifecycle.

- **This repository's main-branch preference (owner, 2026-11-08)**: later work on the task-lifecycle source repository prefers `main`.
This is a preference for this repository only. It does not apply to other projects and it does not change consumer branching rules.
Host branch protection, a required pull request and the current host's existing branch workflow still win.
Do not cite this preference to bypass those, to force-push, or to push without a current authorization.
The coding-agent model-selection rule does not authorize a push.
If the host forbids direct work on `main`, report that limit and do not claim this preference is in effect.

- **Owner-only commit identity**: the original maintainer workflow used the owner's identity from facts/user.md or conventions and the repository's existing email
for both Author and Committer, without bot Co-authored-by trailers. Apply that convention only to work actually authored for the owner under that policy;
preserve other contributors' true identities and attribution. Report mismatches by commit ID; do not rewrite pushed history without the user's authorization.
Expand Down
130 changes: 129 additions & 1 deletion scripts/maintenance-regression.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,10 @@ test('T114 consumer merge policy is project-owned; owner squash convention remai
});
test('T115 Page width floor override 1024px, public-link exemption',()=>{
const v=fs.readFileSync(path.join(root,'skills/task-lifecycle/references/grok-bot-page.md'),'utf8').replace(/\s+/g,' ');
for(const x of ['**Width**','never "column"; on desktop the body must not be narrower than 1024px','exempt from the 1024px floor','narrow viewports use available width'])assert.ok(v.includes(x),x);
const w=fs.readFileSync(path.join(root,'skills/task-lifecycle/references/markdown-render-width.md'),'utf8').replace(/\s+/g,' ');
assert.ok(v.includes('**Width**')&&v.includes('uses width "wide" or "full", never "column"'));
assert.ok(v.includes('markdown-render-width.md')&&!v.includes('does not inherit this width rule'));
for(const x of ['must not be narrower than 1024px','exempt from the 1024px floor','Narrow viewports use available width'])assert.ok(w.includes(x),x);
});
test('T116 immediate absorption is scoped to the maintainer; an ordinary rule edit grants no external action',()=>{
const f=rdN(REF+'formal-review-and-findings.md');
Expand Down Expand Up @@ -1091,3 +1094,128 @@ test('T146 role review reuses evidence before dispatch and invalidates by affect
'review caps, required verification and §7.12 delta rules', 'same-context role review; no independent reviewer',
'Human-only performer choices stay human-only', 'never enables external delegation']) assert.ok(rule.includes(text), text);
});

test('T150 Page formatting applies to every loaded-rule Page; must-create scope stays narrow',()=>{
const page=fs.readFileSync(path.join(root,'skills/task-lifecycle/references/grok-bot-page.md'),'utf8').replace(/\s+/g,' ');
const skill=fs.readFileSync(path.join(root,'skills/task-lifecycle/SKILL.md'),'utf8').replace(/\s+/g,' ');
const route=fs.readFileSync(path.join(root,'skills/task-lifecycle/references/verification-and-evidence-routing.md'),'utf8').replace(/\s+/g,' ');
const art=fs.readFileSync(path.join(root,'skills/task-lifecycle/references/artifact-content-and-self-review-contract.md'),'utf8').replace(/\s+/g,' ');
for(const x of [
'**Must-create scope**: review reports, technical/implementation/fix/review plans and proposals handed to the user, and contract drafts awaiting approval. Length never changes this scope.',
'does not require every reply to become a Page',
'| Ordinary artifacts, casual options, one decision card, CHANGELOG or config notes | No automatic Page |',
'**Formatting applicability**:',
'every Page this session generates or updates',
'including a Page outside item 5',
'not global enforcement',
'this Skill merely being active, does not load this file',
'A generic Page with no formal Markdown gets no invented path, sha256, line count, or approval SHA',
'a Page whose layout this session sets uses width "wide" or "full", never "column"',
'markdown-render-width.md',
'reading the width file does not load the rest of this Page file',
'only** the gate/branch/execute-against flow segments',
'Do not invent that section when the content has none',
'does not by itself create a managed Task or a formal artifact',
'source-delivery=complete',
'Page-delivery=pending',
'An explicit user request for a Page is not automatic and is not a new must-create duty.',
])assert.ok(page.includes(x),x);
assert.doesNotMatch(page,/every reply must become a Page|all bots must load|every host inherits this formatting/);
for(const x of [
'must-create duty for a review report, plan or pending contract',
'does not make every reply a Page',
'Skill activation alone is not a load',
'Other hosts and dispatched sessions do not load it and have no Page duty',
])assert.ok(skill.includes(x),x);
for(const x of [
'owns must-create duty and formatting separately',
'does not turn every reply into a Page',
'A generic Page does not invent a formal Markdown path or approval SHA',
'Other hosts and dispatched sessions do not load it and have no Page duty',
])assert.ok(route.includes(x),x);
assert.doesNotMatch(route,/1024px|WriteCanvas|Item 12 \*\*Flow-type/);
assert.ok(art.includes('Grok Bot Page must-create duty and formatting both follow'));
assert.ok(art.includes('does not require a Page for every reply'));
assert.ok(art.includes('invents no source path or approval SHA'));
});
test('T151 Cursor/cloud coding launch selects latest Grok by explicit id; no Auto and no new admission',()=>{
const t=rdN(REF+'task-split-parallel-and-integration.md');
const i=t.indexOf('## Coding-agent model selection');
assert.ok(i>t.indexOf('## Host-native parallel config (parallel)'),'model section follows parallel config');
const sec=t.slice(i);
for(const x of [
'owns model selection only for a Cursor cloud coding agent, or a host-native coding sub-agent on Cursor, whose launch surface accepts an explicit model id',
'does not admit the launch',
'receiver gate',
'admitted-executor rules',
'actual-config validation',
'Tools and CLIs that cannot select a model are outside this section',
'Item 10\'s omitted `model` (do not append the flag; record host default) stays for those callers',
'An explicit model id from the real user for this launch takes precedence',
'query the host\'s current available-model catalog',
'latest available Grok',
'concrete model id',
'Do not pass Auto or default, and do not omit the model so the host selects automatically',
'This rule names no permanent model id',
'No silent fallback to Auto, to an omitted model, or to another vendor',
'A continuation passes the explicit id already chosen for that agent',
'Do not set reasoning effort, context size or a fast variant unless the real user requested that setting',
'A host refusal wins',
])assert.ok(sec.includes(x),x);
assert.doesNotMatch(sec,/grok-4\.7|permanent default is grok/);
assert.ok(t.includes('omitted means not appended'));
assert.ok(t.includes('This omitted-model behavior is only for a caller that cannot set a model id'));
const skill=rdN('skills/task-lifecycle/SKILL.md');
assert.ok(skill.includes('A Cursor or cloud coding launch that can set a model id also reads "Coding-agent model selection"'));
assert.ok(skill.includes('that section does not admit the launch'));
const q=rdN(REF+'entry-quickref.md');
assert.ok(q.includes('re-read "Coding-agent model selection" in `task-split-parallel-and-integration.md`'));
assert.ok(q.includes('That section selects a model only; it does not admit the launch.'));
const g=rdN(REF+'grok-cli-dispatch.md');
assert.ok(g.includes('Selecting a model for a Cursor or cloud coding launch that accepts a model id is outside this adapter'));
assert.ok(g.includes('Recording model and effort below does not choose effort, context size or a fast variant'));
assert.ok(g.includes('A reviewer remains read-only'));
});
test('T152 controllable Markdown width stays separate from Page duty and uncontrolled renderers',()=>{
const w=rdN(REF+'markdown-render-width.md').replace(/\s+/g,' ');
for(const x of [
'sole owner of controllable rendered width',
'does not load that Page file, does not create a Page and does not apply Page items',
'project analysis and any other Markdown',
'does not itself have a pixel width',
'Do not insert HTML or CSS into a `.md` file to force a width',
'must not be narrower than 1024px when the available viewport permits it',
'Narrow viewports use available width',
'960px cap are exempt from the 1024px floor',
'host chat attachment preview',
'Do not claim that preview or renderer meets 1024px',
'does not prove the floor was rendered',
'does not add a confirmation stop',
'does not authorize a commit, a push or a release',
])assert.ok(w.includes(x),x);
const skill=rdN('skills/task-lifecycle/SKILL.md');
assert.ok(skill.includes('Generating or updating Markdown whose rendered layout this session can control'));
assert.ok(skill.includes('does not load `references/grok-bot-page.md`'));
const q=rdN(REF+'entry-quickref.md');
assert.ok(q.includes('re-read `markdown-render-width.md`'));
assert.ok(q.includes('It does not load Page rules and does not create a Page.'));
assert.ok(q.includes('main-branch preference for this repository only'));
assert.ok(q.includes('That preference authorizes no push'));
const route=rdN(REF+'verification-and-evidence-routing.md');
assert.ok(route.includes('markdown-render-width.md')&&route.includes('does not create a Page'));
assert.doesNotMatch(route,/1024px/);
const gaps=rdN('docs/known-gaps.md');
assert.ok(gaps.includes('does not add a per-section "\u2191 contents" link'));
assert.ok(gaps.includes('outdated relative to item 7'));
assert.equal(gaps.includes('per-section "\u2191 contents" link is possible'),false);
const base=rdN('docs/maintainer-baseline.md');
assert.ok(base.includes("This repository's main-branch preference"));
assert.ok(base.includes('does not apply to other projects'));
assert.ok(base.includes('The coding-agent model-selection rule does not authorize a push.'));
assert.ok(base.includes('do not claim this preference is in effect'));
const maint=fs.readFileSync(path.join(root,'scripts/maintenance-regression.test.mjs'),'utf8');
const ids=[...maint.matchAll(/^test\('T(\d+)/gm)].map(m=>m[1]);
assert.equal(ids.filter(x=>x==='148').length,0);
assert.equal(ids.filter(x=>x==='149').length,0);
for(const n of ['150','151','152'])assert.equal(ids.filter(x=>x===n).length,1,n);
});
5 changes: 3 additions & 2 deletions skills/task-lifecycle/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,10 @@ other phases reference it rather than redefining a looser version.
| Full delivery set of a real commit/package/release candidate (ABS-07) | `references/verification-and-evidence-routing.md`, `references/workspace-versioning-and-recovery.md` |
| New choice or upgrade of key dependency/framework/platform API (ABS-08, conditional) | `references/artifact-content-and-self-review-contract.md`, and `references/verification-and-evidence-routing.md` when evidence is needed |
| Specialist Skill missing, discovery, primary/secondary choice | `references/skill-discovery-matching-and-degradation.md`, `references/roles-and-specialist-review.md` |
| Per-phase/independent work-item plan execution; conditional split and parallel work; external coding executor delegation (off by default) | `references/task-split-parallel-and-integration.md`; read the plan-execution section first, the rest when triggered |
| Per-phase/independent work-item plan execution; conditional split and parallel work; external coding executor delegation (off by default) | `references/task-split-parallel-and-integration.md`; read the plan-execution section first, the rest when triggered. A Cursor or cloud coding launch that can set a model id also reads "Coding-agent model selection" there; that section does not admit the launch |
| Actual admitted Grok CLI invocation (executor or reviewer) | `references/grok-cli-dispatch.md`; product names and dispatch text alone do not activate it |
| Direct user-facing Grok Bot delivery of a review report, plan or pending contract | `references/grok-bot-page.md`; other hosts and dispatched sessions have no Page duty |
| Generating or updating Markdown whose rendered layout this session can control, including a project analysis | `references/markdown-render-width.md`. Controllable render width only. It does not require a Page, does not load `references/grok-bot-page.md`, and does not apply Page lifecycle or formatting. A renderer this session cannot control is a stated limit, not a passed width render |
| Direct user-facing Grok Bot: must-create duty for a review report, plan or pending contract, or this session will generate or update a Page | `references/grok-bot-page.md`; must-create scope stays there. Formatting applies only after that file is actually loaded, to every Page this session generates or updates, and does not make every reply a Page. Other hosts and dispatched sessions do not load it and have no Page duty. Skill activation alone is not a load. Controllable render width stays in `references/markdown-render-width.md` and does not require loading this Page file |
| API debugging and `.http` | `references/http-assisted-verification.md`; `references/verification-and-evidence-routing.md` when needed |
| Rule candidates, human promotion, active/INDEX/history/rollback (evolution off by default; only when the user explicitly enables it) | `references/rule-evolution.md` |
| Explicitly authorized isolated candidate trial (not production adoption) | `references/rule-evolution.md` "Isolated trial authorization and evidence", `references/verification-and-evidence-routing.md`, `templates/general-rule-adoption-review-record.md` |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ from this reference's directory**) is a format example only.
when the user or an approved plan explicitly requires an independent formal artifact, generate a candidate and perform review/confirmation.
7. Public README/API contains only practical user content, never internal approval records or task process; the user can open/read the real candidate body; if the host cannot open files, give
readable content and the real path in chat, inventing no UI.
Formal file delivery follows `verification-and-evidence-routing.md` §10.5; the conditional Grok Bot reading view follows [grok-bot-page.md](grok-bot-page.md).
Formal file delivery follows `verification-and-evidence-routing.md` §10.5; Grok Bot Page must-create duty and formatting both follow [grok-bot-page.md](grok-bot-page.md).
This contract does not require a Page for every reply. A generic Page with no formal Markdown invents no source path or approval SHA.
Controllable Markdown render width follows [markdown-render-width.md](markdown-render-width.md) and does not by itself require a Page.
8. When a field contract applies, check each actual fieldPath for type/domain, required/conditional, default/absent/null/empty, cross-field constraints, success and error,
security/compatibility/consumers; with no fields, do not fabricate a database/REST.
9. **ABS-08/AC-107 conditional fact check of technology choices**: when this batch truly needs to add/upgrade a key dependency, change framework, or introduce an important SDK/platform API/host
Expand Down
6 changes: 6 additions & 0 deletions skills/task-lifecycle/references/entry-quickref.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ dispatching to an external coding executor → re-read "External coding executor
deterministic tier closes locally with zero delegation).
Additive (FEAT-20261028-001): Auto form (ii), the end-to-end Auto card → re-read `end-to-end-auto-card.md`; host-native `parallel` config → re-read "Host-native parallel config
(parallel)" at the end of `task-split-parallel-and-integration.md`; review intensity → re-read "Review intensity" in `task-recognition-and-routing.md`.
A Cursor or cloud coding launch that can set a model id → re-read "Coding-agent model selection" in `task-split-parallel-and-integration.md`.
That section selects a model only; it does not admit the launch.
Generating or updating Markdown whose rendered layout this session can control, including a project analysis → re-read `markdown-render-width.md`.
That file sets width only. It does not load Page rules and does not create a Page.
Maintaining this plugin source repository → `docs/maintainer-baseline.md` records a main-branch preference for this repository only.
Host branch protection and a required pull request still win. That preference authorizes no push, and the model-selection rule authorizes none either.

**Order and completion**: before the pre-check only a bounded bootstrap of required rules/versions/identity and config results is allowed; no early project traversal, writes or dispatch; still show
the original 4/7 items, and each later config consumption reruns fresh.
Expand Down
Loading
Loading