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
45 changes: 45 additions & 0 deletions .backlogit/queue/003-C.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
id: "003-C"
title: "Backlogit infrastructure hygiene"
artifact_type: chore
status: queued
priority: medium
description: "Fix backlog ID namespace collision at config level and gitignore backlogit DB files. Two config-only tasks that improve tooling reliability and repository cleanliness."
labels:
- "backlogit"
- "config"
- "hygiene"
references:
- "docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md"
- "docs/decisions/2026-05-23-backlog-id-collision.md"
- "docs/decisions/2026-05-24-backlogit-infra-hygiene-deliberation.md"
created_at: "2026-05-23T20:12:17.0000000-07:00"
updated_at: "2026-05-23T21:17:23.0072735-07:00"
---

## Scope

Two config-level fixes for backlogit infrastructure:

1. **ID namespace collision fix**: Give chores a type-discriminated task naming
format (`{NNN}C{suffix}`) so chore task IDs never collide with feature task IDs.

2. **Gitignore DB files**: Add `.backlogit/*.db` to `.gitignore` and untrack
`.backlogit/backlogit.db`. Keep `.backlogit/stash.jsonl` tracked.

## Acceptance Criteria

- New chores created after the config change get collision-free task IDs
(e.g., `003C.001-T`); this staged shipment's existing queue items remain
`003.001-T` / `003.002-T` unless a later migration is approved
- `.backlogit/backlogit.db` does not appear in `git status`
- `.backlogit/stash.jsonl` remains tracked
- `backlogit doctor` passes after config change
- CI passes (no Rust code changes)

## Source Documents

- Decision: `docs/decisions/2026-05-23-backlog-id-collision.md`
- Deliberation: `docs/decisions/2026-05-24-backlogit-infra-hygiene-deliberation.md`
- Plan: `docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md`
- Compound: `docs/compound/backlogit-id-collision-archival-protocol.md`
36 changes: 36 additions & 0 deletions .backlogit/queue/003.001-T.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
id: "003.001-T"
title: "Gitignore backlogit DB files and untrack cached database"
artifact_type: task
status: queued
priority: medium
parent_id: "003-C"
description: "Add .backlogit/*.db to .gitignore, run git rm --cached .backlogit/backlogit.db, verify stash.jsonl remains tracked."
labels:
- "backlogit"
- "gitignore"
- "config"
references:
- "docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md"
created_at: "2026-05-23T20:12:17.0000000-07:00"
updated_at: "2026-05-23T21:17:23.0072735-07:00"
---

## Implementation Notes

1. Add a `# backlogit (tool-managed cache)` section to `.gitignore`
2. Add rule: `.backlogit/*.db`
3. Run `git rm --cached .backlogit/backlogit.db`
4. Verify: `git ls-files .backlogit/stash.jsonl` still shows the file
5. Verify: `git status` no longer shows `.backlogit/backlogit.db`

## Acceptance Criteria

- `.backlogit/*.db` rule exists in `.gitignore`
- `.backlogit/backlogit.db` is untracked (does not appear in `git status`)
- `.backlogit/stash.jsonl` remains tracked (`git ls-files` confirms)
- `backlogit sync` succeeds after change (DB regenerates from markdown)

## Execution Posture

Config change — no test harness needed. Validate via git commands.
47 changes: 47 additions & 0 deletions .backlogit/queue/003.002-T.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
id: "003.002-T"
title: "Fix chore task ID namespace with type-discriminated format"
artifact_type: task
status: queued
priority: medium
parent_id: "003-C"
description: "Modify .backlogit/config.yaml chore name_format to use type-discriminated prefix so chore task IDs do not collide with feature task IDs, after confirming config.yaml is the authoritative artifact-type config."
labels:
- "backlogit"
- "config"
- "id-collision"
references:
- "docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md"
- "docs/decisions/2026-05-23-backlog-id-collision.md"
created_at: "2026-05-23T20:12:17.0000000-07:00"
updated_at: "2026-05-23T21:17:23.0072735-07:00"
---

## Implementation Notes

