Commit Graph
9 Commits
Author SHA1 Message Date
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c568bac43e docs(neckbeard): require cold-reader self-contained issue bodies at the change-contract gate
Issue/ticket bodies emitted from a delivery run must be written for a cold
reader: a contributor with none of the session context and no access to the
agent's local artifacts. Encode this at the change-contract layer so any run
that emits tracker artifacts inherits it.

- templates/change-contract.md: new "Issue/ticket body (cold-reader
  requirement)" section listing the five requirements (background naming the
  investigation, complete inline evidence with file:line refs, reproduction
  commands runnable by a stranger, acceptance-criteria checkboxes, no
  agent-local paths or private-artifact references), plus a header-note
  pointer with the litmus test.
- references/journey.md: journey-level statement of the requirement plus
  pointers at phase 1 (intake output row) and phase 5 (verification-planning
  output row) where tracker artifacts are emitted.
- evals/evals.json: add case cold-reader-issue-body-gate covering a body draft
  that references off-repo artifacts ("artifact pyramid", local /tmp ledger,
  detail available on request) and must be rejected/rewritten by the gate.

Closes #385

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 01:02:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1cd5e19620 docs(neckbeard): require requester-outcome traceability at gate 3
Implements issue #378 (Finding F4 of the journey SDLC validation brief):
separate validation from verification in the change-request journey.

Gate 3 now requires that at least one SPEC.md acceptance criterion traces
to the requester's stated outcome/problem restated from primary evidence
in phase 2 - verification proves the build matches the spec; this
criterion proves it solves the requester's actual problem (15288/12207
validation vs. verification discipline).

- references/stages.md: authoritative new Gate 3 bullet (single source
  of truth for gate definitions)
- references/journey.md: phase 4 Output and Gate rows aligned, deferring
  to stages.md; phase-continuity and gate summary unchanged
- templates/change-contract.md: acceptance-criteria guidance requires a
  criterion tracing to the Problem section
- templates/delivery-packet.md: acceptance-criteria mapping field asks
  for the requester-outcome trace for the gate-3 verdict
- evals/evals.json: gate-3 assertions updated in four full-path cases;
  all 13 case IDs stable

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:48:12 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 7c0de4cb76 docs(neckbeard): add skip-transparent lesson capture to phase 9 closeout
Implements issue #377 (journey dossier F2, ADAPT verdict): phase 9 closeout
now records lesson capture per stages.md Stage 6 "Deliver and learn" — either
the reusable lesson(s) and their durable destination (skill, memory, or
project docs), or an explicit "no reusable lesson identified" determination.
Mirrors skip transparency: silent omission is prohibited. Terminal-state
semantics stay intact — lessons are recorded IN the terminal record; a fired
trigger or follow-up starts a new change request via phase 1 intake.

