Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f1bb99c
Initial commit with task details
konard Sep 4, 2026
469484f
docs: collect CI/CD evidence and deep analysis for issue #199
konard Sep 4, 2026
50c467e
fix(ci): stop reporting a successful npm publish as a failure
konard Sep 4, 2026
7bd6eab
fix(ci): make Rust warnings fail the build and clear the backlog
konard Sep 4, 2026
84610d4
docs(dev-log): commit the CI evidence collected for issue #199
konard Sep 4, 2026
72a681c
fix(ci): make the JavaScript lint and duplication gates actually chec…
konard Sep 4, 2026
a0d9fd5
fix(ci): lint and format the whole repository, not just js/
konard Sep 4, 2026
e1e3f39
fix(ci): lint the workflows themselves and clear every finding
konard Sep 4, 2026
7c418fd
test(ci): match the layout guard to the root lint config and !cancell…
konard Sep 4, 2026
9bae0c4
fix(deps): clear the audit findings in both JavaScript lockfiles
konard Sep 4, 2026
bd6946c
feat(ci): audit the dependency trees and analyse the sources
konard Sep 4, 2026
2d1b6f4
test(ci): pin the workflow-level-secrets invariant, record the jscpd …
konard Sep 4, 2026
e08edeb
fix(ci): scope the zizmor audit and degrade dependency review gracefully
konard Sep 4, 2026
a00126b
chore(release): add the changeset and changelog fragment for issue #199
konard Sep 4, 2026
0dec3bc
fix(ci): clear the two warnings -D warnings surfaced outside Linux
konard Sep 4, 2026
4243a61
docs(analysis): record the off-Linux warnings and the fourth upstream…
konard Sep 4, 2026
6c26793
fix(ci): run the three Rust guards that shipped without a caller
konard Sep 4, 2026
2664646
feat(ci): scan the tree for committed credentials
konard Sep 4, 2026
fa82ddd
feat(ci): validate the real merge result, not a stale merge preview
konard Sep 4, 2026
ed871d8
feat(ci): validate the documentation the same way the code is validated
konard Sep 4, 2026
3e32781
fix(ci): stop letting whole classes of change go unchecked
konard Sep 4, 2026
3dc7470
docs(ci): describe the sixth workflow and the four new invariants
konard Sep 4, 2026
0a3971e
ci: check external links weekly instead of on pull requests
konard Sep 4, 2026
0596cec
test: list tracked files without a shell so the checks work on Windows
konard Sep 4, 2026
d76ea3b
docs(dev/log): record root causes 4.17-4.23 and the two new upstream …
konard Sep 4, 2026
66e1cae
ci: document and pin the duplication threshold, drop the bootstrap .g…
konard Sep 4, 2026
52ca330
ci: audit workflows at low confidence so credential persistence is vi…
konard Sep 5, 2026
bff14f3
test: skip the publish suite when the CDN it depends on is unreachable
konard Sep 5, 2026
2f8fb5f
docs: describe the CDN reproduction accurately
konard Sep 5, 2026
7b7ae01
test: keep the evidence archive non-executable
konard Sep 5, 2026
cd04d48
fix(release): load use-m through a shared loader with timeout and ret…
konard Sep 5, 2026
b7b43af
docs: record the use-m loader invariant, the debug switches and issue…
konard Sep 5, 2026
5373794
docs(dev/log): correct the module-scope caller count in the #161 report
konard Sep 5, 2026
25a6493
fix: load use-m through the shared loader in claude-profiles.mjs too
konard Sep 5, 2026
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
56 changes: 56 additions & 0 deletions .github/scripts/simulate-fresh-merge.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env bash
#
# Fresh merge simulation.
#
# A pull-request run checks out GitHub's merge preview, refs/pull/N/merge. That
# ref is computed when the pull request is opened or synchronised, so a run that
# starts after main has moved can still be validating an old merge base: the
# checks pass, the merge lands, and main breaks on code no job ever saw
# together. Merging the current base branch into the checkout before the checks
# run removes that window, and a merge conflict fails the job with a clear
# message instead of surfacing as a conflict at merge time.
#
# This is principle #7 ("Validate the actual merge result") of
# https://github.com/link-assistant/hive-mind/blob/main/docs/CI-CD-BEST-PRACTICES.md
#
# The merge is local to the runner: nothing is pushed, and the jobs that call
# this check out with persist-credentials: false.
#
# Requirements: the calling job must check out with `fetch-depth: 0`, otherwise
# the shallow clone has no merge base to work from.
#
# Environment:
# BASE_REF - the base branch to merge in (default: main). In GitHub Actions
# this is github.base_ref, which is set only for pull_request
# events; the calling step is guarded accordingly.
#
# Usage (locally, on a branch):
# BASE_REF=main bash .github/scripts/simulate-fresh-merge.sh
set -euo pipefail

BASE_REF="${BASE_REF:-main}"

# An identity is required for `git merge` to be able to write a merge commit.
# The 41898282+ prefix is the one that attributes a commit to github-actions[bot];
# the commit never leaves the runner, but using the right identity keeps it out
# of the "unattributed" bucket if it ever does.
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git config user.name 'github-actions[bot]'

git fetch --no-tags origin "${BASE_REF}"

behind="$(git rev-list --count "HEAD..origin/${BASE_REF}")"
if [ "${behind}" -eq 0 ]; then
echo "Merge preview already contains every commit on ${BASE_REF}; nothing to simulate."
exit 0
fi

echo "${BASE_REF} has ${behind} commit(s) that the merge preview does not contain."
echo "Merging origin/${BASE_REF} so the checks below run against the real merge result."

if ! git merge "origin/${BASE_REF}" --no-edit; then
echo "::error::Merge conflict with ${BASE_REF}. Update this branch before it can be merged."
exit 1
fi

echo "Fresh merge succeeded; the checks below run against the merged tree."
Loading
Loading