@carecard/validate 3.28.0 → 3.29.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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: github-pr-merge-cleanup
3
- description: 'Use only when the user explicitly asks for remote Git or GitHub PR work: pushing a branch, creating a missing PR, reviewing mergeability, validating, merging, deleting, or cleaning up a pull request branch.'
3
+ description: 'Use for authorized GitHub PR squash merge and source cleanup. Default to fresh origin/main, rebase when needed, delete merged source branches, and synchronize main and development without deleting or force-pushing main.'
4
4
  ---
5
5
 
6
6
  Non-negotiable root-cause solution rule: Always identify and solve the verified root cause, use the stronger solution, and deliver a correct, durable, production-quality result. Never treat a temporary workaround, resource increase, retry, suppression, bypass, or symptom-only patch as completion. Validate the root-cause fix against the real failing workflow and prove the end state.
@@ -17,224 +17,225 @@ Non-negotiable error and warning rule: Never suppress, silence, hide, downgrade,
17
17
 
18
18
  Non-negotiable code organization rule: Functions with the same or equivalent behavior must use the same or clearly corresponding descriptive names across CareCard repositories, and equivalent functionality must live in files with the same names within each repository's established architecture. No backward compatibility names, aliases, or duplicate locations are allowed.
19
19
 
20
- ## Purpose
21
-
22
- After the user explicitly asks for remote Git or GitHub PR work, push the
23
- branch, create a missing PR when needed, review, validate, merge, delete the
24
- branch when allowed, and clean local state for a GitHub pull request targeting
25
- `development`, or `main` when `development` is absent.
26
-
27
- ## When To Use
28
-
29
- - Use only when the user explicitly asks to push, review mergeability,
30
- validate, merge, close, or clean up a GitHub pull request branch.
31
-
32
- ## When Not To Use
33
-
34
- - Do not use for PR-only creation/update work without a merge request; use the
35
- PR create/update skill.
36
- - Do not use when the user only asks for local code changes without PR merge
37
- work.
38
-
39
- ## Remote Git Operations Guardrail
40
-
41
- Do not run remote Git or GitHub operations unless the current user request
42
- explicitly asks for them. This includes `git fetch`, `git pull`, `git push`,
43
- `git push --delete`, remote branch cleanup, GitHub API calls, and any `gh pr`
44
- command that creates, updates, readies, merges, closes, or cleans up a pull
45
- request. Do not infer permission from branch names, validation needs, prior
46
- workflow habits, or convenience; ask first when remote state would help but was
47
- not requested.
48
-
49
- ## Scope
50
-
51
- Use this skill from the root of the repository that owns the pull request. The
52
- repository must use GitHub CLI, have a remote base branch, and have the target
53
- branch available locally or on `origin`.
54
-
55
- Default terms:
56
-
57
- - Base branch: `development` when `origin/development` exists, otherwise
58
- `main` when `origin/main` exists.
59
- - Target branch: the current branch unless the user names another branch.
60
- - Pull request: the open PR whose head is the target branch and whose base is
61
- the base branch.
62
-
63
- Do not continue automatically when:
64
-
65
- - `gh auth status` fails.
66
- - The target branch is detached or is the base branch.
67
- - The working tree has uncommitted changes that are not part of the requested
68
- PR cleanup.
69
- - Neither `origin/development` nor `origin/main` exists.
70
- - A rebase or validation fix would require behavior changes instead of coding
71
- criteria cleanup.
72
-
73
- If no open pull request exists for the target branch and selected base, create
74
- one as part of the merge workflow when the user requested push/PR/merge
75
- completion.
76
-
77
- ## Workflow
78
-
79
- 1. Capture the base branch, target branch, and authentication state:
80
-
81
- ```sh
82
- gh auth status
83
- remote_base_refs="$(git ls-remote --heads origin development main)"
84
- remote_query_status=$?
85
- if [ "$remote_query_status" -ne 0 ]; then
86
- printf 'Unable to inspect origin base branches (exit %s).\n' "$remote_query_status" >&2
87
- exit "$remote_query_status"
88
- fi
89
- case "$remote_base_refs" in
90
- *"refs/heads/development") base="development" ;;
91
- *"refs/heads/main") base="main" ;;
92
- *)
93
- printf '%s\n' "No origin/development or origin/main branch exists." >&2
94
- exit 1
95
- ;;
96
- esac
97
- target_branch="$(git branch --show-current)"
98
- test -n "$target_branch"
99
- test "$target_branch" != "$base"
100
- git status --short
101
- ```
102
-
103
- If the user names a target branch, use that branch instead of the current
104
- branch. If the target branch is not local but exists on `origin`, create a
105
- local branch from the remote head before continuing:
106
-
107
- ```sh
108
- if ! git show-ref --verify --quiet "refs/heads/$target_branch"; then
109
- git fetch origin "$target_branch:$target_branch"
110
- fi
111
- git switch "$target_branch"
112
- git fetch origin "$base" --prune
113
- ```
114
-
115
- 2. Push the target branch to the same remote branch name. Do not use
116
- `--no-verify`; pre-push hooks must run.
117
-
118
- ```sh
119
- git push -u origin "$target_branch"
120
- local_sha="$(git rev-parse HEAD)"
121
- remote_sha="$(git ls-remote --heads origin "$target_branch" | awk '{print $1}')"
122
- test "$local_sha" = "$remote_sha"
123
- ```
124
-
125
- 3. Reuse an existing open PR for this exact branch/base pair, or create one
126
- when none exists:
127
-
128
- ```sh
129
- pr_number="$(gh pr list \
130
- --head "$target_branch" \
131
- --base "$base" \
132
- --state open \
133
- --json number \
134
- --jq '.[0].number // empty')"
135
-
136
- if [ -z "$pr_number" ]; then
137
- git log --reverse --format='%s' "origin/$base..HEAD"
138
- git diff --stat "origin/$base...HEAD"
139
- pr_url="$(gh pr create \
140
- --base "$base" \
141
- --head "$target_branch" \
142
- --title "$title" \
143
- --body "$body")"
144
- pr_number="$(gh pr view "$pr_url" --json number --jq '.number')"
145
- fi
146
- ```
147
-
148
- 4. Mark draft PRs ready and check mergeability before changing history:
149
-
150
- ```sh
151
- is_draft="$(gh pr view "$pr_number" --json isDraft --jq '.isDraft')"
152
- if [ "$is_draft" = "true" ]; then
153
- gh pr ready "$pr_number"
154
- fi
155
- gh pr view "$pr_number" --json mergeStateStatus,mergeable,headRefName,baseRefName
156
- if git merge-tree --write-tree HEAD "origin/$base" >/tmp/pull-request-merge-close-merge-tree.out
157
- then
158
- merge_conflict_detected=false
159
- else
160
- merge_conflict_detected=true
161
- fi
162
- ```
163
-
164
- 5. If a merge conflict is detected, rebase the target branch on the fresh base
165
- branch. Abort and stop if the rebase conflicts:
166
-
167
- ```sh
168
- if [ "$merge_conflict_detected" = true ]; then
169
- if git rebase "origin/$base"; then
170
- git push --force-with-lease -u origin "$target_branch"
171
- else
172
- git rebase --abort
173
- echo "Rebase conflicted; aborted without merging."
174
- exit 1
175
- fi
176
- fi
177
- ```
178
-
179
- 6. Load and apply all relevant repository skills before merging, then confirm
180
- the PR is still mergeable after any validation changes.
181
-
182
- 7. Merge the PR with GitHub CLI. Delete the remote target branch only when it is
183
- not protected:
184
-
185
- ```sh
186
- protected="$(gh api "repos/{owner}/{repo}/branches/$target_branch" --jq '.protected')"
187
- protection_query_status=$?
188
- if [ "$protection_query_status" -ne 0 ]; then
189
- printf 'Unable to inspect branch protection (exit %s).\n' "$protection_query_status" >&2
190
- exit "$protection_query_status"
191
- fi
192
- case "$protected" in
193
- true|false) ;;
194
- *)
195
- printf 'Unexpected branch protection value: %s\n' "$protected" >&2
196
- exit 1
197
- ;;
198
- esac
199
- if [ "$protected" = true ]; then
200
- gh pr merge "$pr_number" --squash --admin
201
- else
202
- gh pr merge "$pr_number" --squash --admin --delete-branch
203
- fi
204
- ```
205
-
206
- 8. If the merge succeeded and the remote branch still exists while unprotected,
207
- delete it explicitly:
208
-
209
- ```sh
210
- if [ "$protected" != true ]; then
211
- remote_target_ref="$(git ls-remote --heads origin "$target_branch")"
212
- remote_query_status=$?
213
- if [ "$remote_query_status" -ne 0 ]; then
214
- printf 'Unable to inspect the remote target branch (exit %s).\n' "$remote_query_status" >&2
215
- exit "$remote_query_status"
216
- fi
217
- if [ -n "$remote_target_ref" ]; then
218
- git push origin --delete "$target_branch"
219
- fi
220
- fi
221
- ```
222
-
223
- 9. Clean up the local repository after merge:
224
-
225
- ```sh
226
- git fetch origin --prune
227
- git switch "$base"
228
- git pull --ff-only origin "$base"
229
- git branch -d "$target_branch" || git branch -D "$target_branch"
230
- git ls-remote --heads origin "$target_branch"
231
- ```
232
-
233
- 10. Final response should include the PR URL, selected base branch, whether a
234
- rebase was performed, what validation and skill checks ran, whether any
235
- cleanup commit was added, whether the remote target branch was deleted or
236
- protected, whether the local target branch was deleted, and whether local
237
- base branch is up to date.
20
+ ## Default Git Policy
21
+
22
+ Apply these defaults unless the user explicitly specifies otherwise. The
23
+ prohibition on deleting or force-pushing `main` always applies.
24
+
25
+ 1. Use `main` as the PR base and freshly fetched `origin/main` as the source of
26
+ truth. `origin/HEAD`, a stale local `main`, and the presence of `development`
27
+ do not change this default. If remote `main` is missing or cannot be fetched,
28
+ report the blocker instead of selecting another base.
29
+ 2. At task start, fetch `origin/main`, then create new work from that commit or
30
+ rebase the existing working branch onto it when needed. Honor an explicit
31
+ working-branch instruction; it changes branch selection, not freshness.
32
+ 3. Fetch again before every source-branch push. Rebase when the working branch
33
+ does not already contain the latest `origin/main`; a clean mergeability
34
+ check is not proof that rebasing is unnecessary. If it already contains that
35
+ commit, no rebase is needed. The direct `development` replacement below is a
36
+ ref synchronization, not a source-branch rebase.
37
+ 4. Squash-merge into remote `main` after the applicable validation passes.
38
+ Administrator privileges may be used to merge without GitHub reviews; they
39
+ do not authorize bypassing required checks. Verify the merge, then delete
40
+ the merged source branch remotely and locally.
41
+ 5. Fetch the latest remote `main` after merging and fast-forward local `main`
42
+ to that commit. Preserve divergent local work and report a blocked update
43
+ rather than discarding it.
44
+ 6. Replace branches named exactly `development`, locally and remotely, with
45
+ the latest remote `main` commit. Use an explicit, observed-commit
46
+ `--force-with-lease` for a non-fast-forward remote update. Create a missing
47
+ counterpart when local or remote `development` exists; leave repositories
48
+ with neither unchanged. If `development` was the merged source, recreate
49
+ it from the new `main` after deleting it. Other working branches are not
50
+ development synchronization targets.
51
+ 7. Never delete local or remote `main`, and never force-push to remote `main`,
52
+ including with `--force-with-lease`, a forced refspec, or a mirror push.
53
+ Check the exact destination ref before every deletion or forced update.
54
+
55
+ Fetches needed to establish a fresh `origin/main` at task start and before a
56
+ source-branch push are authorized without a separate approval question. Commits,
57
+ pushes, PR mutations, and branch cleanup require an authorized task; a request
58
+ for local work alone does not authorize publication. An authorized squash merge
59
+ into `main` includes the merged-source cleanup, local `main` update, and
60
+ `development` synchronization below unless the user explicitly says otherwise.
61
+ Never delete local or remote `main`, or force-push to remote `main`, including
62
+ with `--force-with-lease`.
63
+
64
+ ## Prepare The Working Branch
65
+
66
+ Work from the owning repository root. Inspect status, the current branch,
67
+ upstream, and worktrees before changing refs. Preserve unrelated changes and
68
+ existing commits; do not reset a working branch to discard its work. Use the
69
+ user-named branch, or the current source branch for a single-repository task.
70
+ If starting new work while on `main`, create a task branch from fresh
71
+ `origin/main`. Do not use `main` or the selected base as a PR source branch.
72
+ Stop if the source branch cannot be resolved or HEAD is detached.
73
+
74
+ Fetch the authoritative ref explicitly:
75
+
76
+ ```sh
77
+ git fetch origin refs/heads/main:refs/remotes/origin/main
78
+ ```
79
+
80
+ For an existing working branch, check whether it includes the fetched commit:
81
+
82
+ ```sh
83
+ if git merge-base --is-ancestor origin/main HEAD; then
84
+ printf '%s\n' 'Working branch already contains the latest origin/main.'
85
+ else
86
+ ancestry_result=$?
87
+ if [ "$ancestry_result" -ne 1 ]; then
88
+ exit "$ancestry_result"
89
+ fi
90
+ git rebase origin/main
91
+ fi
92
+ ```
93
+
94
+ Repeat the fetch and ancestry check before every source-branch push, including
95
+ pushes after validation fixes. If rebasing changes the validated inputs, rerun
96
+ the affected validation. Preserve successful evidence for unchanged inputs.
97
+ If a rebase conflicts, abort only the rebase started by this task and report
98
+ the conflict; do not push or discard work. Preserve any pre-existing Git
99
+ operation and dirty worktree rather than trying to reset through it.
100
+
101
+ Before rebasing a published source branch, record its remote commit and verify
102
+ that its existing work is accounted for locally. Reconcile unincorporated
103
+ remote work before rewriting it. Use a normal push for a new branch or a
104
+ fast-forward update. When a rebase requires rewriting the remote source, use
105
+ an explicit lease tied to the recorded source commit:
106
+
107
+ ```sh
108
+ if [ -z "$source_branch" ] || [ "$source_branch" = main ]; then
109
+ printf '%s\n' 'Refusing to delete or force-update main or an unnamed branch.' >&2
110
+ exit 1
111
+ fi
112
+ git push --set-upstream \
113
+ --force-with-lease="refs/heads/$source_branch:$observed_source_commit" \
114
+ origin "HEAD:refs/heads/$source_branch"
115
+ ```
116
+
117
+ Resolve `source_branch` and `observed_source_commit` from verified repository
118
+ state before using this example. Do not replace a rejected lease with
119
+ `--force` or retry against a new expected commit without inspecting the remote
120
+ change. Keep hooks enabled. Verify that the remote source commit equals the
121
+ local commit after a successful push.
122
+
123
+ ## Create Or Update The Pull Request
124
+
125
+ 1. Confirm GitHub authentication, the intended source branch, and the clean,
126
+ committed changes included in the PR. Load the owning repository skills and
127
+ run their applicable validation. Stage and commit only authorized changes;
128
+ preserve supplied branch names, titles, commit messages, and PR text.
129
+ 2. Prepare and push the source branch using the fresh-main procedure above.
130
+ 3. Find the open PR for that source. Reuse the exact source/base match. If
131
+ automation created the task PR against `development`, retarget that PR to
132
+ `main` and recheck its diff and checks instead of creating a duplicate.
133
+ Honor an explicit user-selected base; do not silently retarget that choice.
134
+ 4. Create a missing PR against `main` when PR creation is authorized. Use a
135
+ file for a multiline body with `gh pr create --body-file` or
136
+ `gh pr edit --body-file`. Do not create an empty PR for a source already
137
+ represented in the base; report the no-op and perform only authorized
138
+ cleanup supported by merge or content-equivalence evidence.
139
+ 5. Mark draft PRs ready in the authorized create/update/ready or merge workflow,
140
+ while preserving an explicit request to keep the PR as a draft. Keep the title factual and preserve exact user-supplied text.
141
+ A create/update-only request ends with the PR; it does not authorize merging.
142
+
143
+ ## Squash Merge And Delete The Source Branch
144
+
145
+ 1. Verify the PR base, source branch, source commit, draft state, mergeability,
146
+ and required validation. Push any authorized changes through the fresh-main
147
+ procedure first. Confirm checks apply to the commit being merged. Record
148
+ local and remote development presence and commit IDs before source cleanup.
149
+ 2. Squash-merge the verified source commit. Administrator privileges are
150
+ permitted to merge without reviews, with applicable checks still passing:
151
+
152
+ ```sh
153
+ gh pr merge "$pr_number" --squash --admin \
154
+ --match-head-commit "$source_commit"
155
+ ```
156
+
157
+ Preserve a supplied squash message with `--subject` and, for remaining
158
+ lines, `--body-file`. Do not change repository rules to make a merge pass.
159
+
160
+ 3. Verify GitHub reports the PR as merged and record its squash commit. Fetch
161
+ `origin/main` and prove it contains that squash commit. A squash merge does
162
+ not preserve source commit IDs, so ordinary source ancestry alone is not
163
+ merge proof.
164
+ 4. Before deleting anything, verify the source is not `main`, the local source
165
+ has no newer unmerged work, and the remote source still equals the merged
166
+ source commit. Delete an existing remote source using a lease so a
167
+ concurrent push is not erased:
168
+
169
+ ```sh
170
+ if [ -z "$source_branch" ] || [ "$source_branch" = main ]; then
171
+ printf '%s\n' 'Refusing to delete or force-update main or an unnamed branch.' >&2
172
+ exit 1
173
+ fi
174
+ git push --force-with-lease="refs/heads/$source_branch:$source_commit" \
175
+ origin ":refs/heads/$source_branch"
176
+ ```
177
+
178
+ An already-absent remote branch needs no deletion. If branch protection or
179
+ a changed source prevents deletion, report cleanup as blocked; do not alter
180
+ repository protection or discard newly added commits.
181
+
182
+ 5. Switch safely off the source branch. Delete the verified merged local
183
+ source. `git branch -D -- "$source_branch"` is permitted only after the
184
+ explicit non-`main` guard and squash-merge proof; do not use an unconditional
185
+ `-d || -D` fallback. Preserve dirty or independently checked-out worktrees.
186
+ Confirm source absence locally and remotely. A merged `development` source
187
+ is subsequently recreated under the synchronization rule below.
188
+
189
+ ## Synchronize Main And Development
190
+
191
+ Run after an authorized squash merge into `main`, unless the user explicitly
192
+ changes the cleanup instructions. Do not reset development after a merge into
193
+ an explicitly selected different base.
194
+
195
+ 1. Fetch `origin/main` again. Fast-forward local `main` with
196
+ `git merge --ff-only origin/main` while on `main`, or create local `main`
197
+ from `origin/main` if missing. If local `main` diverges, preserve its commits
198
+ and report the blocked synchronization. Never force-push or delete `main`.
199
+ 2. Use the old local and remote `development` commit IDs and presence recorded
200
+ before source cleanup. If neither existed, report development sync
201
+ as not applicable. Otherwise ensure both refs point to the freshly fetched
202
+ `origin/main` commit, creating a missing counterpart. This intentionally
203
+ replaces divergent development history; preserve dirty worktrees and do
204
+ not apply it to any other working branch.
205
+ 3. Record `main_commit` from `origin/main` and `observed_development_commit`
206
+ from a successful remote query; use an empty expected value only when that
207
+ query proves the remote branch absent. Update the remote with an explicit
208
+ destination and lease:
209
+
210
+ ```sh
211
+ git push \
212
+ --force-with-lease="refs/heads/development:$observed_development_commit" \
213
+ origin "$main_commit:refs/heads/development"
214
+ ```
215
+
216
+ Skip a push when the remote ref already equals `main_commit`. A rejected
217
+ lease requires inspecting concurrent changes before attempting another
218
+ update. Do not use a broad force push or mirror push.
219
+
220
+ 4. From the clean `main` checkout, create or repoint local `development` at
221
+ `main_commit` and set it to track `origin/development`. Do not overwrite a
222
+ branch checked out with uncommitted work in another worktree. Keep the
223
+ checkout on `main` unless the user specified a different final branch.
224
+ 5. Fetch and query the final remote refs. Verify commit equality for local
225
+ `main`, remote `main`, and both `development` refs where applicable, together
226
+ with merged-source absence, except when the source was `development` and
227
+ has been recreated at the new main commit. Tree equality alone is
228
+ insufficient for these synchronized refs. If remote `main` advanced, synchronize to its new commit
229
+ and recheck; report an unstable or blocked state instead of claiming parity.
230
+
231
+ ## Reporting
232
+
233
+ Report the repository, working branch, fetched main commit, whether rebasing
234
+ was needed, validation results, push result, PR URL and state, administrator
235
+ merge use, source cleanup, final checkout, and main/development commit parity.
236
+ Distinguish merged, unchanged, not applicable, and blocked repositories. Give
237
+ the exact failing command and reason for an incomplete step. Do not amend
238
+ commits unless explicitly requested; use additive commits for follow-up work.
238
239
 