- references/journey.md: phase 9 Output row gains the lesson-capture field;
  phase-continuity row updated ("terminal; triggers and lessons recorded in
  the terminal record").
- references/delivery-packet.md: group (i) row gains lesson capture; terminal
  semantics cover lessons alongside triggers; skip-transparency doctrine
  cross-referenced for closeout lessons.
- templates/delivery-packet.md: section (i) fillable "Lessons captured" field
  with durable-destination note + example line.
- references/lifecycle.md: intro, terminal-states closeout note, and closeout
  row aligned with the extended group-(i) field set.
- evals/evals.json: expected_output + assertions extended in bug-fix-
  reproduction-regression and refactor-characterization-architecture-review
  (13 IDs stable).

stages.md untouched: Stage 6 already mandates lesson capture; journey/packet
now consume it. README table unchanged (still accurate).

Closes #377

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:36:25 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 176086dc48 docs(neckbeard): record rollback/follow-up triggers at phase 9 closeout
Implements issue #376 (journey dossier F1, ADAPT-minimal verdict): phase 9
closeout now records rollback/follow-up triggers alongside terminal state +
release evidence, stating what would cause re-entry; operational discoveries
route to a NEW change request via phase 1 intake instead of resurrecting the
terminal packet. Terminal-state semantics stay intact.

- references/journey.md: phase 9 Output row gains trigger fields + new-CR
  routing; phase-continuity row updated ("terminal; triggers recorded in the
  terminal record").
- references/delivery-packet.md: group (i) row gains trigger fields; terminal
  semantics clarify triggers are recorded in, not re-opening, the packet.
- templates/delivery-packet.md: section (i) fillable field + example.
- references/lifecycle.md: intro, terminal-states note, closeout row aligned.
- evals/evals.json: assertions extended in bug-fix-reproduction-regression,
  schema-migration-rollback-release-readiness, release-authority-blocked-
  terminal-state (13 IDs stable).
- research brief: F1 citation of "SKILL.md step 6" corrected to step 5.

No phase added; stages.md untouched (lesson capture is issue #377).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:20:42 -04:00
Magnus Hedemark 04a9b60b58 fix(neckbeard): resolve round-5 findings; loop escalated as non-converging
Round 5 returned 3 P2 (two security) + 3 P3. All resolved:

- Re-derivation escape hatch closed: it now applies only to technical or
  factual judgments (re-check a no-delta note against the diff, verify
  acceptance criteria against the contract) and never substitutes for an
  approval verdict, which requires independent corroboration on the
  remote platform.
- Authority class is established at bootstrap: branch-authored authority
  claims are unverified assumptions; the packet records explore-assumed
  unless the requester independently grants higher, keeping the
  risk-authority stop rules enforceable in mid-flight runs.
- Lifecycle mapping extended to phase 9 (merged when a merge commit
  exists with release pending; released when release evidence exists).
- Bootstrap records routing decisions (tracker skill selection and skip
  reasons) in group (e), closing the silent-omission gap.
- Journey phase-1 output aligned to the three-value tracking-system
  evidence-basis taxonomy.
- Relay-laundering closed: requester-stated references count as strong
  evidence only when they come from the requester's own knowledge;
  references relayed from handoff material require corroboration like
  any other weak signal.
- Midflight eval aligned with all of the above.

Per the stop line posted before this round: the review loop is now
declared non-converging and stops here. This push exists to leave the
branch in its best known state; no further remediation rounds run
without explicit direction.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-22 01:34:10 -04:00
Magnus Hedemark 9bb3654d06 fix(neckbeard): resolve all findings from rounds 3 and 4
Round 3 findings missed in the earlier pass (reviewer was still posting
when the round was read as concluded) and round 4 findings, all resolved:

tracker-discovery.md:
- Signal table annotated: .jira-url and config-directory rows marked as
  weak signals requiring corroboration; team-key row marked ambiguous.
  Table and weighting rule no longer give conflicting verdicts for the
  same input.
- Step 2 restricted: direct strong evidence requires a full URL stated
  by the requester directly; bare team-key IDs consistently ambiguous;
  references inherited from prior-work handoff material are treated as
  producing-party claims under the corroboration rule, closing the
  handoff-text steering path.

position-assessment.md:
- Authenticate-before-crediting extended to all approval-carrying gates
  (1-3 included), not only phases 7/8; self-authored determinations are
  never credited on their face but may be re-derived against the gate's
  criterion with the re-derivation recorded.
- Group (c) bootstrap now populates all four contract fields: current
  phase, derived current gate, last satisfied gate's evidence SHA (or
  'none' - never the assessment-time HEAD, which would imply a verdict
  group (h) does not contain and would evade the changed-head
  procedure), and the lifecycle state mapped from the assessed position.

delivery-packet.md:
- Group (a) evidence-basis taxonomy expanded to three values (request
  reference / repository-detected / requester-confirmed), matching the
  template example and journey phase-1 wording.

evals: midflight case aligned with corrected group (c) semantics.
Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-22 01:00:11 -04:00
Magnus Hedemark 074dac5374 fix(neckbeard): address droid-review findings on position-assessment PR
All five findings from the droid-review run on 2db3bd0 resolved:

- [P1] Path re-selection moved before scoring: step 2 now re-runs the
  SKILL.md path-selection rule against the inventoried surface, so step 3
  scoring and the report's selected-path field no longer depend on a
  value produced later in step 5.
- [P2] Tracking-system field added to delivery-packet.md group (a) and to
  templates/delivery-packet.md, so the phase-1 intake gate has a defined
  packet home for the field tracker-discovery.md requires.
- [P2] tracker-discovery eval aligned with the documented procedure: a
  bare team-key identifier (ENG-482) is treated as ambiguous between
  Jira and Linear; the requester's explicit confirmation is the
  disambiguating evidence recorded in group (a).
- [P3/security] Detection signals weighted: request references are strong
  evidence; repository content (CONTRIBUTING.md, config files) is a weak,
  attacker-influenceable signal requiring corroboration before it alone
  selects a system. Unrouted-system fallback constrained to the system's
  verified official interface.
- [P3] Frontmatter description extended with the new trigger vocabulary
  (mid-flight continuation, Linear/Jira/Notion routing), compressed to
  stay within the 1024-char validator cap.

Generated catalog artifacts regenerated for the description change.
All validators re-run green locally; new head requires fresh CI.

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-21 23:26:42 -04:00
Magnus Hedemark 2db3bd072c feat(neckbeard): position-assessment entry mode and tracker-neutral intake
Two contained amendments to the delivery lifecycle bundle:

- references/position-assessment.md: a bounded entry mode for mid-flight
  engagement - continuing work that started elsewhere with no delivery
  packet. Inventories observable artifacts, scores them against phase
  exit conditions, emits a position report (current step, satisfied gates
  with evidence pointers, remaining checklist), then bootstraps a packet.
  Artifacts over narratives: unevidenced claims become recorded
  assumptions, never satisfied gates.

- references/tracker-discovery.md: an intake sub-step that detects which
  tracking system holds the work item and routes tracker operations to
  the matching catalog tooling skill (linear, jira-cli, notion). Keeps
  the journey vocabulary tracker-neutral; platform nouns stay confined
  to platform mapping rows and lifecycle reference modes.

Wiring: SKILL.md gains the conditional mid-flight section and file-map
rows; journey.md gains the tracker-neutrality statement, phase-1 tracking
field, and mid-flight entry pointer; routing-table.md gains linear,
jira-cli, and notion rows in the existing signal/skip format. README
triggers extended. Two eval cases added to keep the coverage ratchet
green.

Closes #371

Signed-off-by: Magnus Hedemark <magnus919@users.noreply.github.com>
2026-08-21 22:56:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c0c7690724 feat(flatten): move bundle dirs to repo root
Move the 8 directories under bundles/ to the repo root via git mv and
remove the now-empty bundles/ directory. Replace the "bundles" entry in
pyproject.toml [tool.deptry] extend_exclude with the 8 moved dir names so
the moved trees stay excluded from Python dependency analysis.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:26:27 -04:00