Skip to content

QEP-6: Project Tracker Structure and Order (Draft) - #18

Draft
quantecon-services wants to merge 4 commits into
mainfrom
claude/github-issues-task-ordering-9uj7wa
Draft

QEP-6: Project Tracker Structure and Order (Draft)#18
quantecon-services wants to merge 4 commits into
mainfrom
claude/github-issues-task-ordering-9uj7wa

Conversation

@quantecon-services

Copy link
Copy Markdown
Collaborator

Adds QEP-6: Project Tracker Structure and Order as a Draft — the one-page unit spec scoped by the 2026-08-23 ruling on the discussion issue, extended with the ordering question that arrived from the field (QuantEcon/textstrata#8, QuantEcon/skills#55) and answered on that thread.

What it decides

  • The unit: a Project is one tracker issue carrying the native org Project issue type (a type, not a label — QEP-2 untouched; resolves QEP-2 field report: no type label fits plan/tracking issues #11); work items are native sub-issues, progress on direct children only, never body checkboxes (unmeasured ≠ 0%).
  • Order is positional: the sub-issue list is the plan's order — top open item = next, completed items keep their place, phases contiguous, new items placed on arrival. Re-ordering moves items (drag or the reprioritize API) and never renames them; sequence never appears in issue titles or milestone names.
  • Constraints are dependencies: a real sequencing constraint is a native blocked-by edge (optional; a constraint, not a presentation order). Phase gates stay in the body.
  • Phases are milestones (optional): descriptive names only — a milestone is referenced, not copied, so a phase rename is one propagating edit; cross-repo work items fall back to the body's phase table.
  • One machine-read body element: the status stamp (## Where we stand (verified YYYY-MM-DD) canonical; banner fallback). The stamp section sits at the top and may open with a single Next: resume line — the body's only "what's next" claim; the list is the authority if they disagree.
  • The no-mirror body: goal, narrative, phase intents/exit criteria, gates, rationale, scope boundaries — never rosters, checkbox work lists, milestone→issue tables, hand-written progress, or dependency prose. Informative skeleton in Appendix A.
  • Scope: the programme layer is outside; genres/ledgers/succession stay in the qe skills, which cite this QEP.

Points where input is most useful

  1. The plan-order semantics (top = next; completed items keep their place) vs any appetite for queue semantics.
  2. The single Next: resume line — right affordance, right home?
  3. Whether the phase table + gates belong in the normative body section or should move wholly to Appendix A.
  4. The Adoption obligations on the dashboard side (child order published as list order — currently its contract re-sorts by issue number; the amendment is a one-row change plus a sort removal, references are on the discussion issue and 404 for non-members).

Process

Opened as a draft, consistent with the 2026-08-23 ruling that the spec is field-tested in Draft: the conform tooling (QuantEcon/skills#49) brings registered trackers into the layout and the collector reports compliance nightly. The QEP-1 comment window and decision deadline will be set after the collector's first month of data lands (late September 2026), so the decision is made on evidence. Note the ordering half cannot be observed until the child-order amendment ships — the collector currently re-sorts children, which is itself part of the motivation.

qep-checks parity: new QEP, unversioned (implicitly v0), README index row added as standard / Draft / ; both check scripts pass locally.

🤖 Generated with Claude Code

https://claude.ai/code/session_013WNYd4EW71564zVcW81yx7


Generated by Claude Code

Adds QEP-6 as a Draft: the project-tracking unit (one tracker issue,
Project issue type, native sub-issues one level down), positional order
with plan semantics, dependencies for real constraints, descriptive
phase milestones, the fixed status stamp, and the body's no-mirror
discipline with a single Next: resume line. Adds the README index row
(standard / Draft / –).

Discussion: #15

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013WNYd4EW71564zVcW81yx7
Folds in the twelve amendments consolidated on the field report thread
(see #19) plus two edits from its producer-tooling finding:

- Scope the standard to GitHub.com (s7)
- Ban purely numeric milestone names, verified live (s4)
- Membership criterion: closing a work item advances the definition of
  done; unparented issues and unparented trackers are normal (s1)
- Direct children homogeneous in kind; progress is a snapshot, not a
  time series (s1)
- Dropped items leave the sub-issue list - percent_completed counts
  not_planned closures as completed (s2)
- Gates: mostly phase-level in practice; a whole-project gate also
  carries the tracker-to-tracker dependency edge (verified live on a
  throwaway pair); stated once, in the project that waits (s3)
- Parked-ness is derived from open blockers, never carried (s3)
- Stamp refresh is a read-modify-write with a lossless read; sanitising
  surfaces get append-only treatment (s5)
- Named replacements for the body bans; Related work section (s6)
- Markdown template plus post-creation type read-back (Adoption 1)
- Re-parenting guard on the conform tooling (Adoption 2)
- QEP-6 authoritative over the dashboard contract during handover
  (Adoption 3)
- Drop "untyped = untriaged" as a load-bearing justification (s1)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mmcky

mmcky commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Applied the field-test amendment set from #19 (the consolidated 12-amendment checklist in its final comment), plus the two edits from its producer-tooling finding, in commit 1a0f063. The four review calls landed as:

Gates (amendment 10 §1) — the softened, granularity-first form: most cross-project gates are phase-level and stay in the body; a whole-project gate carries the tracker-to-tracker dependency edge, stated once in the body of the project that waits. The edge mechanism is now verified live rather than inferred (see the closing results on #20): an edge between two sub-issue-carrying tracker issues is accepted, reads back on REST blockedBy and GraphQL blockedBy/blocking, and the UI timeline records it — so the whole-project case keeps must.

Stamp concurrency (amendment 7) — the read half is specified as read-from-a-source-returning-surface (the REST endpoint returns raw markdown) rather than an unactionable byte-for-byte round-trip check; where only a sanitising surface is available the body is append-only and corrections go to comments.

"untyped = untriaged" — dropped from §1 as a load-bearing justification for type-over-label; the Motivation's audit observation stands as an observation.

Related work — bound relaxed to: entries name projects, never work items, but item numbers may appear as the specifics of a project-level relationship.

Also in: amendment 2 upgraded from source-derived to executed (gh issue list --milestone "2026" fails with no milestone found with number '2026' while a descriptive name resolves fine), the §6 named-replacements paragraph, and the Adoption-3 sentence making this QEP authoritative over the dashboard's tracker contract wherever they disagree during the handover gap.

Per process: Draft and unmerged, so no version field; both check scripts pass.

…s on labels

Types carry structural role (Project / Task / Decision, each with its own
meaning of "closed"); QEP-2 labels carry content, and the axes compose.
Adoption gains the one-time reversible reshape of the org type set
(Bug/Feature disabled, Task re-described, Decision created).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mmcky

mmcky commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

e61b1da adds §2 Issue types, settling the type/label question from the tracker discussion: native issue types carry structural role (what kind of object an issue is in the tracking system), QEP-2 labels carry content at triage, and the axes compose — a work item whose content is a bug is Task + bug, never a Bug type.

The set is three roles, each admitted by having its own meaning of "closed": Project (definition of done met), Task (work shipped), Decision (choice recorded). Decision composes with §4's dependency mechanics so "parked on a decision" is derivable, and the §4 gate-as-decision sentence now names the type. Hierarchy level is never encoded in type — a programme tracker is still a Project.

Adoption gains a one-time org-level precondition: reshape the type set via four reversible API calls — Bug/Feature disabled, not deleted (assignments stay latent; one call undoes it), Task re-described, Decision created — so it ships at field-test start rather than acceptance. Alternatives records the rejection of content-classifying types. Sections 2–7 renumbered to 3–8; both check scripts pass.

… not a tier

Records the outcome of the #24 discussion in one scope sentence: the
grammar has two normative tiers and no third; a programme is a named
collection of projects maintained by the projects registry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

QEP-2 field report: no type label fits plan/tracking issues

3 participants