239
240
  ## TDD And Validation
240
241
 
@@ -1,5 +1,5 @@
1
1
  interface:
2
- display_name: 'GitHub PR Merge And Cleanup'
3
- short_description: 'Review, validate, merge, close, delete branch, and clean local state for a GitHub pull request targeting origin/development'
4
- brand_color: '#0F766E'
5
- default_prompt: 'Use $github-pr-merge-cleanup when this task matches the skill scope.'
2
+ display_name: 'GitHub PR Merge And Cleanup'
3
+ short_description: 'Squash-merge PRs and synchronize main and development'
4
+ brand_color: '#0F766E'
5
+ default_prompt: 'Use $github-pr-merge-cleanup when this task matches the skill scope.'
@@ -54,30 +54,79 @@ Always publish packages in this order, one repository at a time:
54
54
  5. `@carecard/telemetry`
55
55
 
56
56
  Publish by pushing the package release branch, creating or reusing a pull
57
- request into `development`, marking it ready, waiting for checks, squash-merging
57
+ request into `main`, marking it ready, waiting for checks, squash-merging
58
58
  with administrator privileges, and verifying npm publication with:
59
59
 
60
60
  ```sh
61
61
  npm view <package-name>@<target-version> version
62
62
  ```
63
63
 
64
- The package GitHub workflow publishes automatically from `development`. Do not
65
- create a `main` merge unless the user explicitly asks for it.
64
+ The package GitHub workflows accept pushes to `main` and `development` and
65
+ publish an unpublished version. Use the `main` squash merge as the release
66
+ path and verify npm publication before continuing. Subsequent development
67
+ synchronization must reuse the same version; it is not a second release.
68
+
69
+ ## Default Git Policy
70
+
71
+ Apply these defaults unless the user explicitly specifies otherwise. The
72
+ prohibition on deleting or force-pushing `main` always applies.
73
+
74
+ 1. Use `main` as the PR base and freshly fetched `origin/main` as the source of
75
+ truth. `origin/HEAD`, a stale local `main`, and the presence of `development`
76
+ do not change this default. If remote `main` is missing or cannot be fetched,
77
+ report the blocker instead of selecting another base.
78
+ 2. At task start, fetch `origin/main`, then create new work from that commit or
79
+ rebase the existing working branch onto it when needed. Honor an explicit
80
+ working-branch instruction; it changes branch selection, not freshness.
81
+ 3. Fetch again before every source-branch push. Rebase when the working branch
82
+ does not already contain the latest `origin/main`; a clean mergeability
83
+ check is not proof that rebasing is unnecessary. If it already contains that
84
+ commit, no rebase is needed. The direct `development` replacement below is a
85
+ ref synchronization, not a source-branch rebase.
86
+ 4. Squash-merge into remote `main` after the applicable validation passes.
87
+ Administrator privileges may be used to merge without GitHub reviews; they
88
+ do not authorize bypassing required checks. Verify the merge, then delete
89
+ the merged source branch remotely and locally.
90
+ 5. Fetch the latest remote `main` after merging and fast-forward local `main`
91
+ to that commit. Preserve divergent local work and report a blocked update
92
+ rather than discarding it.
93
+ 6. Replace branches named exactly `development`, locally and remotely, with
94
+ the latest remote `main` commit. Use an explicit, observed-commit
95
+ `--force-with-lease` for a non-fast-forward remote update. Create a missing
96
+ counterpart when local or remote `development` exists; leave repositories
97
+ with neither unchanged. If `development` was the merged source, recreate
98
+ it from the new `main` after deleting it. Other working branches are not
99
+ development synchronization targets.
100
+ 7. Never delete local or remote `main`, and never force-push to remote `main`,
101
+ including with `--force-with-lease`, a forced refspec, or a mirror push.
102
+ Check the exact destination ref before every deletion or forced update.
103
+
104
+ Fetches needed to establish a fresh `origin/main` at task start and before a
105
+ source-branch push are authorized without a separate approval question. Commits,
106
+ pushes, PR mutations, and branch cleanup require an authorized task; a request
107
+ for local work alone does not authorize publication. An authorized squash merge
108
+ into `main` includes the merged-source cleanup, local `main` update, and
109
+ `development` synchronization below unless the user explicitly says otherwise.
110
+ Never delete local or remote `main`, or force-push to remote `main`, including
111
+ with `--force-with-lease`.
66
112
 