1. Confirm the target file before editing: inspect `.backlogit/config.yaml` or use
`backlogit_get_metadata_catalog` to verify it defines
`artifact_types.chore.name_format`; `.backlogit/config.yml` is generated
autoharness metadata and does not control artifact ID formatting
2. Edit `.backlogit/config.yaml` — change chore `name_format` from `'{NNN}{suffix}'`
to `'{NNN}C{suffix}'`
3. Run `backlogit doctor` to validate no parse errors
4. Create a test chore item to verify new ID format (e.g., `003C-C` or similar)
5. Verify existing archived items remain accessible
6. If backlogit rejects the format: fall back to a `prefix: C` approach or
consult backlogit documentation for supported format tokens
Comment thread
softwaresalt marked this conversation as resolved.

## Acceptance Criteria

- `.backlogit/config.yaml` is confirmed as the authoritative file for
`artifact_types.chore.name_format`
- `.backlogit/config.yaml` chore section uses type-discriminated naming
- `backlogit doctor` reports no errors
- New chore items get IDs that cannot collide with feature IDs
- Existing queue and archive items remain queryable
- The compound learning `backlogit-id-collision-archival-protocol.md` must be
marked as superseded once the fix is validated

## Execution Posture

Migration-first — apply config change, then validate with doctor and a test create.
58 changes: 58 additions & 0 deletions .backlogit/queue/005-S.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
id: "005-S"
title: "Backlogit infrastructure hygiene"
artifact_type: shipment
status: queued
priority: medium
description: "Ship backlogit config hygiene: gitignore DB files + fix chore task ID namespace collision."
labels:
- "backlogit"
- "config"
- "hygiene"
references:
- "docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md"
created_at: "2026-05-23T20:12:17.0000000-07:00"
custom_fields:
items:
- 003-C
- 003.001-T
- 003.002-T
updated_at: "2026-05-23T21:17:23.0072735-07:00"
---
Comment thread
softwaresalt marked this conversation as resolved.

## Manifest

| Order | Item ID | Title | Type |
|---|---|---|---|
| 1 | 003-C | Backlogit infrastructure hygiene | chore |
| 2 | 003.001-T | Gitignore backlogit DB files and untrack cached database | task |
| 3 | 003.002-T | Fix chore task ID namespace with type-discriminated format | task |

## Execution Notes

- **Suggested order**: 003.001-T first (gitignore — lower risk, cleans working tree),
then 003.002-T (config change — requires validation)
- **Branch name**: `chore/backlogit-infra-hygiene`
- **No Rust code changes** — CI gates (fmt, clippy, test, build) should pass trivially
- **Working tree prep**: The dirty `.backlogit/backlogit.db` will be resolved by
task 003.001-T itself (git rm --cached); stage the stash.jsonl change as part of
the branch setup commit

## Pre-Ship Gate Considerations

1. **Dirty working tree**: `.backlogit/backlogit.db` (modified) and
`.backlogit/stash.jsonl` (modified) are currently dirty. Ship should:
- Commit stash.jsonl changes (legitimate tracked state) on the feature branch
- Task 003.001-T will handle untracking the DB file
2. **Prior 004-S local-only memory artifact** should stay out of this shipment
PR; it belongs to the prior 004-S closure and should not block or
contaminate this chore
3. **backlogit doctor validation**: Must run after 003.002-T to confirm the config
change is accepted

## Source Documents

