@mestreyoda/fabrica 0.2.26 → 0.2.28
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/dist/index.js +5 -4
- package/genesis/scripts/scaffold-project.sh +40 -19
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -113905,8 +113905,8 @@ import fsSync from "node:fs";
|
|
|
113905
113905
|
import path5 from "node:path";
|
|
113906
113906
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
113907
113907
|
function getCurrentVersion() {
|
|
113908
|
-
if ("0.2.
|
|
113909
|
-
return "0.2.
|
|
113908
|
+
if ("0.2.28") {
|
|
113909
|
+
return "0.2.28";
|
|
113910
113910
|
}
|
|
113911
113911
|
try {
|
|
113912
113912
|
const pkgPath = path5.join(THIS_DIR, "..", "..", "package.json");
|
|
@@ -125996,8 +125996,9 @@ async function executeCompletion(opts) {
|
|
|
125996
125996
|
const donePolicy = resolveDonePolicy({ deliverable, qualityCriticality: qualityPolicy.qualityCriticalityFloor });
|
|
125997
125997
|
const prSelector = issueRuntime?.currentPrNumber ? { prNumber: issueRuntime.currentPrNumber } : void 0;
|
|
125998
125998
|
const closeRequested = completionRule.actions.includes(Action.CLOSE_ISSUE);
|
|
125999
|
-
const
|
|
126000
|
-
const
|
|
125999
|
+
const canonicalPrEvidenceUrl = prUrl ?? issueRuntime?.currentPrUrl ?? issueRuntime?.artifactOfRecord?.url ?? void 0;
|
|
126000
|
+
const hasEvidence = hasMeaningfulCompletionEvidence(effectiveSummary, canonicalPrEvidenceUrl, createdTasks);
|
|
126001
|
+
const hasArchetypeEvidence = hasArchetypeSpecificEvidence(deliverable, effectiveSummary, canonicalPrEvidenceUrl, createdTasks);
|
|
126001
126002
|
const finalAcceptance = buildFinalAcceptanceSummary({
|
|
126002
126003
|
deliverable,
|
|
126003
126004
|
qualityPolicy,
|
|
@@ -626,20 +626,27 @@ EOF
|
|
|
626
626
|
cat > scripts/qa.sh <<'QAEOF'
|
|
627
627
|
#!/usr/bin/env bash
|
|
628
628
|
set -euo pipefail
|
|
629
|
+
ROOT="$(pwd)"
|
|
630
|
+
sanitize_public_output() {
|
|
631
|
+
sed -E \
|
|
632
|
+
-e "s#${ROOT}#.#g" \
|
|
633
|
+
-e 's#file://[^[:space:]]+#file://.#g' \
|
|
634
|
+
-e 's#/home/[^[:space:]]+/git/[^[:space:]]+#.#g'
|
|
635
|
+
}
|
|
629
636
|
echo "=== QA Gate ==="
|
|
630
637
|
FAIL=0
|
|
631
638
|
|
|
632
639
|
echo "--- Lint ---"
|
|
633
|
-
npm run lint 2>&1 || { echo "LINT FAILED"; FAIL=1; }
|
|
640
|
+
npm run lint 2>&1 | sanitize_public_output || { echo "LINT FAILED"; FAIL=1; }
|
|
634
641
|
|
|
635
642
|
echo "--- TypeScript ---"
|
|
636
|
-
npm run typecheck 2>&1 || { echo "TSC FAILED"; FAIL=1; }
|
|
643
|
+
npm run typecheck 2>&1 | sanitize_public_output || { echo "TSC FAILED"; FAIL=1; }
|
|
637
644
|
|
|
638
645
|
echo "--- Tests ---"
|
|
639
|
-
npm test 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
646
|
+
npm test 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
640
647
|
|
|
641
648
|
echo "--- Coverage (>=80%) ---"
|
|
642
|
-
npm run coverage 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
649
|
+
npm run coverage 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
643
650
|
|
|
644
651
|
echo "--- Security audit ---"
|
|
645
652
|
npm audit --audit-level=moderate 2>&1 || { echo "AUDIT FAILED"; FAIL=1; }
|
|
@@ -771,6 +778,13 @@ EOF
|
|
|
771
778
|
cat > scripts/qa.sh <<'QAEOF'
|
|
772
779
|
#!/usr/bin/env bash
|
|
773
780
|
set -euo pipefail
|
|
781
|
+
ROOT="$(pwd)"
|
|
782
|
+
sanitize_public_output() {
|
|
783
|
+
sed -E \
|
|
784
|
+
-e "s#${ROOT}#.#g" \
|
|
785
|
+
-e 's#file://[^[:space:]]+#file://.#g' \
|
|
786
|
+
-e 's#/home/[^[:space:]]+/git/[^[:space:]]+#.#g'
|
|
787
|
+
}
|
|
774
788
|
echo "=== QA Gate ==="
|
|
775
789
|
FAIL=0
|
|
776
790
|
|
|
@@ -778,13 +792,13 @@ echo "--- Lint ---"
|
|
|
778
792
|
npx next lint . 2>&1 || { echo "LINT FAILED"; FAIL=1; }
|
|
779
793
|
|
|
780
794
|
echo "--- TypeScript ---"
|
|
781
|
-
npx tsc --noEmit 2>&1 || { echo "TSC FAILED"; FAIL=1; }
|
|
795
|
+
npx tsc --noEmit 2>&1 | sanitize_public_output || { echo "TSC FAILED"; FAIL=1; }
|
|
782
796
|
|
|
783
797
|
echo "--- Tests ---"
|
|
784
|
-
npx vitest run 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
798
|
+
npx vitest run 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
785
799
|
|
|
786
800
|
echo "--- Coverage (>=80%) ---"
|
|
787
|
-
npx vitest run --coverage --coverage.thresholds.lines=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
801
|
+
npx vitest run --coverage --coverage.thresholds.lines=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
788
802
|
|
|
789
803
|
echo "--- Secrets scan ---"
|
|
790
804
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.ts" --include="*.tsx" --include="*.js" src/ 2>/dev/null; then
|
|
@@ -910,20 +924,27 @@ EOF
|
|
|
910
924
|
cat > scripts/qa.sh <<'QAEOF'
|
|
911
925
|
#!/usr/bin/env bash
|
|
912
926
|
set -euo pipefail
|
|
927
|
+
ROOT="$(pwd)"
|
|
928
|
+
sanitize_public_output() {
|
|
929
|
+
sed -E \
|
|
930
|
+
-e "s#${ROOT}#.#g" \
|
|
931
|
+
-e 's#file://[^[:space:]]+#file://.#g' \
|
|
932
|
+
-e 's#/home/[^[:space:]]+/git/[^[:space:]]+#.#g'
|
|
933
|
+
}
|
|
913
934
|
echo "=== QA Gate ==="
|
|
914
935
|
FAIL=0
|
|
915
936
|
|
|
916
937
|
echo "--- Lint ---"
|
|
917
|
-
npx eslint src/ 2>&1 || { echo "LINT FAILED"; FAIL=1; }
|
|
938
|
+
npx eslint src/ 2>&1 | sanitize_public_output || { echo "LINT FAILED"; FAIL=1; }
|
|
918
939
|
|
|
919
940
|
echo "--- TypeScript ---"
|
|
920
|
-
npx tsc --noEmit 2>&1 || { echo "TSC FAILED"; FAIL=1; }
|
|
941
|
+
npx tsc --noEmit 2>&1 | sanitize_public_output || { echo "TSC FAILED"; FAIL=1; }
|
|
921
942
|
|
|
922
943
|
echo "--- Tests ---"
|
|
923
|
-
npx vitest run 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
944
|
+
npx vitest run 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
924
945
|
|
|
925
946
|
echo "--- Coverage (>=80%) ---"
|
|
926
|
-
npx vitest run --coverage --coverage.thresholds.lines=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
947
|
+
npx vitest run --coverage --coverage.thresholds.lines=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
927
948
|
|
|
928
949
|
echo "--- Secrets scan ---"
|
|
929
950
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.ts" --include="*.js" src/ 2>/dev/null; then
|
|
@@ -1061,10 +1082,10 @@ echo "--- Mypy ---"
|
|
|
1061
1082
|
mypy app/ 2>&1 || { echo "MYPY FAILED"; FAIL=1; }
|
|
1062
1083
|
|
|
1063
1084
|
echo "--- Tests ---"
|
|
1064
|
-
python -m pytest tests/ -v 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
1085
|
+
python -m pytest tests/ -v 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
1065
1086
|
|
|
1066
1087
|
echo "--- Coverage (>=80%) ---"
|
|
1067
|
-
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1088
|
+
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1068
1089
|
|
|
1069
1090
|
echo "--- Secrets scan ---"
|
|
1070
1091
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.py" app/ 2>/dev/null; then
|
|
@@ -1192,10 +1213,10 @@ echo "--- Mypy ---"
|
|
|
1192
1213
|
mypy app/ 2>&1 || { echo "MYPY FAILED"; FAIL=1; }
|
|
1193
1214
|
|
|
1194
1215
|
echo "--- Tests ---"
|
|
1195
|
-
python -m pytest tests/ -v 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
1216
|
+
python -m pytest tests/ -v 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
1196
1217
|
|
|
1197
1218
|
echo "--- Coverage (>=80%) ---"
|
|
1198
|
-
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1219
|
+
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1199
1220
|
|
|
1200
1221
|
echo "--- Secrets scan ---"
|
|
1201
1222
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.py" app/ 2>/dev/null; then
|
|
@@ -1387,10 +1408,10 @@ echo "--- Mypy ---"
|
|
|
1387
1408
|
mypy app/ 2>&1 || { echo "MYPY FAILED"; FAIL=1; }
|
|
1388
1409
|
|
|
1389
1410
|
echo "--- Tests ---"
|
|
1390
|
-
python -m pytest tests/ -v 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
1411
|
+
python -m pytest tests/ -v 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
1391
1412
|
|
|
1392
1413
|
echo "--- Coverage (>=80%) ---"
|
|
1393
|
-
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1414
|
+
python -m pytest tests/ -q --cov=app --cov-report=term-missing --cov-fail-under=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1394
1415
|
|
|
1395
1416
|
echo "--- Secrets scan ---"
|
|
1396
1417
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.py" app/ 2>/dev/null; then
|
|
@@ -1526,10 +1547,10 @@ echo "--- Mypy ---"
|
|
|
1526
1547
|
mypy src/ 2>&1 || { echo "MYPY FAILED"; FAIL=1; }
|
|
1527
1548
|
|
|
1528
1549
|
echo "--- Tests ---"
|
|
1529
|
-
python -m pytest tests/ -v 2>&1 || { echo "TESTS FAILED"; FAIL=1; }
|
|
1550
|
+
python -m pytest tests/ -v 2>&1 | sanitize_public_output || { echo "TESTS FAILED"; FAIL=1; }
|
|
1530
1551
|
|
|
1531
1552
|
echo "--- Coverage (>=80%) ---"
|
|
1532
|
-
python -m pytest tests/ -q --cov=src --cov-report=term-missing --cov-fail-under=80 2>&1 || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1553
|
+
python -m pytest tests/ -q --cov=src --cov-report=term-missing --cov-fail-under=80 2>&1 | sanitize_public_output || { echo "COVERAGE FAILED"; FAIL=1; }
|
|
1533
1554
|
|
|
1534
1555
|
echo "--- Secrets scan ---"
|
|
1535
1556
|
if grep -rn 'password\s*=\s*"[^"]\+"\|api_key\s*=\s*"[^"]\+"\|secret\s*=\s*"[^"]\+"' --include="*.py" src/ 2>/dev/null; then
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mestreyoda/fabrica",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.28",
|
|
4
4
|
"description": "Autonomous software engineering pipeline for OpenClaw. Turns ideas into deployed code via intake, dispatch, review, test, and merge.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|