67
113
  ## Deferred Package Push
68
114
 
69
115
  Commit coordinated version and dependency updates locally as the release sequence
70
116
  progresses. Do not push a `pkg-*` release branch until that package is the next
71
- package being published by merge into `development`.
117
+ package being published by merge into `main`.
72
118
 
73
119
  Immediately before each package's publishing turn:
74
120
 
75
121
  1. Verify the repository is on the intended release branch and has a clean
76
122
  working tree.
77
123
  2. Run required validation and every direct `.husky` script for that repository.
78
- 3. Push that package's release branch.
79
- 4. Create or reuse the pull request into `development`, merge it, and wait for
80
- npm publication before continuing to dependency fanout.
124
+ 3. Fetch `origin/main` again, rebase the release branch when it does not already
125
+ contain that commit, and push with hooks enabled. Use an explicit observed-commit
126
+ lease if a rebase requires rewriting an already-pushed source branch.
127
+ 4. Create or reuse the pull request into `main`, merge it, and wait for
128
+ npm publication before continuing to dependency fanout. Complete merged-source
129
+ cleanup and main/development synchronization under the default Git policy.
81
130
 
82
131
  ## Dependency Fanout
83
132
 
@@ -1,10 +1,13 @@
1
1
  ---
2
2
  name: pkg-validate-coding-standards-and-best-practices
