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
18 changes: 18 additions & 0 deletions .claude/skills/log_issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Skill: Log GitHub Issue
**Trigger Command:** `logIssue <description>` — also invoked implicitly whenever you ask to log
something as tech debt / a feature request / a bug that has no active code change to attach it to.

**Action:**
1. Determine the category: `tech-debt`, `enhancement`, or `bug`. If ambiguous, ask which applies.
2. Draft a title (imperative, ≤70 chars) and a body with three sections: What, Resolution
condition / Acceptance criteria, and Source (how/when it was surfaced).
3. Present the drafted title, body, and label to the user for confirmation. Do not file silently.
4. On confirmation, run `gh issue create --title "..." --body "..." --label <label>`.
5. Report back the created issue number and URL.

**Constraints:**
- No git branch, commit, or PR — issue-tracker-only, never touches the working tree.
- `gh issue create` is explicitly pre-authorized for this skill only. This does not extend to
`gh pr create` or any other `gh` write command — PRs remain text-only per CLAUDE.md's PR Workflow rule.
- Labels are fixed to `tech-debt`, `enhancement`, and `bug`. A new category needs the user's
go-ahead before inventing a label.
12 changes: 12 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: Diffpype
type: software
authors:
- family-names: Coulter
given-names: David A.
orcid: "https://orcid.org/0000-0003-4263-2228"
repository-code: "https://github.com/davecoulter/diffpype_claude"
license: BSD-3-Clause
version: 0.1.1
date-released: "2026-07-20"
4 changes: 3 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ Claude may only suggest packages or write code that aligns with this strict base
* `genTests on [filename.md]` → `gen_tests.md`: Interactive CLI + Application QA session. Runs one step at a time, waits for user confirmation, diagnoses failures. Only exits when all steps pass. Must be completed before `genPR`.
* `genPR on [filename.md]` → `gen_pr.md`: Generates commit message, PR title, and PR body from git context + the architectural doc. Assumes `genTests` has been completed — generates with pre-checked boxes and verified outcomes.
* `stratSesh on [filename.md]` → `strat_sesh.md`: Structured briefing on structural changes, data flow changes, and code review highlights for a completed doc. Interactive drill-down — user chooses what to explore further.
* `logIssue <description>` → `log_issue.md`: Files a GitHub Issue (tech-debt/enhancement/bug) directly — no branch, commit, or PR. This is now the sole tech-debt tracking mechanism, including debt discovered mid-implementation on an active branch — `docs/tech_debt.md` was retired in favor of GitHub Issues labeled `tech-debt`.



##### Operational Gotchas & Checklists
Expand All @@ -55,7 +57,7 @@ Claude may only suggest packages or write code that aligns with this strict base
### Directory References
* **Product Requirements:** Refer to `docs/prd.md` for overarching workflows.
* **Architecture & Design:** Refer to numbered files in `docs/architecture/` (e.g., `01_...`) for stage-by-stage design and prompting.
* **Technical Debt:** Refer to `docs/tech_debt.md` for tracked workarounds, dependency pins, and known limitations to revisit later.
* **Technical Debt:** Tracked as GitHub Issues labeled `tech-debt` — workarounds, dependency pins, and known limitations to revisit later. File new items via the `logIssue` skill rather than a markdown file.
* **Claude Skills:** Refer to `.claude/skills/` (or `.claude/rules/`) for repeatable execution scripts.

### Clarifications & Logs
Expand Down
28 changes: 28 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
BSD 3-Clause License

Copyright (c) 2026, David A. Coulter

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ Full architecture docs (numbered design stages, CLI guide, infrastructure diagra

## Project Status

This is a **Stage 0 walking skeleton** — the reusable plumbing is complete and tested (98%+ coverage), but no astronomical detection/reduction logic has been added yet. If you're forking this as a base for a new project, everything here is meant to be kept; domain-specific logic goes on top.
This is a **Stage 0 walking skeleton** — the reusable plumbing is complete and tested (98%+ coverage), but no astronomical detection/reduction logic has been added yet. If you're forking this as a base for a new project, everything here is meant to be kept; domain-specific logic goes on top.

## License

BSD 3-Clause — see [LICENSE](LICENSE).
6 changes: 3 additions & 3 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@
"uvicorn",
]

# prd.md and tech_debt.md are reference documents, not part of the ADR wiki;
# exclude them from the Sphinx source tree so MyST does not flag them as orphaned pages.
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "prd.md", "tech_debt.md"]
# prd.md is a reference document, not part of the ADR wiki; exclude it from
# the Sphinx source tree so MyST does not flag it as an orphaned page.
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "prd.md"]

html_theme = "sphinx_rtd_theme"
49 changes: 0 additions & 49 deletions docs/tech_debt.md

This file was deleted.

8 changes: 7 additions & 1 deletion src/db/tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,15 @@ def test_sysadmin_seeding_links_step_definition_to_user(mocker, test_engine):
db.close()

# Committed outside the transactional fixture — must clean up explicitly so the
# unique constraint on username doesn't bleed into subsequent tests.
# unique constraint on username doesn't bleed into subsequent tests. Delete
# JobConfiguration rows referencing this user first: any code path that dispatches
# a job as sysadmin (including manual CLI testing against this DB) can create one,
# and it would otherwise block the User delete via fk_job_configurations_user_id.
cleanup = TestSession()
try:
sysadmin_id = cleanup.query(User.id).filter_by(username="sysadmin").scalar()
if sysadmin_id is not None:
cleanup.query(JobConfiguration).filter_by(user_id=sysadmin_id).delete()
cleanup.query(StepDefinition).filter_by(name="dummy_sleep").delete()
cleanup.query(User).filter_by(username="sysadmin").delete()
cleanup.commit()
Expand Down
Loading