@event4u/agent-config 2.25.0 → 2.26.0
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.
- package/.agent-src/commands/bug-fix.md +1 -0
- package/.agent-src/commands/feature/roadmap.md +2 -2
- package/.agent-src/commands/fix/seeder.md +3 -2
- package/.agent-src/commands/memory/add.md +3 -3
- package/.agent-src/commands/module/create.md +1 -0
- package/.agent-src/commands/module/explore.md +10 -6
- package/.agent-src/commands/onboard.md +9 -1
- package/.agent-src/commands/optimize/augmentignore.md +52 -20
- package/.agent-src/commands/optimize/rtk.md +56 -30
- package/.agent-src/commands/package-test.md +86 -10
- package/.agent-src/commands/quality-fix.md +49 -27
- package/.agent-src/commands/update-form-request-messages.md +2 -1
- package/.agent-src/contexts/augment-infrastructure.md +4 -7
- package/.agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -1
- package/.agent-src/contexts/contracts/research-schema.md +1 -1
- package/.agent-src/contexts/execution/interrupt-examples.md +34 -0
- package/.agent-src/contexts/skills-and-commands.md +2 -2
- package/.agent-src/rules/architecture.md +24 -10
- package/.agent-src/rules/artifact-drafting-protocol.md +6 -0
- package/.agent-src/rules/augment-edit-discipline.md +28 -0
- package/.agent-src/rules/augment-source-of-truth.md +2 -2
- package/.agent-src/rules/autonomous-execution.md +31 -0
- package/.agent-src/rules/context-hygiene.md +1 -1
- package/.agent-src/rules/domain-adoption-policy.md +4 -5
- package/.agent-src/rules/domain-safety-disclaimer.md +114 -0
- package/.agent-src/rules/domain-safety-pii.md +142 -0
- package/.agent-src/rules/domain-safety-retention.md +86 -0
- package/.agent-src/rules/downstream-changes.md +4 -4
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +130 -0
- package/.agent-src/rules/git-history-discipline.md +99 -0
- package/.agent-src/rules/minimal-safe-diff.md +6 -0
- package/.agent-src/rules/no-roadmap-references.md +4 -2
- package/.agent-src/rules/user-interrupt-priority.md +46 -0
- package/.agent-src/rules/verify-before-complete.md +11 -2
- package/.agent-src/skills/adversarial-review/SKILL.md +1 -1
- package/.agent-src/skills/ai-council/SKILL.md +1 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +58 -154
- package/.agent-src/skills/api-testing/SKILL.md +11 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +36 -30
- package/.agent-src/skills/code-review/SKILL.md +41 -36
- package/.agent-src/skills/context-authoring/SKILL.md +1 -1
- package/.agent-src/skills/dashboard-design/SKILL.md +1 -2
- package/.agent-src/skills/database/SKILL.md +8 -3
- package/.agent-src/skills/dependency-upgrade/SKILL.md +65 -19
- package/.agent-src/skills/developer-like-execution/SKILL.md +25 -14
- package/.agent-src/skills/eloquent/SKILL.md +1 -1
- package/.agent-src/skills/feature-planning/SKILL.md +1 -1
- package/.agent-src/skills/file-editor/SKILL.md +45 -19
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/.agent-src/skills/git-workflow/SKILL.md +4 -4
- package/.agent-src/skills/laravel-api-endpoint/SKILL.md +187 -0
- package/.agent-src/skills/{dto-creator → laravel-dto}/SKILL.md +5 -4
- package/.agent-src/skills/{migration-creator → laravel-migration}/SKILL.md +11 -10
- package/.agent-src/skills/laravel-reverb/SKILL.md +3 -3
- package/.agent-src/skills/{websocket → laravel-websocket}/SKILL.md +4 -3
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +1 -1
- package/.agent-src/skills/merge-conflicts/SKILL.md +49 -17
- package/.agent-src/skills/migration-architect/SKILL.md +6 -6
- package/.agent-src/skills/module-management/SKILL.md +1 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +15 -8
- package/.agent-src/skills/pest-testing/SKILL.md +18 -0
- package/.agent-src/skills/php-debugging/SKILL.md +28 -0
- package/.agent-src/skills/php-service/SKILL.md +3 -3
- package/.agent-src/skills/playwright-testing/SKILL.md +16 -1
- package/.agent-src/skills/project-analyzer/SKILL.md +68 -42
- package/.agent-src/skills/readme-writing-package/SKILL.md +94 -23
- package/.agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +23 -8
- package/.agent-src/skills/rule-refactor/SKILL.md +145 -0
- package/.agent-src/skills/rule-writing/SKILL.md +34 -8
- package/.agent-src/skills/security/SKILL.md +38 -29
- package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/.agent-src/skills/test-driven-development/SKILL.md +4 -4
- package/.agent-src/skills/test-performance/SKILL.md +6 -5
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +24 -27
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/copilot-instructions.md +2 -2
- package/.agent-src/templates/rule.md +2 -2
- package/.claude-plugin/marketplace.json +6 -4
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +74 -170
- package/README.md +2 -2
- package/docs/architecture.md +2 -2
- package/docs/archive/CHANGELOG-pre-2.25.0.md +191 -0
- package/docs/catalog.md +17 -12
- package/docs/contracts/file-ownership-matrix.json +473 -43
- package/docs/contracts/kernel-membership.md +17 -0
- package/docs/contracts/smoke-contracts.md +8 -8
- package/docs/getting-started.md +1 -1
- package/docs/guidelines/php/api-design.md +1 -1
- package/docs/guidelines/php/controllers.md +1 -1
- package/docs/guidelines/php/resources.md +1 -1
- package/docs/guidelines/php/validations.md +1 -1
- package/package.json +1 -1
- package/scripts/build_linear_digest.py +0 -1
- package/scripts/lint_framework_leakage.py +348 -0
- package/scripts/lint_framework_leakage_allowlist.json +476 -0
- package/scripts/measure_augment_budget.py +6 -0
- package/scripts/schemas/command.schema.json +5 -0
- package/scripts/schemas/skill.schema.json +5 -0
- package/scripts/skill_linter.py +60 -7
- package/scripts/smoke/kernel.sh +4 -4
- package/scripts/smoke/router.sh +2 -2
- package/.agent-src/rules/agent-docs.md +0 -20
- package/.agent-src/rules/augment-portability.md +0 -23
- package/.agent-src/rules/capture-learnings.md +0 -19
- package/.agent-src/rules/docs-sync.md +0 -20
- package/.agent-src/rules/domain-safety-disclaimer-consulting.md +0 -52
- package/.agent-src/rules/domain-safety-disclaimer-financial.md +0 -54
- package/.agent-src/rules/domain-safety-disclaimer-legal.md +0 -49
- package/.agent-src/rules/domain-safety-disclaimer-medical.md +0 -56
- package/.agent-src/rules/domain-safety-export-redact.md +0 -65
- package/.agent-src/rules/domain-safety-logging-pii-floor.md +0 -55
- package/.agent-src/rules/domain-safety-pii-finance.md +0 -57
- package/.agent-src/rules/domain-safety-pii-marketing.md +0 -60
- package/.agent-src/rules/domain-safety-pii-recruiting.md +0 -56
- package/.agent-src/rules/domain-safety-pii-support.md +0 -57
- package/.agent-src/rules/domain-safety-retention-finance.md +0 -48
- package/.agent-src/rules/domain-safety-retention-support.md +0 -55
- package/.agent-src/rules/e2e-testing.md +0 -19
- package/.agent-src/rules/no-unsolicited-rebase.md +0 -107
- package/.agent-src/rules/post-push-rewrite-discipline.md +0 -70
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "auto"
|
|
3
|
-
tier: "2a"
|
|
4
|
-
description: "Finance data retention guidance — flag jurisdiction dependence, default to longest applicable retention, never delete records under audit hold"
|
|
5
|
-
source: package
|
|
6
|
-
triggers:
|
|
7
|
-
- keyword: "retention policy"
|
|
8
|
-
- keyword: "data retention"
|
|
9
|
-
- keyword: "record retention"
|
|
10
|
-
- keyword: "delete financial"
|
|
11
|
-
- keyword: "purge invoice"
|
|
12
|
-
- phrase: "how long should we keep"
|
|
13
|
-
- phrase: "when can we delete"
|
|
14
|
-
routes_to:
|
|
15
|
-
- "skill:data-handling-judgment"
|
|
16
|
-
applies_to_user_types:
|
|
17
|
-
- "finance"
|
|
18
|
-
- "ops"
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# Domain Safety — Finance Record Retention
|
|
22
|
-
|
|
23
|
-
## Iron Law
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
WHEN ASKED HOW LONG TO KEEP FINANCIAL RECORDS — NAME THE JURISDICTION GAP
|
|
27
|
-
AND DEFAULT TO THE LONGEST APPLICABLE FLOOR. NEVER RECOMMEND DELETION
|
|
28
|
-
OF RECORDS UNDER AUDIT HOLD, LITIGATION HOLD, OR REGULATORY INQUIRY.
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Retention questions look operational but are regulatory minefields: tax-authority floors, statute-of-limitations windows, GAAP / IFRS requirements, and contractual obligations stack non-trivially. A wrong "delete after 3 years" recommendation can destroy evidence in a future tax audit or litigation.
|
|
32
|
-
|
|
33
|
-
## Required surface in every retention answer
|
|
34
|
-
|
|
35
|
-
1. **Jurisdiction gap.** *"Retention floor depends on jurisdiction — name yours."* Then provide ranges if known (e.g., US-federal-tax: 7 years from filing; EU VAT: 10 years in DE/AT, 6 in UK post-Brexit).
|
|
36
|
-
2. **Audit / litigation hold check.** *"If any of these apply, do not delete: open tax audit, pending litigation, regulatory inquiry, contractual record-keeping clause, criminal investigation."*
|
|
37
|
-
3. **Longest-floor default.** When multiple floors apply, the longest wins. Document the chosen floor.
|
|
38
|
-
4. **Disclaimer.** Append the financial-disclaimer footer from `domain-safety-disclaimer-financial`.
|
|
39
|
-
|
|
40
|
-
## Refusal triggers
|
|
41
|
-
|
|
42
|
-
- *"Delete all invoices older than 2 years"* (without jurisdiction context) → refuse + ask the jurisdiction-gap question.
|
|
43
|
-
- *"We're under SEC investigation — can we clean up old emails?"* → hard refuse; flag spoliation risk; redirect to counsel.
|
|
44
|
-
|
|
45
|
-
## See also
|
|
46
|
-
|
|
47
|
-
- `skill:data-handling-judgment` — retention + transfer cognition.
|
|
48
|
-
- `domain-safety-disclaimer-financial` — companion advisory disclaimer.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "auto"
|
|
3
|
-
tier: "2a"
|
|
4
|
-
description: "Support / CRM data retention guidance — surface DSR-readiness, consent-window expiry, ticket-body retention vs. analytics aggregate retention"
|
|
5
|
-
source: package
|
|
6
|
-
triggers:
|
|
7
|
-
- keyword: "ticket retention"
|
|
8
|
-
- keyword: "CRM retention"
|
|
9
|
-
- keyword: "DSAR"
|
|
10
|
-
- keyword: "data subject request"
|
|
11
|
-
- keyword: "right to be forgotten"
|
|
12
|
-
- phrase: "delete customer data"
|
|
13
|
-
- phrase: "how long do we keep tickets"
|
|
14
|
-
routes_to:
|
|
15
|
-
- "skill:data-handling-judgment"
|
|
16
|
-
- "skill:privacy-review"
|
|
17
|
-
applies_to_user_types:
|
|
18
|
-
- "support"
|
|
19
|
-
- "gtm"
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
# Domain Safety — Support / CRM Retention
|
|
23
|
-
|
|
24
|
-
## Iron Law
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
SUPPORT-DATA RETENTION ANSWERS DISTINGUISH RAW TICKET BODY (PII-LADEN)
|
|
28
|
-
FROM AGGREGATE ANALYTICS (DE-IDENTIFIED). DSR-READINESS IS THE FLOOR,
|
|
29
|
-
NOT THE CEILING.
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The right answer to *"how long do we keep tickets?"* is almost never a single number — it's a two-track policy. Raw ticket bodies contain PII and must respect deletion requests on a DSR clock (typically 30 days under GDPR). De-identified aggregate analytics (resolution times, category counts) can persist indefinitely for product / ops insight.
|
|
33
|
-
|
|
34
|
-
## Required structure in every support-retention answer
|
|
35
|
-
|
|
36
|
-
1. **Two tracks.** Raw ticket body + attachments (PII): short retention with DSR honoring. Aggregate metrics (de-identified): long retention OK.
|
|
37
|
-
2. **Consent-window check.** If consent was time-bound (e.g., "we'll keep your data for 12 months for support quality"), name the expiry and the deletion job that must run.
|
|
38
|
-
3. **DSR readiness.** *"You must be able to honor a deletion request within [N] days. The system needs a query that finds every ticket + attachment + log line tied to one customer."*
|
|
39
|
-
4. **Backup retention gotcha.** *"Backups also contain PII. Either purge on the same DSR clock or document that backups are inaccessible and rotate within [N] days."*
|
|
40
|
-
|
|
41
|
-
## Default floors (cite, then qualify)
|
|
42
|
-
|
|
43
|
-
| Class | Typical floor | Driver |
|
|
44
|
-
|---|---|---|
|
|
45
|
-
| Raw ticket body | 12-24 months from close | Consent window + DSR readiness |
|
|
46
|
-
| Attachments with PII | 6-12 months | Higher leak risk → shorter |
|
|
47
|
-
| Aggregate analytics (de-identified) | Indefinite | No PII linkage |
|
|
48
|
-
| Quality-assurance recordings | 30-90 days | Consent typically narrow |
|
|
49
|
-
|
|
50
|
-
Verify against the customer's privacy notice, regulatory regime, and contractual data-processing agreements before locking values.
|
|
51
|
-
|
|
52
|
-
## See also
|
|
53
|
-
|
|
54
|
-
- `skill:data-handling-judgment` — retention + DSR shape.
|
|
55
|
-
- `skill:privacy-review` — regulatory-regime read.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "auto"
|
|
3
|
-
tier: "3"
|
|
4
|
-
description: "Playwright E2E tests — locators, assertions, Page Objects, fixtures, CI, and flaky test prevention"
|
|
5
|
-
source: package
|
|
6
|
-
triggers:
|
|
7
|
-
- keyword: "playwright"
|
|
8
|
-
- keyword: "e2e"
|
|
9
|
-
- phrase: "page object"
|
|
10
|
-
routes_to:
|
|
11
|
-
- "command:e2e-heal"
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# E2E Testing
|
|
15
|
-
|
|
16
|
-
**Iron Law.** Playwright E2E: stable locators, no `waitForTimeout`, Page Objects for shared flows, fixtures over `beforeEach`.
|
|
17
|
-
|
|
18
|
-
Body migrated to `command:e2e-heal` (per P4 of `road-to-kernel-and-router.md`).
|
|
19
|
-
Trigger-set above activates this routing under the `balanced` and `full` profiles.
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "auto"
|
|
3
|
-
tier: "2a"
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
description: "Working with git history — never rewrite, rebase, squash, fixup, or amend without explicit user request; shape is the user's call, not tidiness"
|
|
6
|
-
source: package
|
|
7
|
-
triggers:
|
|
8
|
-
- intent: "rebase the branch"
|
|
9
|
-
- intent: "squash commits"
|
|
10
|
-
- intent: "clean up commit history"
|
|
11
|
-
- intent: "fold this into the previous commit"
|
|
12
|
-
- keyword: "git rebase"
|
|
13
|
-
- keyword: "fixup"
|
|
14
|
-
- keyword: "--amend"
|
|
15
|
-
- keyword: "force-push"
|
|
16
|
-
- keyword: "squash-merge"
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
# No Unsolicited Rebase
|
|
20
|
-
|
|
21
|
-
## Iron Law
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
NEVER REBASE, SQUASH, FIXUP, OR AMEND PUBLISHED OR LOCAL HISTORY
|
|
25
|
-
WITHOUT THE USER ASKING FOR IT THIS TURN.
|
|
26
|
-
LINEAR HISTORY IS A PREFERENCE, NOT A DEFAULT.
|
|
27
|
-
COMMIT-CHUNK ORDER IS NOT A CORRECTNESS GOAL.
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Add the next commit on top. Never reorder, fold, drop, or rewrite earlier
|
|
31
|
-
commits to make the log "look right".
|
|
32
|
-
|
|
33
|
-
## Why this rule exists
|
|
34
|
-
|
|
35
|
-
Interactive rebase + fixup loops generate disproportionate token cost on
|
|
36
|
-
every iteration: re-running CI per replayed commit, resolving the same
|
|
37
|
-
content conflict in three derived files (`.compression-hashes.json`,
|
|
38
|
-
`router.json`, `.windsurfrules`), losing the working tree to a stash that
|
|
39
|
-
silently re-introduces older state. A single conflict can burn the budget
|
|
40
|
-
of an entire feature. The user pays for it. The "clean history" payoff is
|
|
41
|
-
cosmetic; reviewers read the diff, not the log.
|
|
42
|
-
|
|
43
|
-
## When rebase / amend / fixup IS allowed
|
|
44
|
-
|
|
45
|
-
Exactly three:
|
|
46
|
-
|
|
47
|
-
1. **User says so this turn** — "rebase onto main", "squash these two",
|
|
48
|
-
"amend that". This operation only, not a standing rule.
|
|
49
|
-
2. **Standing instruction not yet revoked** — the user said earlier in
|
|
50
|
-
the conversation "always squash before pushing"; honor it.
|
|
51
|
-
3. **Conflict resolution forced by `git pull --rebase`** — the user
|
|
52
|
-
already invoked the rebase via pull; finish it.
|
|
53
|
-
|
|
54
|
-
Anything else — chunk-tidiness, "logical order", folding a follow-up fix
|
|
55
|
-
into its parent — **forbidden**. The follow-up ships as its own commit
|
|
56
|
-
(`fix: …`, `chore: …`).
|
|
57
|
-
|
|
58
|
-
## Equivalents that are also forbidden by default
|
|
59
|
-
|
|
60
|
-
- `git rebase -i` (interactive)
|
|
61
|
-
- `git rebase --autosquash`
|
|
62
|
-
- `git commit --fixup` / `--squash` (the helper that feeds the autosquash)
|
|
63
|
-
- `git commit --amend` on already-pushed commits
|
|
64
|
-
- `git push --force` / `--force-with-lease`
|
|
65
|
-
- `git reset --hard` past unpushed work the user might want
|
|
66
|
-
- Squash-merge of a PR via API or CLI when the user has not picked the
|
|
67
|
-
merge strategy
|
|
68
|
-
- Cherry-pick rewriting that drops or reorders commits
|
|
69
|
-
|
|
70
|
-
`--amend` on the *current local* commit before the first push is the
|
|
71
|
-
narrow exception (treated as continuing to compose the commit, not
|
|
72
|
-
rewriting history).
|
|
73
|
-
|
|
74
|
-
## When you'd be tempted
|
|
75
|
-
|
|
76
|
-
- "I want commit 3 to come before commit 2 because the topic flows better."
|
|
77
|
-
→ don't. Reviewers read the PR diff.
|
|
78
|
-
- "There are two `chore: regenerate` commits, ugly." → don't. They are
|
|
79
|
-
honest checkpoints.
|
|
80
|
-
- "A linter caught an issue in commit 2 — let me fold the fix in."
|
|
81
|
-
→ don't. Add `fix(scope): …` on top.
|
|
82
|
-
- "I want to drop the WIP commit before pushing." → ask the user first.
|
|
83
|
-
- "Squash-merge when I open the PR will clean it anyway." → also true,
|
|
84
|
-
also irrelevant — let the merge strategy do that work, not you.
|
|
85
|
-
|
|
86
|
-
## Failure mode catalog
|
|
87
|
-
|
|
88
|
-
- **Rebase-conflict cascade.** Interactive rebase replays N commits. Any
|
|
89
|
-
derived file (`.compression-hashes.json`, generated tool projections,
|
|
90
|
-
index/catalog) carries a hash per commit and conflicts on every replay.
|
|
91
|
-
Resolution time scales with N, not with the actual change.
|
|
92
|
-
- **Stash-pop reverts work.** A `git stash` issued during rebase recovery
|
|
93
|
-
can re-introduce older edits that overwrite committed work after the
|
|
94
|
-
rebase finishes. Hard to spot in `git status` because the file shapes
|
|
95
|
-
match.
|
|
96
|
-
- **Force-push during review.** Rewriting history on a branch with an
|
|
97
|
-
open PR invalidates review comments anchored to commits and forces a
|
|
98
|
-
re-review.
|
|
99
|
-
|
|
100
|
-
## See also
|
|
101
|
-
|
|
102
|
-
- [`scope-control`](scope-control.md) — git-ops permission gate ("rebase"
|
|
103
|
-
already named in the canonical list).
|
|
104
|
-
- [`commit-policy`](commit-policy.md) — commits are the user's call;
|
|
105
|
-
rewriting them is a stronger version of the same restriction.
|
|
106
|
-
- [`token-efficiency`](token-efficiency.md) — Iron Law on burning the
|
|
107
|
-
user's tokens for cosmetic gain.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "auto"
|
|
3
|
-
tier: "2a"
|
|
4
|
-
alwaysApply: false
|
|
5
|
-
description: "Git history after a push — squash/amend/rebase of pushed commits must pair with immediate re-push in same turn; stop on divergent state"
|
|
6
|
-
source: package
|
|
7
|
-
triggers:
|
|
8
|
-
- intent: "squash the pushed branch"
|
|
9
|
-
- intent: "clean up commits on the PR branch"
|
|
10
|
-
- intent: "tidy history after pushing"
|
|
11
|
-
- keyword: "git rebase -i"
|
|
12
|
-
- keyword: "--amend"
|
|
13
|
-
- keyword: "force-push"
|
|
14
|
-
- keyword: "--force-with-lease"
|
|
15
|
-
- phrase: "branch diverged"
|
|
16
|
-
- phrase: "pull --rebase failed"
|
|
17
|
-
- phrase: "ahead and behind"
|
|
18
|
-
routes_to:
|
|
19
|
-
- "skill:git-workflow"
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
# Post-Push Rewrite Discipline
|
|
23
|
-
|
|
24
|
-
## Iron Law
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
ONCE PUSHED, A COMMIT IS PUBLISHED.
|
|
28
|
-
ANY REWRITE OF PUSHED HISTORY MUST PAIR WITH AN IMMEDIATE RE-PUSH
|
|
29
|
-
IN THE SAME TURN — OR DON'T REWRITE.
|
|
30
|
-
NEVER END A SESSION WITH REWRITTEN-BUT-UNPUSHED LOCAL HISTORY.
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Two protective stops
|
|
34
|
-
|
|
35
|
-
1. **Pre-rewrite stop.** Before any squash / amend / rebase on a
|
|
36
|
-
branch that is on origin: `git fetch && git rev-list --left-right
|
|
37
|
-
--count HEAD...@{u}`. If **either** side is non-zero — STOP and
|
|
38
|
-
route to `skill:git-workflow § Divergent-State Recovery`. A blind
|
|
39
|
-
`git pull --rebase` in this state is the documented failure mode.
|
|
40
|
-
|
|
41
|
-
2. **Post-rewrite stop.** After the rewrite, push in the **same turn**
|
|
42
|
-
with `--force-with-lease=<branch>:<fetched-sha>` and verify
|
|
43
|
-
`git rev-parse origin/<branch>` equals `git rev-parse HEAD`.
|
|
44
|
-
If the push fails (hook, network, token budget) — fix the cause
|
|
45
|
-
and re-push **before** ending the session, committing new work,
|
|
46
|
-
or handing off.
|
|
47
|
-
|
|
48
|
-
If either stop fires and resolution is not immediate → tag the state
|
|
49
|
-
(`git tag local-rewritten-tip-<ISO-date>`) and hand control back to
|
|
50
|
-
the user. Do not let a new session inherit a dirty divergence.
|
|
51
|
-
|
|
52
|
-
## Why this rule exists
|
|
53
|
-
|
|
54
|
-
A previous session squashed a pushed branch, the push hook failed at
|
|
55
|
-
the token boundary, the session ended — and the next session saw
|
|
56
|
-
local and origin pointing at different SHAs for the same logical work.
|
|
57
|
-
A blind `git pull --rebase` cascaded into conflicts across every
|
|
58
|
-
derived file (`.compression-hashes.json`, router projections). Recovery
|
|
59
|
-
required forensic SHA-archaeology. This rule makes that sequence
|
|
60
|
-
structurally impossible: rewrite without immediate push is forbidden.
|
|
61
|
-
|
|
62
|
-
## See also
|
|
63
|
-
|
|
64
|
-
- [`no-unsolicited-rebase`](no-unsolicited-rebase.md) — whether to
|
|
65
|
-
rewrite at all (this rule kicks in once rewriting is authorized).
|
|
66
|
-
- [`skill:git-workflow`](../skills/git-workflow/SKILL.md) — Safe
|
|
67
|
-
Squash-After-Push protocol and Divergent-State Recovery decision
|
|
68
|
-
tree.
|
|
69
|
-
- [`commit-policy`](commit-policy.md) — never rewrite or commit
|
|
70
|
-
without explicit authorization.
|