housebroken-cli 0.3.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/PKG-INFO +2 -1
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/README.md +1 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/bin/housebroken +2 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/pyproject.toml +1 -1
- housebroken_cli-0.4.0/scripts/claim-check.sh +67 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/skills/housebroken/SKILL.md +8 -2
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/.gitignore +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/LICENSE +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/hatch_build.py +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/branch-check.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/check-ai-policy.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/comment-census.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/diff-defaults.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/distinct-outside.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/file-pr.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/fork-hygiene.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/inbox.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/notes.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/pr-sweep.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/prior-art.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/scripts/verify-filed-pr.sh +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/src/housebroken/__init__.py +0 -0
- {housebroken_cli-0.3.0 → housebroken_cli-0.4.0}/src/housebroken/cli.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: housebroken-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Agent-written pull requests that do not make a mess in someone else's house.
|
|
5
5
|
Project-URL: Repository, https://github.com/lenamonj/housebroken
|
|
6
6
|
License-Expression: MIT
|
|
@@ -146,6 +146,7 @@ uv tool install git+https://github.com/lenamonj/housebroken
|
|
|
146
146
|
| `scripts/prior-art.sh` | issues and pull requests on the touched files, type stated, rulings quoted |
|
|
147
147
|
| `scripts/comment-census.sh` | added code versus added comments, per branch |
|
|
148
148
|
| `scripts/diff-defaults.sh` | default arguments and one-line wrappers added to keep call sites untouched |
|
|
149
|
+
| `scripts/claim-check.sh` | every falsifiable claim in a body or a reply, listed to re-derive |
|
|
149
150
|
| `scripts/branch-check.sh` | the branch's mechanical facts: clean tree, file modes, artifacts, absolute claims |
|
|
150
151
|
| `scripts/file-pr.sh` | the only way a pull request gets filed |
|
|
151
152
|
| `scripts/verify-filed-pr.sh` | the filed pull request is what was meant, and CI settled |
|
|
@@ -134,6 +134,7 @@ uv tool install git+https://github.com/lenamonj/housebroken
|
|
|
134
134
|
| `scripts/prior-art.sh` | issues and pull requests on the touched files, type stated, rulings quoted |
|
|
135
135
|
| `scripts/comment-census.sh` | added code versus added comments, per branch |
|
|
136
136
|
| `scripts/diff-defaults.sh` | default arguments and one-line wrappers added to keep call sites untouched |
|
|
137
|
+
| `scripts/claim-check.sh` | every falsifiable claim in a body or a reply, listed to re-derive |
|
|
137
138
|
| `scripts/branch-check.sh` | the branch's mechanical facts: clean tree, file modes, artifacts, absolute claims |
|
|
138
139
|
| `scripts/file-pr.sh` | the only way a pull request gets filed |
|
|
139
140
|
| `scripts/verify-filed-pr.sh` | the filed pull request is what was meant, and CI settled |
|
|
@@ -48,6 +48,7 @@ usage: housebroken <subcommand> [args...]
|
|
|
48
48
|
1 outside count outside contributors merged in the last 120 days
|
|
49
49
|
2 prior-art issues and pull requests on the touched files, rulings quoted
|
|
50
50
|
6 census added code lines against added comment lines, per branch
|
|
51
|
+
6 claims every falsifiable claim in outbound text, listed to re-derive
|
|
51
52
|
9 branch the mechanical facts about the branch: tree, modes, artifacts, claims
|
|
52
53
|
9 file the only way a pull request gets filed
|
|
53
54
|
10 verify the filed pull request is what was meant, and CI settled
|
|
@@ -90,6 +91,7 @@ case "$cmd" in
|
|
|
90
91
|
outside) script=distinct-outside.sh ;;
|
|
91
92
|
prior-art) script=prior-art.sh ;;
|
|
92
93
|
census) script=comment-census.sh ;;
|
|
94
|
+
claims) script=claim-check.sh ;;
|
|
93
95
|
branch) script=branch-check.sh ;;
|
|
94
96
|
file) script=file-pr.sh ;;
|
|
95
97
|
verify) script=verify-filed-pr.sh ;;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# claim-check.sh - lists every claim in outbound text that a maintainer can
|
|
3
|
+
# falsify, so each one gets re-derived before it is sent.
|
|
4
|
+
#
|
|
5
|
+
# On microsoft/GSL #1272 a reply draft said "The five new static_asserts fail on
|
|
6
|
+
# main." A reviewer falsified it in one pass. The number had come from a red arm
|
|
7
|
+
# that grepped only for `static assertion failed`, so it counted five matches
|
|
8
|
+
# and never saw the twenty-one other errors beside them; and against the commit
|
|
9
|
+
# a maintainer would actually revert to, only four of the five fail. The
|
|
10
|
+
# sentence named a basis and was still wrong about it.
|
|
11
|
+
#
|
|
12
|
+
# So this does not try to judge a claim. Text checks cannot: the bad sentence
|
|
13
|
+
# named its revision and read perfectly. It lists them, and the rule in step 6
|
|
14
|
+
# is that every listed line is re-measured, at the moment of writing, against
|
|
15
|
+
# the exact revision the sentence names. The gap this closes is that until now
|
|
16
|
+
# every gate here read code and nothing read the prose, while the prose is what
|
|
17
|
+
# the maintainer reads first.
|
|
18
|
+
#
|
|
19
|
+
# Usage:
|
|
20
|
+
# bash claim-check.sh FILE
|
|
21
|
+
# bash claim-check.sh --help
|
|
22
|
+
#
|
|
23
|
+
# Exits 1 when it finds claims to re-derive, 0 when it finds none, 2 on a usage
|
|
24
|
+
# error. Exit 1 is not a refusal to send; it is a refusal to send unread.
|
|
25
|
+
set -u
|
|
26
|
+
|
|
27
|
+
usage() { awk 'NR>1 && /^#/ {sub(/^# ?/, ""); print; next} NR>1 {exit}' "$0"; }
|
|
28
|
+
|
|
29
|
+
case "${1:-}" in
|
|
30
|
+
--help|-h) usage; exit 0 ;;
|
|
31
|
+
"") echo "REFUSED: name the file holding the text" >&2; exit 2 ;;
|
|
32
|
+
esac
|
|
33
|
+
file="$1"
|
|
34
|
+
[ -f "$file" ] || { echo "REFUSED: $file does not exist" >&2; exit 2; }
|
|
35
|
+
|
|
36
|
+
# Strip fenced code and quoted logs: a number inside pasted output is evidence,
|
|
37
|
+
# not a claim being made.
|
|
38
|
+
body=$(awk '/^```/ {fence = !fence; next} !fence && !/^ *[|>]/ {print NR": "$0}' "$file")
|
|
39
|
+
|
|
40
|
+
quantified=$(printf '%s
|
|
41
|
+
' "$body" | grep -nEi '[0-9]+ *(of|/) *[0-9]+|\b([0-9]+|one|two|three|four|five|six|seven|eight|nine|ten|no) +([a-z_-]+ +){0,3}(tests?|assertions?|static_asserts?|checks?|errors?|failures?|jobs?|files?|warnings?|projects?|commits?|suites?)\b' | cut -d: -f2-)
|
|
42
|
+
|
|
43
|
+
absolute=$(printf '%s\n' "$body" | grep -nEi \
|
|
44
|
+
'\b(only|exactly|always|never|every|all|none|nothing|everything|guaranteed|any)\b' \
|
|
45
|
+
| cut -d: -f2-)
|
|
46
|
+
|
|
47
|
+
found=0
|
|
48
|
+
if [ -n "$quantified" ]; then
|
|
49
|
+
found=1
|
|
50
|
+
echo "COUNTED: re-derive each, against the revision the sentence names, now:"
|
|
51
|
+
printf '%s\n' "$quantified" | sed 's/^/ /'
|
|
52
|
+
fi
|
|
53
|
+
if [ -n "$absolute" ]; then
|
|
54
|
+
found=1
|
|
55
|
+
echo "ABSOLUTE: falsify each against the code, not against your memory of it:"
|
|
56
|
+
printf '%s\n' "$absolute" | sed 's/^/ /'
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
if [ "$found" -eq 0 ]; then
|
|
60
|
+
echo "claim-check: no falsifiable claim found in $file"
|
|
61
|
+
exit 0
|
|
62
|
+
fi
|
|
63
|
+
echo
|
|
64
|
+
echo "claim-check: $file makes claims a maintainer can check. Re-measure each"
|
|
65
|
+
echo "one before sending. A sentence that names its revision can still be wrong"
|
|
66
|
+
echo "about it; that is the failure this exists for."
|
|
67
|
+
exit 1
|
|
@@ -118,7 +118,11 @@ report it in one line and do not proceed to the next step.
|
|
|
118
118
|
you reproduced on the fresh clone in this session, never a line carried
|
|
119
119
|
from a journal. No tool footer, no session link, no
|
|
120
120
|
co-author trailer, no typographic dashes. When a template asks whether AI
|
|
121
|
-
was used, answer in one truthful sentence.
|
|
121
|
+
was used, answer in one truthful sentence. Run `housebroken claims` over
|
|
122
|
+
the body and re-measure every line it lists, now, against the exact
|
|
123
|
+
revision that sentence names. A claim that names its revision can still
|
|
124
|
+
be wrong about it, which is why the listing is the whole gate: the
|
|
125
|
+
re-derivation is yours to do.
|
|
122
126
|
|
|
123
127
|
7. **Know the paperwork.**
|
|
124
128
|
Before the first pull request to an organization, find its agreement: CLA,
|
|
@@ -157,7 +161,9 @@ report it in one line and do not proceed to the next step.
|
|
|
157
161
|
on every open pull request. A list of who commented is not a read, and a
|
|
158
162
|
conversion to draft is a review. Act on every human item, then run
|
|
159
163
|
`housebroken inbox --ack`. Answer every maintainer comment the same day,
|
|
160
|
-
in the user's voice
|
|
164
|
+
in the user's voice, and run `housebroken claims` over the reply before
|
|
165
|
+
it is posted: the only claim that has gone out wrong here was in a
|
|
166
|
+
reply, not a body. Rework what is asked for as a second commit so the reviewer sees
|
|
161
167
|
the change. When the maintainer is
|
|
162
168
|
right, concede in one sentence and let them close it. Never nudge a
|
|
163
169
|
silent maintainer without the user's explicit word. After answering a
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|