fix: port ci and markdown cleanup from backlog

This commit is contained in:
Affaan Mustafa
2026-04-02 17:09:21 -07:00
parent 70be8f9f44
commit a60d5fbc00
10 changed files with 44 additions and 34 deletions

View File

@@ -112,3 +112,6 @@ Keep this file detailed for only the current sprint, blockers, and next actions.
- 2026-04-01: Added `manim-video` as the reusable technical explainer lane and seeded it with a starter network-graph scene so launch and systems animations do not depend on one-off scratch scripts.
- 2026-04-02: Re-extracted `social-graph-ranker` as a standalone primitive because the weighted bridge-decay model is reusable outside the full lead workflow. `lead-intelligence` now points to it for canonical graph ranking instead of carrying the full algorithm explanation inline, while `connections-optimizer` stays the broader operator layer for pruning, adds, and outbound review packs.
- 2026-04-02: Applied the same consolidation rule to the writing lane. `brand-voice` remains the canonical voice system, while `content-engine`, `crosspost`, `article-writing`, and `investor-outreach` now keep only workflow-specific guidance instead of duplicating a second Affaan/ECC voice model or repeating the full ban list in multiple places.
- 2026-04-02: Closed fresh auto-generated bundle PRs `#1182` and `#1183` under the existing policy. Useful ideas from generator output must be ported manually into canonical repo surfaces instead of merging `.claude`/bundle PRs wholesale.
- 2026-04-02: Ported the safe one-file macOS observer fix from `#1164` directly into `main` as a POSIX `mkdir` fallback for `continuous-learning-v2` lazy-start locking, then closed the PR as superseded by direct port.
- 2026-04-02: Ported the safe core of `#1153` directly into `main`: markdownlint cleanup for orchestration/docs surfaces plus the Windows `USERPROFILE` and path-normalization fixes in `install-apply` / `repair` tests. Local validation after installing repo deps: `node tests/scripts/install-apply.test.js`, `node tests/scripts/repair.test.js`, and targeted `yarn markdownlint` all passed.

View File

@@ -24,20 +24,20 @@ Apply the orchestration skills instead of maintaining a second workflow spec her
- Keep handoffs structured, but let the skills define the maintained sequencing rules.
Security Reviewer: [summary]
FILES CHANGED
-------------
### FILES CHANGED
[List all files modified]
TEST RESULTS
------------
### TEST RESULTS
[Test pass/fail summary]
SECURITY STATUS
---------------
### SECURITY STATUS
[Security findings]
RECOMMENDATION
--------------
### RECOMMENDATION
[SHIP / NEEDS WORK / BLOCKED]
```
@@ -111,7 +111,7 @@ Telemetry:
This keeps planner, implementer, reviewer, and loop workers legible from the operator surface.
## Arguments
## Workflow Arguments
$ARGUMENTS:
- `feature <description>` - Full feature workflow

View File

@@ -177,7 +177,7 @@ Next steps:
## Edge Cases
- **No `gh` CLI**: Stop with: "GitHub CLI (`gh`) is required. Install: https://cli.github.com/"
- **No `gh` CLI**: Stop with: "GitHub CLI (`gh`) is required. Install: <https://cli.github.com/>"
- **Not authenticated**: Stop with: "Run `gh auth login` first."
- **Force push needed**: If remote has diverged and rebase was done, use `git push --force-with-lease` (never `--force`).
- **Multiple PR templates**: If `.github/PULL_REQUEST_TEMPLATE/` has multiple files, list them and ask user to choose.

View File

@@ -25,9 +25,11 @@ function readJson(filePath) {
const REPO_ROOT = path.join(__dirname, '..', '..');
function run(args = [], options = {}) {
const homeDir = options.homeDir || process.env.HOME;
const env = {
...process.env,
HOME: options.homeDir || process.env.HOME,
HOME: homeDir,
USERPROFILE: homeDir,
...(options.env || {}),
};
@@ -365,10 +367,13 @@ function runTests() {
const settings = readJson(path.join(claudeRoot, 'settings.json'));
const installedHooks = readJson(path.join(claudeRoot, 'hooks', 'hooks.json'));
const normSep = (s) => s.replace(/\\/g, '/');
const expectedFragment = normSep(path.join(claudeRoot, 'scripts', 'hooks', 'auto-tmux-dev.js'));
const autoTmuxEntry = settings.hooks.PreToolUse.find(entry => entry.id === 'pre:bash:auto-tmux-dev');
assert.ok(autoTmuxEntry, 'settings.json should include the auto tmux hook');
assert.ok(
autoTmuxEntry.hooks[0].command.includes(path.join(claudeRoot, 'scripts', 'hooks', 'auto-tmux-dev.js')),
normSep(autoTmuxEntry.hooks[0].command).includes(expectedFragment),
'settings.json should use the installed Claude root for hook commands'
);
assert.ok(
@@ -379,7 +384,7 @@ function runTests() {
const installedAutoTmuxEntry = installedHooks.hooks.PreToolUse.find(entry => entry.id === 'pre:bash:auto-tmux-dev');
assert.ok(installedAutoTmuxEntry, 'hooks/hooks.json should include the auto tmux hook');
assert.ok(
installedAutoTmuxEntry.hooks[0].command.includes(path.join(claudeRoot, 'scripts', 'hooks', 'auto-tmux-dev.js')),
normSep(installedAutoTmuxEntry.hooks[0].command).includes(expectedFragment),
'hooks/hooks.json should use the installed Claude root for hook commands'
);
assert.ok(

View File

@@ -38,9 +38,11 @@ function writeState(filePath, options) {
}
function runNode(scriptPath, args = [], options = {}) {
const homeDir = options.homeDir || process.env.HOME;
const env = {
...process.env,
HOME: options.homeDir || process.env.HOME,
HOME: homeDir,
USERPROFILE: homeDir,
};
try {