3
- description: 'Mandatory for every pkg-validate task, including analysis, clarification, planning, implementation, review, debugging, documentation, public API work, skill maintenance, and validation. Use before every narrower skill.'
3
+ description: 'Use after carecard-must-do. Mandatory for every pkg-validate task, including analysis, clarification, planning, implementation, review, debugging, documentation, public API work, skill maintenance, and validation. Use before every narrower skill.'
4
4
  ---
5
5
 
6
6
  # Pkg Validate Coding Standards And Best Practices
7
7
 
8
+ First read [carecard-must-do](../carecard-must-do/SKILL.md); it is mandatory for every agent and task.
9
+ Then apply this engineering standard before selecting narrower skills.
10
+
8
11
  ## JavaScript And TypeScript Style Contract
9
12
 
10
13
  - Require braces around every optional control-flow body through ESLint core
@@ -40,7 +43,7 @@ cross-repository end-to-end testing is its explicit responsibility.
40
43
 
41
44
  ## Mandatory Use And Authorities
42
45
 
43
- Load this skill before doing any work in `pkg-validate`, including read-only
46
+ After `carecard-must-do`, load this skill before doing any work in `pkg-validate`, including read-only
44
47
  and documentation-only work. Then load every narrower skill that owns the
45
48
  affected package contract.
46
49
 
@@ -181,7 +184,11 @@ them unused and replaced.
181
184
  none exists, run the strongest repository-native focused validation.
182
185
  5. Fix every in-scope failure at its root cause and rerun the exact command.
183
186
  6. Report exact commands, results, limitations, and remaining risk.
184
- 7. Do not perform remote Git or GitHub operations unless explicitly requested.
187
+ 7. Fetch the latest `origin/main` at task start and before every source-branch push;
188
+ these required fetches need no separate approval. Start new work from that
189
+ commit or rebase existing work when it does not already contain it. Commits,
190
+ pushes, PR mutations, and branch cleanup still require an authorized task.
191
+ Never delete local or remote `main` or force-push to remote `main`.
185
192
 
186
193
  ## TDD And Validation
187
194