- Deliberation: `docs/decisions/2026-05-24-backlogit-infra-hygiene-deliberation.md`
- Plan: `docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md`
- Prior decision: `docs/decisions/2026-05-23-backlog-id-collision.md`
- Stash entry: `E1B44C77`
2 changes: 1 addition & 1 deletion .backlogit/stash.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@
{"id":"F3A12B91","priority":"low","kind":"task","text":"Decouple YamlValue from the public API surface in yaml_provider: the pub use serde_yaml_ng::Value as YamlValue re-export and the options: BTreeMap<String, YamlValue> public struct field in schema.rs bind the crate public API to a concrete YAML library type. Fix requires an associated type on YamlProvider or an opaque wrapper type with a migration path for callers. Source: PR #6 Copilot review thread PRRT_kwDOQEGgTs6EOIPy — docs/closure/001-S post-merge closure will reference.","created_at":"2026-05-22T20:11:00Z"}
{"id":"C1E4F807","priority":"low","kind":"task","text":"ADR-001 Decision paragraph line-length formatting polish: the paragraph added in PR #6 commit 2106061 has inconsistent line wrapping (long lines with multiple sentences). Reformat to ~80-100 char lines for consistency with the rest of the ADR. Source: PR #6 Copilot review thread PRRT_kwDOQEGgTs6EOh6n.","created_at":"2026-05-22T20:40:00Z"}
{"id":"F2454A73","priority":"low","kind":"task","text":"Raise CI coverage threshold above 60%: current line coverage exceeds 60%. Measure baseline, then raise COVERAGE_THRESHOLD in .github/workflows/ci.yml env block incrementally (70%, 80%) as the test suite stabilises. Source: docs/closure/2026-05-23-003-S-closure.md","created_at":"2026-05-23T00:13:42Z"}
{"id":"E1B44C77","priority":"medium","kind":"chore","text":"Fix backlog ID namespace collision at config level: modify backlogit config.yaml so chores use a type-discriminated task naming format (e.g., 002C.001-T) to avoid clashing with feature task IDs when parent NNN values match. Until then, colliding queue task files must be deleted (not archived) at shipment close time. Source: docs/decisions/2026-05-23-backlog-id-collision.md","created_at":"2026-05-23T22:31:00Z"}
{"id":"E1B44C77","priority":"medium","kind":"chore","text":"Fix backlog ID namespace collision at config level: modify backlogit config.yaml so chores use a type-discriminated task naming format (e.g., 002C.001-T) to avoid clashing with feature task IDs when parent NNN values match. Until then, colliding queue task files must be deleted (not archived) at shipment close time. Source: docs/decisions/2026-05-23-backlog-id-collision.md","created_at":"2026-05-23T22:31:00Z","state":"harvested","harvested_to":"003-C"}
114 changes: 114 additions & 0 deletions docs/decisions/2026-05-24-backlogit-infra-hygiene-deliberation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
---
title: "Backlogit Infrastructure Hygiene"
type: deliberation
description: "Deliberation on grouping backlog ID namespace fix with gitignore hygiene for backlogit DB files"
topic: "Backlogit config-level fixes: ID namespace collision + gitignore DB files"
depth: "lightweight"
stash_ids:
- "E1B44C77"
promote_to: "plan"
created: 2026-05-24
linked_artifacts:
- "docs/decisions/2026-05-23-backlog-id-collision.md"
- "docs/compound/backlogit-id-collision-archival-protocol.md"
tags:
- "backlogit"
- "config"
- "gitignore"
- "chore"
---
Comment thread
softwaresalt marked this conversation as resolved.

## Problem Frame

Two backlogit infrastructure issues require config-level fixes:

1. **ID namespace collision** (`E1B44C77`): Features and chores share a single
`{NNN}` sequence counter. When both hit the same counter value, their child
tasks produce identical IDs (`001.001-T` under both `001-F` and `001-C`).
The workaround (delete-not-move on archival) is documented but fragile. The
root fix is type-discriminated task naming for chores.

2. **Gitignore gap** (operator instruction): `.backlogit/backlogit.db` is a
tool-managed SQLite cache that should not be tracked in git. It appears as
dirty working tree noise and risks merge conflicts. The stash file
(`.backlogit/stash.jsonl`) is intentionally tracked state and must remain so.

**Who cares**: Ship agent (archival correctness), all agents (clean `git status`),
operator (repository hygiene).

**Success criteria**: Chore tasks get collision-free IDs; backlogit DB files are
gitignored; stash.jsonl remains tracked.

## Research Findings

* The existing decision document (`2026-05-23-backlog-id-collision.md`) confirms
the root cause and recommends type-discriminated prefixes for chore tasks.
* The compound learning (`backlogit-id-collision-archival-protocol.md`) documents
the interim workaround and explicitly references `E1B44C77` as the long-term fix.
* Current `config.yaml` uses `name_format: '{NNN}{suffix}'` for all types —
chores get `{NNN}-C` and their tasks inherit the same `{NNN}` as features.
* Current `.gitignore` has no rules for `.backlogit/` database files.
* `.backlogit/backlogit.db` is currently tracked (shows as modified in
`git status`).

## Options Evaluated

### Option A: Combined chore — config fix + gitignore in one release unit

