@meltstudio/meltctl 4.149.1 → 4.150.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/dist/index.js +303 -97
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var CLI_VERSION;
|
|
|
14
14
|
var init_version = __esm({
|
|
15
15
|
"src/utils/version.ts"() {
|
|
16
16
|
"use strict";
|
|
17
|
-
CLI_VERSION = "4.
|
|
17
|
+
CLI_VERSION = "4.150.0";
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
|
|
@@ -1364,97 +1364,210 @@ var extractionResultSchema = z.object({
|
|
|
1364
1364
|
// ../sdk/dist/utils/health-status.js
|
|
1365
1365
|
var ISSUE_RULES = [
|
|
1366
1366
|
// Delivery — Roadmap
|
|
1367
|
-
{
|
|
1367
|
+
{
|
|
1368
|
+
id: "roadmap.none",
|
|
1369
|
+
dimension: "roadmap",
|
|
1370
|
+
severity: "high",
|
|
1371
|
+
label: "No roadmap",
|
|
1372
|
+
category: "gaps",
|
|
1373
|
+
howToFix: "Open the project's Roadmap tab and add an active phase with at least one planned feature",
|
|
1374
|
+
scope: "project"
|
|
1375
|
+
},
|
|
1368
1376
|
{
|
|
1369
1377
|
id: "roadmap.no-active-phase",
|
|
1370
1378
|
dimension: "roadmap",
|
|
1371
1379
|
severity: "medium",
|
|
1372
|
-
label: "Features but no active phase"
|
|
1380
|
+
label: "Features but no active phase",
|
|
1381
|
+
category: "gaps",
|
|
1382
|
+
howToFix: "Open the Roadmap tab and mark the phase the team is currently working on as active",
|
|
1383
|
+
scope: "project"
|
|
1373
1384
|
},
|
|
1374
1385
|
{
|
|
1375
1386
|
id: "roadmap.empty-phase",
|
|
1376
1387
|
dimension: "roadmap",
|
|
1377
1388
|
severity: "medium",
|
|
1378
|
-
label: "Active phase is empty"
|
|
1389
|
+
label: "Active phase is empty",
|
|
1390
|
+
category: "gaps",
|
|
1391
|
+
howToFix: "Open the Roadmap tab and attach the phase's planned features, or close the phase if it's done",
|
|
1392
|
+
scope: "project"
|
|
1379
1393
|
},
|
|
1380
1394
|
// Delivery — Board
|
|
1381
|
-
{
|
|
1382
|
-
|
|
1383
|
-
|
|
1395
|
+
{
|
|
1396
|
+
id: "board.no-mapping",
|
|
1397
|
+
dimension: "board",
|
|
1398
|
+
severity: "high",
|
|
1399
|
+
label: "No board connected",
|
|
1400
|
+
category: "gaps",
|
|
1401
|
+
howToFix: "Open Project Settings and connect a Linear team or Jira project in the mappings card",
|
|
1402
|
+
scope: "project"
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
id: "board.empty",
|
|
1406
|
+
dimension: "board",
|
|
1407
|
+
severity: "medium",
|
|
1408
|
+
label: "Board has no open tickets",
|
|
1409
|
+
category: "sprint",
|
|
1410
|
+
howToFix: "Confirm the team is creating stories on the board, or that the mapping is correct",
|
|
1411
|
+
scope: "project"
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
id: "board.health-low",
|
|
1415
|
+
dimension: "board",
|
|
1416
|
+
severity: "high",
|
|
1417
|
+
label: "Board health below 40%",
|
|
1418
|
+
category: "sprint",
|
|
1419
|
+
howToFix: "Open the project's Linear board and triage the failing audit checks",
|
|
1420
|
+
scope: "project"
|
|
1421
|
+
},
|
|
1384
1422
|
{
|
|
1385
1423
|
id: "board.health-mid",
|
|
1386
1424
|
dimension: "board",
|
|
1387
1425
|
severity: "medium",
|
|
1388
|
-
label: "Board health 40\u201369%"
|
|
1426
|
+
label: "Board health 40\u201369%",
|
|
1427
|
+
category: "sprint",
|
|
1428
|
+
howToFix: "Open the project's Linear board and triage the failing audit checks",
|
|
1429
|
+
scope: "project"
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
id: "board.audit-stale",
|
|
1433
|
+
dimension: "board",
|
|
1434
|
+
severity: "medium",
|
|
1435
|
+
label: "Board audit stale",
|
|
1436
|
+
category: "sprint",
|
|
1437
|
+
howToFix: "Open the project page and click 'Run board audit' to refresh the score",
|
|
1438
|
+
scope: "project"
|
|
1389
1439
|
},
|
|
1390
|
-
{ id: "board.audit-stale", dimension: "board", severity: "medium", label: "Board audit stale" },
|
|
1391
1440
|
// Delivery — Risks
|
|
1392
1441
|
{
|
|
1393
1442
|
id: "risks.stale-red-zone",
|
|
1394
1443
|
dimension: "risks",
|
|
1395
1444
|
severity: "critical",
|
|
1396
|
-
label: "Red-zone risk with no recent comment"
|
|
1445
|
+
label: "Red-zone risk with no recent comment",
|
|
1446
|
+
category: "risks",
|
|
1447
|
+
howToFix: "Open the risk in Linear, add a fresh status comment, or close it if resolved",
|
|
1448
|
+
scope: "project"
|
|
1397
1449
|
},
|
|
1398
1450
|
{
|
|
1399
1451
|
id: "risks.active-red-zone",
|
|
1400
1452
|
dimension: "risks",
|
|
1401
1453
|
severity: "medium",
|
|
1402
|
-
label: "Open red-zone risk"
|
|
1454
|
+
label: "Open red-zone risk",
|
|
1455
|
+
category: "risks",
|
|
1456
|
+
howToFix: "Review the open red-zone risk at this Tuesday's risk review and confirm an owner",
|
|
1457
|
+
scope: "project"
|
|
1403
1458
|
},
|
|
1404
1459
|
// Delivery — Activity
|
|
1405
1460
|
{
|
|
1406
|
-
id: "activity.
|
|
1461
|
+
id: "activity.dormant",
|
|
1407
1462
|
dimension: "activity",
|
|
1408
|
-
severity: "
|
|
1409
|
-
label: "No activity in 21+ days"
|
|
1463
|
+
severity: "medium",
|
|
1464
|
+
label: "No activity in 21+ days",
|
|
1465
|
+
category: "gaps",
|
|
1466
|
+
howToFix: "No meltctl activity in N days \u2014 confirm the project is still active, or mark it on-hold",
|
|
1467
|
+
scope: "project"
|
|
1410
1468
|
},
|
|
1469
|
+
// Delivery — Plans
|
|
1411
1470
|
{
|
|
1412
|
-
id: "
|
|
1413
|
-
dimension: "
|
|
1471
|
+
id: "plans.stale",
|
|
1472
|
+
dimension: "plans",
|
|
1414
1473
|
severity: "medium",
|
|
1415
|
-
label: "No
|
|
1474
|
+
label: "No recent plan",
|
|
1475
|
+
category: "plans",
|
|
1476
|
+
howToFix: "Remind the team to run `meltctl plan submit` before starting new tickets",
|
|
1477
|
+
scope: "project"
|
|
1478
|
+
},
|
|
1479
|
+
{
|
|
1480
|
+
id: "plans.unscored",
|
|
1481
|
+
dimension: "plans",
|
|
1482
|
+
severity: "low",
|
|
1483
|
+
label: "Plans not yet scored",
|
|
1484
|
+
category: "plans",
|
|
1485
|
+
howToFix: "Open the plan and click 'Score plan' to run the rubric",
|
|
1486
|
+
scope: "project"
|
|
1487
|
+
},
|
|
1488
|
+
{
|
|
1489
|
+
id: "plans.stuck",
|
|
1490
|
+
dimension: "plans",
|
|
1491
|
+
severity: "high",
|
|
1492
|
+
label: "Plan can't be scored",
|
|
1493
|
+
category: "plans",
|
|
1494
|
+
howToFix: "Re-run `meltctl plan submit` with a valid ticket, or close the plan if it's no longer relevant",
|
|
1495
|
+
scope: "project"
|
|
1416
1496
|
},
|
|
1417
|
-
// Delivery — Plans
|
|
1418
|
-
{ id: "plans.stale", dimension: "plans", severity: "medium", label: "No recent plan" },
|
|
1419
1497
|
// Delivery — Standups
|
|
1420
1498
|
{
|
|
1421
1499
|
id: "standups.low",
|
|
1422
1500
|
dimension: "standups",
|
|
1423
1501
|
severity: "medium",
|
|
1424
|
-
label: "Standup submission below 50%"
|
|
1502
|
+
label: "Standup submission below 50%",
|
|
1503
|
+
category: "standup",
|
|
1504
|
+
howToFix: "Remind the team that standup is set for 9am Colombia; follow up with non-submitters",
|
|
1505
|
+
scope: "project"
|
|
1425
1506
|
},
|
|
1426
1507
|
// Code — Findings
|
|
1427
1508
|
{
|
|
1428
1509
|
id: "findings.critical",
|
|
1429
1510
|
dimension: "findings",
|
|
1430
1511
|
severity: "critical",
|
|
1431
|
-
label: "Critical audit finding"
|
|
1512
|
+
label: "Critical audit finding",
|
|
1513
|
+
category: "audits",
|
|
1514
|
+
howToFix: "Open the audit detail page and address the critical finding before anything else",
|
|
1515
|
+
scope: "project"
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
id: "findings.high",
|
|
1519
|
+
dimension: "findings",
|
|
1520
|
+
severity: "high",
|
|
1521
|
+
label: "High audit finding",
|
|
1522
|
+
category: "audits",
|
|
1523
|
+
howToFix: "Open the audit detail page and schedule the high-severity finding into the sprint",
|
|
1524
|
+
scope: "project"
|
|
1432
1525
|
},
|
|
1433
|
-
{ id: "findings.high", dimension: "findings", severity: "high", label: "High audit finding" },
|
|
1434
1526
|
{
|
|
1435
1527
|
id: "findings.medium",
|
|
1436
1528
|
dimension: "findings",
|
|
1437
1529
|
severity: "medium",
|
|
1438
|
-
label: "Open audit warnings"
|
|
1530
|
+
label: "Open audit warnings",
|
|
1531
|
+
category: "audits",
|
|
1532
|
+
howToFix: "Open the audit detail page and work through the open warnings/missing checks",
|
|
1533
|
+
scope: "project"
|
|
1439
1534
|
},
|
|
1440
1535
|
// Code — Audit coverage
|
|
1441
1536
|
{
|
|
1442
1537
|
id: "audit.never",
|
|
1443
1538
|
dimension: "audit-coverage",
|
|
1444
1539
|
severity: "medium",
|
|
1445
|
-
label: "Never audited"
|
|
1540
|
+
label: "Never audited",
|
|
1541
|
+
category: "audits",
|
|
1542
|
+
howToFix: "Run `/melt-audit` on the repo to create the baseline",
|
|
1543
|
+
scope: "project"
|
|
1446
1544
|
},
|
|
1447
1545
|
{
|
|
1448
1546
|
id: "audit.stale",
|
|
1449
1547
|
dimension: "audit-coverage",
|
|
1450
1548
|
severity: "medium",
|
|
1451
|
-
label: "Audit over 90 days old"
|
|
1549
|
+
label: "Audit over 90 days old",
|
|
1550
|
+
category: "audits",
|
|
1551
|
+
howToFix: "Run `/melt-audit` on the repo to refresh the baseline",
|
|
1552
|
+
scope: "project"
|
|
1452
1553
|
},
|
|
1453
1554
|
{
|
|
1454
1555
|
id: "audit.partial",
|
|
1455
1556
|
dimension: "audit-coverage",
|
|
1456
1557
|
severity: "medium",
|
|
1457
|
-
label: "Some repos never audited"
|
|
1558
|
+
label: "Some repos never audited",
|
|
1559
|
+
category: "audits",
|
|
1560
|
+
howToFix: "Run `/melt-audit` on each unaudited repo to create its baseline",
|
|
1561
|
+
scope: "project"
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
id: "audit.unprocessed",
|
|
1565
|
+
dimension: "audit-coverage",
|
|
1566
|
+
severity: "low",
|
|
1567
|
+
label: "Audit not processed for findings",
|
|
1568
|
+
category: "audits",
|
|
1569
|
+
howToFix: "Open each audit and click 'Extract findings' to populate the findings table",
|
|
1570
|
+
scope: "project"
|
|
1458
1571
|
}
|
|
1459
1572
|
];
|
|
1460
1573
|
var RULE_BY_ID = new Map(ISSUE_RULES.map((r) => [r.id, r]));
|
|
@@ -1500,20 +1613,17 @@ var SKILL_FRONTMATTER = {
|
|
|
1500
1613
|
setup: `---
|
|
1501
1614
|
user-invocable: true
|
|
1502
1615
|
description: >-
|
|
1503
|
-
Analyze the project and customize AGENTS.md for this codebase.
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
fills in project-specific sections, and merges existing standards.
|
|
1616
|
+
Analyze the project and customize AGENTS.md for this codebase. Use when
|
|
1617
|
+
setting up a new project, after meltctl init, or when AGENTS.md has
|
|
1618
|
+
placeholder markers.
|
|
1507
1619
|
---
|
|
1508
1620
|
|
|
1509
1621
|
`,
|
|
1510
1622
|
plan: `---
|
|
1511
1623
|
user-invocable: true
|
|
1512
1624
|
description: >-
|
|
1513
|
-
Design an implementation approach before writing code. Use when
|
|
1514
|
-
|
|
1515
|
-
says "plan this" or "how should we approach this". Gathers requirements,
|
|
1516
|
-
explores codebase, and presents a step-by-step plan for approval.
|
|
1625
|
+
Design an implementation approach before writing code. Use when starting
|
|
1626
|
+
a feature, tackling a complex task, or the developer says "plan this".
|
|
1517
1627
|
---
|
|
1518
1628
|
|
|
1519
1629
|
`,
|
|
@@ -1521,40 +1631,33 @@ description: >-
|
|
|
1521
1631
|
user-invocable: true
|
|
1522
1632
|
description: >-
|
|
1523
1633
|
Review code changes against project standards and address PR feedback.
|
|
1524
|
-
Use when the developer asks to review changes
|
|
1525
|
-
|
|
1526
|
-
should-fix, or suggestions.
|
|
1634
|
+
Use when the developer asks to review changes or respond to PR reviewer
|
|
1635
|
+
comments.
|
|
1527
1636
|
---
|
|
1528
1637
|
|
|
1529
1638
|
`,
|
|
1530
1639
|
pr: `---
|
|
1531
1640
|
user-invocable: true
|
|
1532
1641
|
description: >-
|
|
1533
|
-
Create a well-structured pull request from current changes. Use when
|
|
1534
|
-
|
|
1535
|
-
a pull request". Analyzes changes, runs pre-flight checks, drafts
|
|
1536
|
-
description, and creates the PR via gh CLI.
|
|
1642
|
+
Create a well-structured pull request from current changes. Use when the
|
|
1643
|
+
developer says "create a PR" or is ready to submit work.
|
|
1537
1644
|
---
|
|
1538
1645
|
|
|
1539
1646
|
`,
|
|
1540
1647
|
debug: `---
|
|
1541
1648
|
user-invocable: true
|
|
1542
1649
|
description: >-
|
|
1543
|
-
Systematically investigate and fix bugs. Use when the developer
|
|
1544
|
-
|
|
1545
|
-
is this failing". Reproduces the issue, isolates root cause, writes
|
|
1546
|
-
regression test, and implements minimal fix.
|
|
1650
|
+
Systematically investigate and fix bugs. Use when the developer reports
|
|
1651
|
+
a bug, hits an error, or says "debug this".
|
|
1547
1652
|
---
|
|
1548
1653
|
|
|
1549
1654
|
`,
|
|
1550
1655
|
audit: `---
|
|
1551
1656
|
user-invocable: true
|
|
1552
1657
|
description: >-
|
|
1553
|
-
Run a comprehensive project compliance audit against team standards.
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
testing, CI/CD, security, and AI tool setup. Produces a structured
|
|
1557
|
-
report with scores and actionable fixes.
|
|
1658
|
+
Run a comprehensive project compliance audit against team standards. Use
|
|
1659
|
+
when the developer wants to assess project health or says "audit this
|
|
1660
|
+
project".
|
|
1558
1661
|
---
|
|
1559
1662
|
|
|
1560
1663
|
`,
|
|
@@ -1562,31 +1665,25 @@ description: >-
|
|
|
1562
1665
|
user-invocable: true
|
|
1563
1666
|
description: >-
|
|
1564
1667
|
Review the project's UI against usability heuristics using Chrome DevTools
|
|
1565
|
-
MCP. Use when the developer
|
|
1566
|
-
or "UX audit". In full audit mode, crawls the entire app. During an active
|
|
1567
|
-
plan, scopes to the current feature and appends results to the plan file.
|
|
1668
|
+
MCP. Use when the developer says "review the UI" or "UX audit".
|
|
1568
1669
|
---
|
|
1569
1670
|
|
|
1570
1671
|
`,
|
|
1571
1672
|
"security-audit": `---
|
|
1572
1673
|
user-invocable: true
|
|
1573
1674
|
description: >-
|
|
1574
|
-
Run a comprehensive security posture audit across
|
|
1575
|
-
Use when the developer
|
|
1576
|
-
|
|
1577
|
-
application security, data protection, CI/CD, and compliance readiness.
|
|
1578
|
-
Investigates all platform repositories for a holistic view.
|
|
1675
|
+
Run a comprehensive security posture audit across all platform
|
|
1676
|
+
repositories. Use when the developer says "security audit" or wants to
|
|
1677
|
+
assess security posture.
|
|
1579
1678
|
---
|
|
1580
1679
|
|
|
1581
1680
|
`,
|
|
1582
1681
|
validate: `---
|
|
1583
1682
|
user-invocable: true
|
|
1584
1683
|
description: >-
|
|
1585
|
-
Run the validation plan from the plan document after implementation.
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
API, or CLI testing, suggests test coverage improvements, then prompts
|
|
1589
|
-
the developer for mandatory manual sign-off.
|
|
1684
|
+
Run the validation plan from the plan document after implementation. Use
|
|
1685
|
+
when the developer says "validate this" or "test the feature", or after
|
|
1686
|
+
finishing implementation.
|
|
1590
1687
|
---
|
|
1591
1688
|
|
|
1592
1689
|
`,
|
|
@@ -1594,9 +1691,7 @@ description: >-
|
|
|
1594
1691
|
user-invocable: true
|
|
1595
1692
|
description: >-
|
|
1596
1693
|
Update Melt skills and standards to the latest version. Use when the
|
|
1597
|
-
developer wants the latest skill templates
|
|
1598
|
-
after a new meltctl version is released. Fetches latest templates,
|
|
1599
|
-
preserves project customizations in AGENTS.md, and merges changes.
|
|
1694
|
+
developer says "update melt" or wants the latest skill templates.
|
|
1600
1695
|
---
|
|
1601
1696
|
|
|
1602
1697
|
`,
|
|
@@ -1604,9 +1699,8 @@ description: >-
|
|
|
1604
1699
|
user-invocable: true
|
|
1605
1700
|
description: >-
|
|
1606
1701
|
Answer questions about the AI-First Development Playbook and team
|
|
1607
|
-
workflow. Use when the developer asks about the development process
|
|
1608
|
-
|
|
1609
|
-
This is a reference skill \u2014 it explains the process, not executes it.
|
|
1702
|
+
workflow. Use when the developer asks about the development process or
|
|
1703
|
+
how a step works. Reference skill \u2014 explains, doesn't execute.
|
|
1610
1704
|
---
|
|
1611
1705
|
|
|
1612
1706
|
`,
|
|
@@ -1614,9 +1708,8 @@ description: >-
|
|
|
1614
1708
|
user-invocable: true
|
|
1615
1709
|
description: >-
|
|
1616
1710
|
Connect and verify required integrations (ticket tracker, browser
|
|
1617
|
-
testing). Use after melt-setup, when tools aren't working, or when
|
|
1618
|
-
|
|
1619
|
-
each tool works, and updates AGENTS.md connection status.
|
|
1711
|
+
testing). Use after melt-setup, when tools aren't working, or when a
|
|
1712
|
+
skill reports missing MCP connections.
|
|
1620
1713
|
---
|
|
1621
1714
|
|
|
1622
1715
|
`
|
|
@@ -4055,97 +4148,210 @@ var extractionResultSchema2 = z2.object({
|
|
|
4055
4148
|
});
|
|
4056
4149
|
var ISSUE_RULES2 = [
|
|
4057
4150
|
// Delivery — Roadmap
|
|
4058
|
-
{
|
|
4151
|
+
{
|
|
4152
|
+
id: "roadmap.none",
|
|
4153
|
+
dimension: "roadmap",
|
|
4154
|
+
severity: "high",
|
|
4155
|
+
label: "No roadmap",
|
|
4156
|
+
category: "gaps",
|
|
4157
|
+
howToFix: "Open the project's Roadmap tab and add an active phase with at least one planned feature",
|
|
4158
|
+
scope: "project"
|
|
4159
|
+
},
|
|
4059
4160
|
{
|
|
4060
4161
|
id: "roadmap.no-active-phase",
|
|
4061
4162
|
dimension: "roadmap",
|
|
4062
4163
|
severity: "medium",
|
|
4063
|
-
label: "Features but no active phase"
|
|
4164
|
+
label: "Features but no active phase",
|
|
4165
|
+
category: "gaps",
|
|
4166
|
+
howToFix: "Open the Roadmap tab and mark the phase the team is currently working on as active",
|
|
4167
|
+
scope: "project"
|
|
4064
4168
|
},
|
|
4065
4169
|
{
|
|
4066
4170
|
id: "roadmap.empty-phase",
|
|
4067
4171
|
dimension: "roadmap",
|
|
4068
4172
|
severity: "medium",
|
|
4069
|
-
label: "Active phase is empty"
|
|
4173
|
+
label: "Active phase is empty",
|
|
4174
|
+
category: "gaps",
|
|
4175
|
+
howToFix: "Open the Roadmap tab and attach the phase's planned features, or close the phase if it's done",
|
|
4176
|
+
scope: "project"
|
|
4070
4177
|
},
|
|
4071
4178
|
// Delivery — Board
|
|
4072
|
-
{
|
|
4073
|
-
|
|
4074
|
-
|
|
4179
|
+
{
|
|
4180
|
+
id: "board.no-mapping",
|
|
4181
|
+
dimension: "board",
|
|
4182
|
+
severity: "high",
|
|
4183
|
+
label: "No board connected",
|
|
4184
|
+
category: "gaps",
|
|
4185
|
+
howToFix: "Open Project Settings and connect a Linear team or Jira project in the mappings card",
|
|
4186
|
+
scope: "project"
|
|
4187
|
+
},
|
|
4188
|
+
{
|
|
4189
|
+
id: "board.empty",
|
|
4190
|
+
dimension: "board",
|
|
4191
|
+
severity: "medium",
|
|
4192
|
+
label: "Board has no open tickets",
|
|
4193
|
+
category: "sprint",
|
|
4194
|
+
howToFix: "Confirm the team is creating stories on the board, or that the mapping is correct",
|
|
4195
|
+
scope: "project"
|
|
4196
|
+
},
|
|
4197
|
+
{
|
|
4198
|
+
id: "board.health-low",
|
|
4199
|
+
dimension: "board",
|
|
4200
|
+
severity: "high",
|
|
4201
|
+
label: "Board health below 40%",
|
|
4202
|
+
category: "sprint",
|
|
4203
|
+
howToFix: "Open the project's Linear board and triage the failing audit checks",
|
|
4204
|
+
scope: "project"
|
|
4205
|
+
},
|
|
4075
4206
|
{
|
|
4076
4207
|
id: "board.health-mid",
|
|
4077
4208
|
dimension: "board",
|
|
4078
4209
|
severity: "medium",
|
|
4079
|
-
label: "Board health 40\u201369%"
|
|
4210
|
+
label: "Board health 40\u201369%",
|
|
4211
|
+
category: "sprint",
|
|
4212
|
+
howToFix: "Open the project's Linear board and triage the failing audit checks",
|
|
4213
|
+
scope: "project"
|
|
4214
|
+
},
|
|
4215
|
+
{
|
|
4216
|
+
id: "board.audit-stale",
|
|
4217
|
+
dimension: "board",
|
|
4218
|
+
severity: "medium",
|
|
4219
|
+
label: "Board audit stale",
|
|
4220
|
+
category: "sprint",
|
|
4221
|
+
howToFix: "Open the project page and click 'Run board audit' to refresh the score",
|
|
4222
|
+
scope: "project"
|
|
4080
4223
|
},
|
|
4081
|
-
{ id: "board.audit-stale", dimension: "board", severity: "medium", label: "Board audit stale" },
|
|
4082
4224
|
// Delivery — Risks
|
|
4083
4225
|
{
|
|
4084
4226
|
id: "risks.stale-red-zone",
|
|
4085
4227
|
dimension: "risks",
|
|
4086
4228
|
severity: "critical",
|
|
4087
|
-
label: "Red-zone risk with no recent comment"
|
|
4229
|
+
label: "Red-zone risk with no recent comment",
|
|
4230
|
+
category: "risks",
|
|
4231
|
+
howToFix: "Open the risk in Linear, add a fresh status comment, or close it if resolved",
|
|
4232
|
+
scope: "project"
|
|
4088
4233
|
},
|
|
4089
4234
|
{
|
|
4090
4235
|
id: "risks.active-red-zone",
|
|
4091
4236
|
dimension: "risks",
|
|
4092
4237
|
severity: "medium",
|
|
4093
|
-
label: "Open red-zone risk"
|
|
4238
|
+
label: "Open red-zone risk",
|
|
4239
|
+
category: "risks",
|
|
4240
|
+
howToFix: "Review the open red-zone risk at this Tuesday's risk review and confirm an owner",
|
|
4241
|
+
scope: "project"
|
|
4094
4242
|
},
|
|
4095
4243
|
// Delivery — Activity
|
|
4096
4244
|
{
|
|
4097
|
-
id: "activity.
|
|
4245
|
+
id: "activity.dormant",
|
|
4098
4246
|
dimension: "activity",
|
|
4099
|
-
severity: "
|
|
4100
|
-
label: "No activity in 21+ days"
|
|
4247
|
+
severity: "medium",
|
|
4248
|
+
label: "No activity in 21+ days",
|
|
4249
|
+
category: "gaps",
|
|
4250
|
+
howToFix: "No meltctl activity in N days \u2014 confirm the project is still active, or mark it on-hold",
|
|
4251
|
+
scope: "project"
|
|
4101
4252
|
},
|
|
4253
|
+
// Delivery — Plans
|
|
4102
4254
|
{
|
|
4103
|
-
id: "
|
|
4104
|
-
dimension: "
|
|
4255
|
+
id: "plans.stale",
|
|
4256
|
+
dimension: "plans",
|
|
4105
4257
|
severity: "medium",
|
|
4106
|
-
label: "No
|
|
4258
|
+
label: "No recent plan",
|
|
4259
|
+
category: "plans",
|
|
4260
|
+
howToFix: "Remind the team to run `meltctl plan submit` before starting new tickets",
|
|
4261
|
+
scope: "project"
|
|
4262
|
+
},
|
|
4263
|
+
{
|
|
4264
|
+
id: "plans.unscored",
|
|
4265
|
+
dimension: "plans",
|
|
4266
|
+
severity: "low",
|
|
4267
|
+
label: "Plans not yet scored",
|
|
4268
|
+
category: "plans",
|
|
4269
|
+
howToFix: "Open the plan and click 'Score plan' to run the rubric",
|
|
4270
|
+
scope: "project"
|
|
4271
|
+
},
|
|
4272
|
+
{
|
|
4273
|
+
id: "plans.stuck",
|
|
4274
|
+
dimension: "plans",
|
|
4275
|
+
severity: "high",
|
|
4276
|
+
label: "Plan can't be scored",
|
|
4277
|
+
category: "plans",
|
|
4278
|
+
howToFix: "Re-run `meltctl plan submit` with a valid ticket, or close the plan if it's no longer relevant",
|
|
4279
|
+
scope: "project"
|
|
4107
4280
|
},
|
|
4108
|
-
// Delivery — Plans
|
|
4109
|
-
{ id: "plans.stale", dimension: "plans", severity: "medium", label: "No recent plan" },
|
|
4110
4281
|
// Delivery — Standups
|
|
4111
4282
|
{
|
|
4112
4283
|
id: "standups.low",
|
|
4113
4284
|
dimension: "standups",
|
|
4114
4285
|
severity: "medium",
|
|
4115
|
-
label: "Standup submission below 50%"
|
|
4286
|
+
label: "Standup submission below 50%",
|
|
4287
|
+
category: "standup",
|
|
4288
|
+
howToFix: "Remind the team that standup is set for 9am Colombia; follow up with non-submitters",
|
|
4289
|
+
scope: "project"
|
|
4116
4290
|
},
|
|
4117
4291
|
// Code — Findings
|
|
4118
4292
|
{
|
|
4119
4293
|
id: "findings.critical",
|
|
4120
4294
|
dimension: "findings",
|
|
4121
4295
|
severity: "critical",
|
|
4122
|
-
label: "Critical audit finding"
|
|
4296
|
+
label: "Critical audit finding",
|
|
4297
|
+
category: "audits",
|
|
4298
|
+
howToFix: "Open the audit detail page and address the critical finding before anything else",
|
|
4299
|
+
scope: "project"
|
|
4300
|
+
},
|
|
4301
|
+
{
|
|
4302
|
+
id: "findings.high",
|
|
4303
|
+
dimension: "findings",
|
|
4304
|
+
severity: "high",
|
|
4305
|
+
label: "High audit finding",
|
|
4306
|
+
category: "audits",
|
|
4307
|
+
howToFix: "Open the audit detail page and schedule the high-severity finding into the sprint",
|
|
4308
|
+
scope: "project"
|
|
4123
4309
|
},
|
|
4124
|
-
{ id: "findings.high", dimension: "findings", severity: "high", label: "High audit finding" },
|
|
4125
4310
|
{
|
|
4126
4311
|
id: "findings.medium",
|
|
4127
4312
|
dimension: "findings",
|
|
4128
4313
|
severity: "medium",
|
|
4129
|
-
label: "Open audit warnings"
|
|
4314
|
+
label: "Open audit warnings",
|
|
4315
|
+
category: "audits",
|
|
4316
|
+
howToFix: "Open the audit detail page and work through the open warnings/missing checks",
|
|
4317
|
+
scope: "project"
|
|
4130
4318
|
},
|
|
4131
4319
|
// Code — Audit coverage
|
|
4132
4320
|
{
|
|
4133
4321
|
id: "audit.never",
|
|
4134
4322
|
dimension: "audit-coverage",
|
|
4135
4323
|
severity: "medium",
|
|
4136
|
-
label: "Never audited"
|
|
4324
|
+
label: "Never audited",
|
|
4325
|
+
category: "audits",
|
|
4326
|
+
howToFix: "Run `/melt-audit` on the repo to create the baseline",
|
|
4327
|
+
scope: "project"
|
|
4137
4328
|
},
|
|
4138
4329
|
{
|
|
4139
4330
|
id: "audit.stale",
|
|
4140
4331
|
dimension: "audit-coverage",
|
|
4141
4332
|
severity: "medium",
|
|
4142
|
-
label: "Audit over 90 days old"
|
|
4333
|
+
label: "Audit over 90 days old",
|
|
4334
|
+
category: "audits",
|
|
4335
|
+
howToFix: "Run `/melt-audit` on the repo to refresh the baseline",
|
|
4336
|
+
scope: "project"
|
|
4143
4337
|
},
|
|
4144
4338
|
{
|
|
4145
4339
|
id: "audit.partial",
|
|
4146
4340
|
dimension: "audit-coverage",
|
|
4147
4341
|
severity: "medium",
|
|
4148
|
-
label: "Some repos never audited"
|
|
4342
|
+
label: "Some repos never audited",
|
|
4343
|
+
category: "audits",
|
|
4344
|
+
howToFix: "Run `/melt-audit` on each unaudited repo to create its baseline",
|
|
4345
|
+
scope: "project"
|
|
4346
|
+
},
|
|
4347
|
+
{
|
|
4348
|
+
id: "audit.unprocessed",
|
|
4349
|
+
dimension: "audit-coverage",
|
|
4350
|
+
severity: "low",
|
|
4351
|
+
label: "Audit not processed for findings",
|
|
4352
|
+
category: "audits",
|
|
4353
|
+
howToFix: "Open each audit and click 'Extract findings' to populate the findings table",
|
|
4354
|
+
scope: "project"
|
|
4149
4355
|
}
|
|
4150
4356
|
];
|
|
4151
4357
|
var RULE_BY_ID2 = new Map(ISSUE_RULES2.map((r) => [r.id, r]));
|
package/package.json
CHANGED