@wistantkode/dotfiles 1.4.0 → 1.5.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/CHANGELOG.md +7 -0
- package/README.md +6 -3
- package/bin/cli.mjs +50 -13
- package/github.sh +180 -81
- package/package.json +1 -1
- package/protocols/ASSIST.md +3 -2
- package/protocols/COMMIT.md +9 -5
- package/protocols/RODIN.md +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.5.0] - 2026-04-05 - [Iron Gate & Neon Dash]
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **Protocol Hardening**: Integrated strict "Zero-Initiative" and "Separation of Concerns" rules into `RODIN.md` and `COMMIT.md`. AI is now formally forbidden from touching release artifacts outside of Release mode.
|
|
9
|
+
- **Elite UI Overhaul**: Complete refactor of `github.sh` and `bin/cli.mjs` with premium 256-color aesthetics, box-drawing tables, and animated progress bars.
|
|
10
|
+
- **Enhanced Gatekeeping**: `github.sh` now performs a silent tag-delta audit and forces manual confirmation on production branches.
|
|
11
|
+
|
|
5
12
|
## [1.4.0] - 2026-04-05 - [Community-Grade Governance]
|
|
6
13
|
|
|
7
14
|
### Added
|
package/README.md
CHANGED
|
@@ -73,8 +73,8 @@ pnpm dlx @wistantkode/dotfiles
|
|
|
73
73
|
|
|
74
74
|
### Included Assets
|
|
75
75
|
- **Professional `.gitignore`**: PRODUCTION-READY baseline for all modern stacks.
|
|
76
|
-
-
|
|
77
|
-
- **
|
|
76
|
+
- **Security & Integrity**: Injected `.protocols/` folder for immediate AI alignment.
|
|
77
|
+
- **Universal License**: Apache 2.0 baseline for all technical distributions.
|
|
78
78
|
|
|
79
79
|
---
|
|
80
80
|
|
|
@@ -82,9 +82,12 @@ pnpm dlx @wistantkode/dotfiles
|
|
|
82
82
|
|
|
83
83
|
| Standard | Role | Reference |
|
|
84
84
|
| :--- | :--- | :--- |
|
|
85
|
-
| **
|
|
85
|
+
| **Audit Philosophy** | Socratic auditing and architectural integrity. | [RODIN.md](./protocols/RODIN.md) |
|
|
86
86
|
| **Commit Protocol** | Strict atomic formatting and zero-entropy staging. | [COMMIT.md](./protocols/COMMIT.md) |
|
|
87
87
|
| **Release Flow** | Socratic versioning and manual sealing logic. | [RELEASE.md](./protocols/RELEASE.md) |
|
|
88
|
+
| **Security First** | Vulnerability audits and secret scanning protocols. | [SECURITY.md](./protocols/SECURITY.md) |
|
|
89
|
+
|
|
90
|
+
> See [_INDEX.md](./protocols/_INDEX.md) for the full library of orchestration protocols.
|
|
88
91
|
|
|
89
92
|
---
|
|
90
93
|
|
package/bin/cli.mjs
CHANGED
|
@@ -1,22 +1,46 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { copyFile, mkdir, readdir, lstat } from 'node:fs/promises';
|
|
4
|
-
import { join, dirname
|
|
4
|
+
import { join, dirname } from 'node:path';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
|
|
7
|
+
// ── UI Configuration (256-color) ──────────────────────────────────────
|
|
8
|
+
const RESET = '\x1b[0m';
|
|
9
|
+
const BOLD = '\x1b[1m';
|
|
10
|
+
const DIM = '\x1b[2m';
|
|
11
|
+
const CYAN = '\x1b[38;5;117m';
|
|
12
|
+
const GREEN = '\x1b[38;5;114m';
|
|
13
|
+
const YELLOW = '\x1b[38;5;221m';
|
|
14
|
+
const RED = '\x1b[38;5;203m';
|
|
15
|
+
const GRAY = '\x1b[38;5;244m';
|
|
16
|
+
const WHITE = '\x1b[38;5;255m';
|
|
17
|
+
const DGRAY = '\x1b[38;5;238m';
|
|
18
|
+
|
|
7
19
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
20
|
const pkgRoot = join(__dirname, '..');
|
|
9
21
|
|
|
10
22
|
const FILES_TO_INSTALL = [
|
|
11
23
|
'gitignore',
|
|
12
|
-
'
|
|
13
|
-
'myKDEshorcuts.kksrc'
|
|
24
|
+
'LICENSE'
|
|
14
25
|
];
|
|
15
26
|
|
|
16
27
|
const DIRECTORIES_TO_INSTALL = [
|
|
17
28
|
'protocols'
|
|
18
29
|
];
|
|
19
30
|
|
|
31
|
+
// ── Utilities ─────────────────────────────────────────────────────────
|
|
32
|
+
|
|
33
|
+
const sep = () => console.log(`${DGRAY}${'─'.repeat(60)}${RESET}`);
|
|
34
|
+
|
|
35
|
+
const progress = async (label) => {
|
|
36
|
+
process.stdout.write(` ${GRAY}[${RESET}`);
|
|
37
|
+
for (let i = 0; i < 24; i++) {
|
|
38
|
+
process.stdout.write(`${CYAN}█${RESET}`);
|
|
39
|
+
await new Promise(r => setTimeout(r, 15));
|
|
40
|
+
}
|
|
41
|
+
process.stdout.write(`${GRAY}]${RESET} ${GREEN}${label}${RESET}\n`);
|
|
42
|
+
};
|
|
43
|
+
|
|
20
44
|
async function copyRecursive(src, dest) {
|
|
21
45
|
const stat = await lstat(src);
|
|
22
46
|
if (stat.isDirectory()) {
|
|
@@ -31,36 +55,49 @@ async function copyRecursive(src, dest) {
|
|
|
31
55
|
}
|
|
32
56
|
|
|
33
57
|
async function run() {
|
|
34
|
-
console.
|
|
35
|
-
|
|
58
|
+
console.clear();
|
|
59
|
+
console.log(`\n ${WHITE}${BOLD}◆ DOTFILES INSTALLER${RESET} ${DGRAY}· @wistantkode/dotfiles${RESET}\n`);
|
|
60
|
+
sep();
|
|
61
|
+
|
|
36
62
|
const targetDir = process.cwd();
|
|
37
|
-
console.log(
|
|
63
|
+
console.log(`\n ${GRAY}Target Directory:${RESET} ${CYAN}${BOLD}${targetDir}${RESET}\n`);
|
|
64
|
+
|
|
65
|
+
sep();
|
|
66
|
+
console.log(`\n ${BOLD}▶ Initiating deployment...${RESET}\n`);
|
|
38
67
|
|
|
68
|
+
await progress('Verifying package integrity...');
|
|
69
|
+
|
|
70
|
+
// Files deployment
|
|
39
71
|
for (const file of FILES_TO_INSTALL) {
|
|
40
72
|
try {
|
|
41
73
|
const destName = file === 'gitignore' ? '.gitignore' : file;
|
|
42
74
|
await copyFile(join(pkgRoot, file), join(targetDir, destName));
|
|
43
|
-
console.log(`
|
|
75
|
+
console.log(` ${GREEN}✔${RESET} Deployed ${BOLD}${destName}${RESET}`);
|
|
44
76
|
} catch (err) {
|
|
45
|
-
console.error(`
|
|
77
|
+
console.error(` ${RED}✘${RESET} Failed to deploy ${file}: ${err.message}`);
|
|
46
78
|
}
|
|
47
79
|
}
|
|
48
80
|
|
|
81
|
+
// Directories deployment
|
|
49
82
|
for (const dir of DIRECTORIES_TO_INSTALL) {
|
|
50
83
|
try {
|
|
51
84
|
const destName = dir === 'protocols' ? '.protocols' : dir;
|
|
52
85
|
await copyRecursive(join(pkgRoot, dir), join(targetDir, destName));
|
|
53
|
-
console.log(`
|
|
86
|
+
console.log(` ${GREEN}✔${RESET} Deployed ${BOLD}${destName}/${RESET}`);
|
|
54
87
|
} catch (err) {
|
|
55
|
-
console.error(`
|
|
88
|
+
console.error(` ${RED}✘${RESET} Failed to deploy ${dir}: ${err.message}`);
|
|
56
89
|
}
|
|
57
90
|
}
|
|
58
91
|
|
|
59
|
-
|
|
60
|
-
|
|
92
|
+
await progress('Finalizing configuration...');
|
|
93
|
+
|
|
94
|
+
console.log(`\n ${GREEN}${BOLD}✔ SUCCESS${RESET} Infrastructure deployed successfully.`);
|
|
95
|
+
console.log(` ${GRAY}Your environment is now orchestrated by @wistantkode protocols.${RESET}\n`);
|
|
96
|
+
sep();
|
|
97
|
+
console.log('');
|
|
61
98
|
}
|
|
62
99
|
|
|
63
100
|
run().catch(err => {
|
|
64
|
-
console.error(
|
|
101
|
+
console.error(`\n ${RED}${BOLD}✗ FATAL ERROR${RESET} ${err.message}\n`);
|
|
65
102
|
process.exit(1);
|
|
66
103
|
});
|
package/github.sh
CHANGED
|
@@ -1,107 +1,206 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
GREEN='\033[
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
3
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
4
|
+
# GITHUB SYNC · Integrity Gate · @wistantkode/dotfiles
|
|
5
|
+
# ═══════════════════════════════════════════════════════════════════════
|
|
6
|
+
|
|
7
|
+
# ── Color palette (256-color) ─────────────────────────────────────────
|
|
8
|
+
RESET='\033[0m'; BOLD='\033[1m'; DIM='\033[2m'
|
|
9
|
+
RED='\033[38;5;203m'; GREEN='\033[38;5;114m'; YELLOW='\033[38;5;221m'
|
|
10
|
+
CYAN='\033[38;5;117m'; BLUE='\033[38;5;75m'; GRAY='\033[38;5;244m'
|
|
11
|
+
DGRAY='\033[38;5;238m'; WHITE='\033[38;5;255m'; ORANGE='\033[38;5;215m'
|
|
12
|
+
|
|
13
|
+
# ── Table dimensions ──────────────────────────────────────────────────
|
|
14
|
+
HASH_W=8 # hash column display width
|
|
15
|
+
MSG_W=52 # message column display width
|
|
16
|
+
|
|
17
|
+
# ── Layout helpers ────────────────────────────────────────────────────
|
|
18
|
+
_rep() { printf "%${1}s" | tr ' ' "${2}"; }
|
|
19
|
+
_sep() { echo -e "${DGRAY}$(_rep 68 '─')${RESET}"; }
|
|
20
|
+
_sep2() { echo -e "${DGRAY} $(_rep 64 '·')${RESET}"; }
|
|
21
|
+
|
|
22
|
+
_header() {
|
|
23
|
+
echo -e "${DGRAY} ╭$(_rep $((HASH_W+2)) '─')┬$(_rep $((MSG_W+2)) '─')╮${RESET}"
|
|
24
|
+
printf "${DGRAY} │${RESET} ${BOLD}${GRAY}%-${HASH_W}s${RESET} ${DGRAY}│${RESET} ${BOLD}${GRAY}%-${MSG_W}s${RESET} ${DGRAY}│${RESET}\n" "HASH" "COMMIT"
|
|
25
|
+
echo -e "${DGRAY} ├$(_rep $((HASH_W+2)) '─')┼$(_rep $((MSG_W+2)) '─')┤${RESET}"
|
|
19
26
|
}
|
|
20
27
|
|
|
28
|
+
_row() {
|
|
29
|
+
local hash msg
|
|
30
|
+
hash=$(printf "%-${HASH_W}s" "${1:0:$HASH_W}")
|
|
31
|
+
local raw="$2"
|
|
32
|
+
[ ${#raw} -gt $((MSG_W-1)) ] && raw="${raw:0:$((MSG_W-3))}..."
|
|
33
|
+
msg=$(printf "%-${MSG_W}s" "$raw")
|
|
34
|
+
printf "${DGRAY} │${RESET} ${CYAN}%s${RESET} ${DGRAY}│${RESET} %s ${DGRAY}│${RESET}\n" "$hash" "$msg"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_footer() {
|
|
38
|
+
echo -e "${DGRAY} ╰$(_rep $((HASH_W+2)) '─')┴$(_rep $((MSG_W+2)) '─')╯${RESET}"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# ── Progress bar animation ────────────────────────────────────────────
|
|
42
|
+
_progress() {
|
|
43
|
+
local label="$1"
|
|
44
|
+
local total=28
|
|
45
|
+
printf " ${GRAY}[${RESET}"
|
|
46
|
+
for ((i=1; i<=total; i++)); do
|
|
47
|
+
printf "${CYAN}█${RESET}"
|
|
48
|
+
sleep 0.018
|
|
49
|
+
done
|
|
50
|
+
printf "${GRAY}]${RESET} ${GREEN}${label}${RESET}\n"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# ── Core utilities ────────────────────────────────────────────────────
|
|
21
54
|
abort() {
|
|
22
|
-
echo
|
|
23
|
-
|
|
24
|
-
echo -e "${GRAY}
|
|
55
|
+
echo ""
|
|
56
|
+
_sep
|
|
57
|
+
echo -e " ${RED}${BOLD}✗ ABORTED${RESET} ${GRAY}$1${RESET}"
|
|
58
|
+
_sep
|
|
59
|
+
echo ""
|
|
25
60
|
exit 1
|
|
26
61
|
}
|
|
27
62
|
|
|
28
|
-
|
|
29
|
-
echo -ne "${YELLOW}${BOLD}
|
|
30
|
-
read -r
|
|
31
|
-
|
|
32
|
-
return 1
|
|
33
|
-
fi
|
|
34
|
-
return 0
|
|
63
|
+
ask() {
|
|
64
|
+
echo -ne "\n ${YELLOW}${BOLD}?${RESET} $1 ${GRAY}[y/N]${RESET} "
|
|
65
|
+
read -r _r
|
|
66
|
+
[[ "$_r" =~ ^([yY][eE][sS]|[yY])$ ]]
|
|
35
67
|
}
|
|
36
68
|
|
|
37
|
-
#
|
|
38
|
-
|
|
69
|
+
# ── Phase 0 · Silent data collection ─────────────────────────────────
|
|
70
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) \
|
|
71
|
+
|| { echo -e "\n ${RED}✗${RESET} Not a git repository."; exit 1; }
|
|
72
|
+
|
|
73
|
+
REMOTE="origin/${CURRENT_BRANCH}"
|
|
74
|
+
COMMITS_RAW=$(git log "${REMOTE}..HEAD" --oneline 2>/dev/null)
|
|
75
|
+
COMMIT_COUNT=0
|
|
76
|
+
[ -n "$COMMITS_RAW" ] && COMMIT_COUNT=$(echo "$COMMITS_RAW" | wc -l | tr -d ' ')
|
|
77
|
+
|
|
78
|
+
LOCAL_ONLY_TAGS=$(
|
|
79
|
+
git log --tags --simplify-by-decoration --pretty="format:%D" 2>/dev/null \
|
|
80
|
+
| grep "tag: " \
|
|
81
|
+
| sed 's/.*tag: \([^,)]*\).*/\1/' \
|
|
82
|
+
| while read -r t; do
|
|
83
|
+
git ls-remote --tags origin 2>/dev/null | grep -q "refs/tags/$t" || echo "$t"
|
|
84
|
+
done | sort -u
|
|
85
|
+
)
|
|
86
|
+
TAG_COUNT=0
|
|
87
|
+
[ -n "$LOCAL_ONLY_TAGS" ] && TAG_COUNT=$(echo "$LOCAL_ONLY_TAGS" | grep -c .)
|
|
88
|
+
PUSH_TAGS=""
|
|
89
|
+
[ "$TAG_COUNT" -gt 0 ] && PUSH_TAGS="--tags"
|
|
39
90
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
91
|
+
case "$CURRENT_BRANCH" in
|
|
92
|
+
main|master) BLABEL="${RED}${BOLD}⬡ PRODUCTION${RESET}" ;;
|
|
93
|
+
dev|develop) BLABEL="${YELLOW}◈ INTEGRATION${RESET}" ;;
|
|
94
|
+
feat/*) BLABEL="${GREEN}◈ FEATURE${RESET}" ;;
|
|
95
|
+
fix/*) BLABEL="${CYAN}◈ BUGFIX${RESET}" ;;
|
|
96
|
+
refactor/*) BLABEL="${BLUE}◈ REFACTOR${RESET}" ;;
|
|
97
|
+
*) BLABEL="${GRAY}◈ BRANCH${RESET}" ;;
|
|
98
|
+
esac
|
|
99
|
+
|
|
100
|
+
# ── Phase 1 · Working tree check ─────────────────────────────────────
|
|
101
|
+
clear
|
|
102
|
+
echo ""
|
|
103
|
+
echo -e " ${WHITE}${BOLD}◆ GITHUB SYNC${RESET} ${DGRAY}· Integrity Gate · @wistantkode/dotfiles${RESET}"
|
|
104
|
+
echo ""
|
|
105
|
+
_sep
|
|
106
|
+
|
|
107
|
+
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
|
|
108
|
+
echo ""
|
|
109
|
+
echo -e " ${YELLOW}${BOLD}⚠ DIRTY WORKING TREE${RESET}"
|
|
110
|
+
echo ""
|
|
111
|
+
git status -s | sed 's/^/ /'
|
|
112
|
+
abort "Stage and commit all changes before syncing."
|
|
45
113
|
fi
|
|
46
114
|
|
|
47
|
-
# 2
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
echo
|
|
53
|
-
|
|
54
|
-
if ! git ls-remote --tags origin 2>/dev/null | grep -q "refs/tags/$tag"; then
|
|
55
|
-
echo $tag
|
|
56
|
-
fi
|
|
57
|
-
done | sort -u)
|
|
58
|
-
|
|
59
|
-
if [ -n "$LOCAL_ONLY_TAGS" ]; then
|
|
60
|
-
echo -e "${YELLOW}${BOLD}[DELTA]${RESET} Local tags not yet sealed on remote:"
|
|
61
|
-
for tag in $LOCAL_ONLY_TAGS; do
|
|
62
|
-
echo -e " - ${BOLD}$tag${RESET}"
|
|
63
|
-
done
|
|
115
|
+
# ── Phase 2 · Summary panel ───────────────────────────────────────────
|
|
116
|
+
echo ""
|
|
117
|
+
printf " ${GRAY}%-14s${RESET} ${CYAN}${BOLD}%s${RESET} %b\n" "Branch" "$CURRENT_BRANCH" "$BLABEL"
|
|
118
|
+
printf " ${GRAY}%-14s${RESET} ${BOLD}%s${RESET} commit(s) ahead of remote\n" "Ahead" "$COMMIT_COUNT"
|
|
119
|
+
printf " ${GRAY}%-14s${RESET} ${BOLD}%s${RESET} to publish\n" "Tags" "$TAG_COUNT"
|
|
120
|
+
echo ""
|
|
121
|
+
_sep
|
|
64
122
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
123
|
+
# Commits table
|
|
124
|
+
if [ "$COMMIT_COUNT" -gt 0 ]; then
|
|
125
|
+
echo ""
|
|
126
|
+
_header
|
|
127
|
+
while IFS= read -r line; do
|
|
128
|
+
h=$(echo "$line" | awk '{print $1}')
|
|
129
|
+
m=$(echo "$line" | cut -d' ' -f2-)
|
|
130
|
+
_row "$h" "$m"
|
|
131
|
+
done <<< "$COMMITS_RAW"
|
|
132
|
+
_footer
|
|
70
133
|
fi
|
|
71
134
|
|
|
72
|
-
#
|
|
135
|
+
# Tags list
|
|
136
|
+
if [ "$TAG_COUNT" -gt 0 ]; then
|
|
137
|
+
echo ""
|
|
138
|
+
echo -e " ${GRAY}Unpublished tags:${RESET}"
|
|
139
|
+
while IFS= read -r tag; do
|
|
140
|
+
echo -e " ${GREEN}+${RESET} ${BOLD}$tag${RESET}"
|
|
141
|
+
done <<< "$LOCAL_ONLY_TAGS"
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
echo ""
|
|
145
|
+
_sep
|
|
146
|
+
|
|
147
|
+
# ── Phase 3 · Branch gate ─────────────────────────────────────────────
|
|
148
|
+
echo ""
|
|
73
149
|
case "$CURRENT_BRANCH" in
|
|
74
|
-
|
|
75
|
-
echo -e "${RED}${BOLD}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
;;
|
|
80
|
-
"dev" | "develop")
|
|
81
|
-
echo -e "${YELLOW}[GATE]${RESET} Integration branch."
|
|
82
|
-
if ! ask_confirm "Push to integration upstream?"; then
|
|
83
|
-
abort "Push cancelled by operator."
|
|
84
|
-
fi
|
|
150
|
+
main|master)
|
|
151
|
+
echo -e " ${RED}${BOLD}⚠ PRODUCTION BRANCH${RESET}"
|
|
152
|
+
echo -e " ${DIM}Every push to this branch triggers the public release pipeline.${RESET}"
|
|
153
|
+
ask "You are on ${BOLD}${CURRENT_BRANCH}${RESET}. Proceed to final review?" \
|
|
154
|
+
|| abort "Cancelled by operator."
|
|
85
155
|
;;
|
|
86
|
-
|
|
87
|
-
echo -e "${
|
|
88
|
-
|
|
89
|
-
abort "Push cancelled by operator."
|
|
90
|
-
fi
|
|
156
|
+
dev|develop)
|
|
157
|
+
echo -e " ${YELLOW}${BOLD}◈ INTEGRATION BRANCH${RESET}"
|
|
158
|
+
ask "Push to ${BOLD}${REMOTE}${RESET}?" || abort "Cancelled by operator."
|
|
91
159
|
;;
|
|
92
160
|
*)
|
|
93
|
-
|
|
94
|
-
abort "Push cancelled by operator."
|
|
95
|
-
fi
|
|
161
|
+
ask "Push ${BOLD}${CURRENT_BRANCH}${RESET} to remote?" || abort "Cancelled by operator."
|
|
96
162
|
;;
|
|
97
163
|
esac
|
|
98
164
|
|
|
99
|
-
#
|
|
100
|
-
echo
|
|
101
|
-
|
|
102
|
-
|
|
165
|
+
# ── Phase 4 · Final confirmation ──────────────────────────────────────
|
|
166
|
+
echo ""
|
|
167
|
+
_sep
|
|
168
|
+
echo ""
|
|
169
|
+
SUMMARY="${BOLD}${COMMIT_COUNT}${RESET} commit(s)"
|
|
170
|
+
[ "$TAG_COUNT" -gt 0 ] && SUMMARY+=" ${DGRAY}+${RESET} ${BOLD}${TAG_COUNT}${RESET} tag(s)"
|
|
171
|
+
printf " ${GRAY}%-14s${RESET} %b\n" "Will push" "$SUMMARY"
|
|
172
|
+
printf " ${GRAY}%-14s${RESET} ${BOLD}%s${RESET}\n" "Target" "$REMOTE"
|
|
173
|
+
echo ""
|
|
174
|
+
echo -e " ${DIM}SSH key passphrase will be required by git if not cached.${RESET}"
|
|
175
|
+
|
|
176
|
+
ask "${BOLD}Confirm push?${RESET} ${GRAY}This cannot be undone.${RESET}" \
|
|
177
|
+
|| abort "Final gate: push cancelled."
|
|
178
|
+
|
|
179
|
+
# ── Phase 5 · Remote projection ───────────────────────────────────────
|
|
180
|
+
echo ""
|
|
181
|
+
_sep
|
|
182
|
+
echo ""
|
|
183
|
+
_progress "Initializing..."
|
|
184
|
+
_progress "Verifying integrity state..."
|
|
185
|
+
_progress "Ready — handing off to git."
|
|
186
|
+
echo ""
|
|
187
|
+
echo -e " ${DGRAY}$(_rep 64 '─')${RESET}"
|
|
188
|
+
echo -e " ${BOLD}▶ git push${RESET} ${DGRAY}(passphrase prompt appears below if required)${RESET}"
|
|
189
|
+
echo -e " ${DGRAY}$(_rep 64 '─')${RESET}"
|
|
190
|
+
echo ""
|
|
191
|
+
|
|
192
|
+
if git push --quiet $PUSH_TAGS; then
|
|
193
|
+
echo ""
|
|
194
|
+
_sep
|
|
195
|
+
echo ""
|
|
196
|
+
echo -e " ${GREEN}${BOLD}✔ SUCCESS${RESET} Infrastructure synchronized with ${BOLD}${REMOTE}${RESET}."
|
|
197
|
+
[ "$TAG_COUNT" -gt 0 ] && \
|
|
198
|
+
echo -e " ${GRAY}Tags published. GitHub Actions pipeline may now be triggered.${RESET}"
|
|
199
|
+
echo ""
|
|
200
|
+
_sep
|
|
103
201
|
else
|
|
104
|
-
|
|
202
|
+
echo ""
|
|
203
|
+
abort "Git push failed. Check your SSH key or network connectivity."
|
|
105
204
|
fi
|
|
106
205
|
|
|
107
|
-
echo
|
|
206
|
+
echo ""
|
package/package.json
CHANGED
package/protocols/ASSIST.md
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
You are a **Technical Assistant & Engineering Partner**. You facilitate excellence and ensure architectural integrity.
|
|
12
12
|
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
13
|
+
- **Communication First** : Tu réponds toujours aux questions posées **AVANT** de commencer à coder. La communication prime sur l'exécution.
|
|
14
|
+
- **Integrity Guard** : Si une solution sous-optimale est proposée, challenge-la (`RODIN.md`).
|
|
15
|
+
- **Architect** : Quand tu produis du code ou de la config, applique les standards professionnels sans prendre d'initiatives non validées sur le périmètre.
|
|
15
16
|
- **Context-Aware** : Adapt your methodology to the project type (library, monorepo, CLI, web app).
|
|
16
17
|
|
|
17
18
|
---
|
package/protocols/COMMIT.md
CHANGED
|
@@ -6,14 +6,18 @@
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
### Règle d'Or 1 : Zéro "git add ."
|
|
10
10
|
|
|
11
11
|
Il est **STRICTEMENT INTERDIT** d'utiliser `git add .` ou `git commit -a`.
|
|
12
|
-
Chaque modification doit
|
|
12
|
+
Chaque modification doit être atomique. On ne mélange pas la logique métier (`core/`) et le style (`ui/`).
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
### Règle d'Or 2 : Isolation des Commits (STRICTE)
|
|
15
|
+
|
|
16
|
+
L'IA ne doit **JAMAIS** modifier ou inclure les fichiers de release (`package.json`, `CHANGELOG.md`, `pom.xml`, etc.) ni manipuler les `git tags` lors d'une phase de commit classique. Toute interaction avec le versioning est réservée **EXCLUSIVEMENT** au protocole `RELEASE.md`.
|
|
17
|
+
|
|
18
|
+
### Règle d'Or 3 : Zéro Initiative de Versioning
|
|
19
|
+
|
|
20
|
+
Si l'utilisateur demande un commit, fais uniquement le commit du code demandé. Ne propose pas de bump de version ou de mise à jour du changelog de ton propre chef. Ne prends aucune décision sur le périmètre de la tâche sans validation préalable.
|
|
17
21
|
|
|
18
22
|
---
|
|
19
23
|
|
package/protocols/RODIN.md
CHANGED
|
@@ -24,11 +24,11 @@ You operate in English. You address the operator directly and professionally.
|
|
|
24
24
|
- If you disagree, say so directly: *"No. This is structurally inconsistent, and here is why."*
|
|
25
25
|
- **You are an engineering sparring partner.**
|
|
26
26
|
|
|
27
|
-
###
|
|
27
|
+
### Zéro-Initiative & Anti-Dérapage (CRITIQUE)
|
|
28
28
|
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
29
|
+
- **Interdiction de Décision Autonome** : Tu n'as pas le droit de modifier des fichiers ou des composants qui n'ont pas été explicitement cités dans la demande de l'utilisateur. Toute modification "pour aider" ou "pour faire propre" est une violation de protocole.
|
|
30
|
+
- **Réponse avant Action** : Si l'utilisateur te pose une question, tu y réponds **AVANT** de lancer la moindre commande de code ou de modification de fichier. La communication prime sur l'exécution.
|
|
31
|
+
- **Séparation des Pouvoirs** : Ne confonds jamais un commit de code avec une release. Durant un commit, les fichiers `package.json`, `CHANGELOG.md` ou les Git Tags sont **sanctuarisés**. Seule la phase de Release (RELEASE.md) peut y toucher.
|
|
32
32
|
|
|
33
33
|
## Quality Standards
|
|
34
34
|
|