Both changes target the same infrastructure surface (`.backlogit/` and
`.gitignore`), require no Rust source changes, and form a coherent "backlogit
hygiene" chore. Ship them together.

* **Pros**: Single PR, coherent scope, fast turnaround, unblocks Ship immediately
* **Cons**: None significant — both are small config changes
* **Effort**: Low (2 tasks × ~1 hour each)
* **Fit**: Excellent — both are medium-priority config hygiene

### Option B: Separate chores — one for ID fix, one for gitignore

Stage each as its own chore with its own shipment.

* **Pros**: Maximum isolation
* **Cons**: Unnecessary overhead for two tiny changes that share the same surface;
doubles PR review cost; both are prerequisite hygiene for future work
* **Effort**: Same total effort but double coordination cost
* **Fit**: Poor — artificially splitting coherent work

## Trade-off Comparison

| Criterion | Option A (Combined) | Option B (Separate) |
|---|---|---|
| Coherence | High — same domain | Low — artificial split |
| PR overhead | 1 PR | 2 PRs |
| Risk | Low | Low |
| Ship turnaround | Fast | Slower |
| Unblock value | Immediate | Delayed |

## Decision

**Option A: Combined chore.** Ship both fixes as a single "Backlogit
Infrastructure Hygiene" chore with two tasks. The scope is tight, the blast
radius is config-only, and both changes serve the same operational goal:
make backlogit tooling work cleanly without workarounds.

## Rejected Alternatives

Option B rejected: no benefit to splitting two small, tightly related config
changes into separate release units.

## Unresolved Questions

* The config.yaml change for type-discriminated task naming depends on whether
the current backlogit version supports format tokens like `{parent_NNN}C` or
whether a simpler approach (separate counter per type) is needed. The impl-plan
must investigate this.
* Whether `.backlogit/backlogit.db` needs `git rm --cached` to stop tracking it
(likely yes, since it currently shows as modified).

## Risks and Mitigations

| Risk | Mitigation |
|---|---|
| Config change breaks existing task ID parsing | Validate with `backlogit doctor` after change |
| Gitignore change loses stash.jsonl tracking | Explicitly verify stash.jsonl is NOT matched by the new rule |
| Existing archived items with old IDs become orphaned | No impact — archived items retain their IDs; only new chore tasks get new format |
47 changes: 47 additions & 0 deletions docs/memory/2026-05-24/stage-005-s-assembly-memory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
type: session-memory
agent: stage
date: 2026-05-24
session: stage-005-s-assembly
status: complete
---

## Session Summary

Staged shipment `005-S` from stash entry `E1B44C77` + operator gitignore instruction.

## Artifacts Created

| Type | Path |
|---|---|
| Deliberation | `docs/decisions/2026-05-24-backlogit-infra-hygiene-deliberation.md` |
| Plan | `docs/plans/2026-05-24-backlogit-infra-hygiene-plan.md` |
| Chore | `.backlogit/queue/003-C.md` |
| Task 1 | `.backlogit/queue/003.001-T.md` |
| Task 2 | `.backlogit/queue/003.002-T.md` |
| Shipment | `.backlogit/queue/005-S.md` |

## Stash Entries Consumed

- `E1B44C77` → harvested to `003-C`

## Deferred Entries (26 remaining)

All other stash entries remain active. Medium-priority candidates for next session:
- `DDF819E0` (manifest command), `7B611B73` (MCP tools), `C7AA4D4B` (join command)
- `B821FFFD`, `3AF98027`, `C60FFBA9` (medium tasks — potential grouped batch)

## Decisions

- Combined gitignore + ID collision into single chore (tight domain coherence)
- Plan review: PASS with no blocking findings
- Execution order: gitignore first (003.001-T), then config fix (003.002-T)

## Ship Pre-Conditions

1. Dirty working tree needs cleanup before Ship claims 005-S
2. Any local-only 004-S closure memory artifact should stay out of this
shipment PR; it belongs to the prior 004-S closure and should not block or
contaminate this chore
3. `.backlogit/stash.jsonl` changes should be committed (legitimate tracked state)
Comment thread
softwaresalt marked this conversation as resolved.
4. backlogit doctor validation required after 003.002-T
Loading
Loading