@meltstudio/meltctl 5.13.0 → 5.15.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.
Files changed (2) hide show
  1. package/dist/index.js +95 -40
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7450,7 +7450,7 @@ var CLI_VERSION;
7450
7450
  var init_version = __esm({
7451
7451
  "src/utils/version.ts"() {
7452
7452
  "use strict";
7453
- CLI_VERSION = "5.13.0";
7453
+ CLI_VERSION = "5.15.0";
7454
7454
  }
7455
7455
  });
7456
7456
 
@@ -27939,9 +27939,9 @@ function createProfileAuditsResource(config2) {
27939
27939
  function createSupportEffortResource(config2) {
27940
27940
  return {
27941
27941
  /**
27942
- * Get the by-project + by-architect rollups, the week/month trend, and the
27943
- * actionable missing-time worklist. `period` selects the trend granularity
27944
- * (default 'week').
27942
+ * Get the by-project + by-architect rollups, the project × month matrix
27943
+ * (last 6 months), the week/month trend, and the actionable missing-time
27944
+ * worklist. `period` selects the trend granularity (default 'week').
27945
27945
  */
27946
27946
  async get(opts = {}) {
27947
27947
  const params = new URLSearchParams();
@@ -41889,9 +41889,9 @@ var ISSUE_RULES = [
41889
41889
  {
41890
41890
  id: "roadmap.none",
41891
41891
  dimension: "roadmap",
41892
- // Setup/hygiene gap — Medium, not High (#446 follow-up: process-hygiene
41893
- // rules softened so the portfolio's genuinely-critical signals stand out).
41894
- severity: "medium",
41892
+ // Setup/hygiene gap — demoted Medium → Low in the #580 lenient phase
41893
+ // (setup nudges shouldn't band a project; re-promote when ratcheting).
41894
+ severity: "low",
41895
41895
  label: "No roadmap",
41896
41896
  category: "gaps",
41897
41897
  howToFix: "Open the project's Roadmap tab and add an active phase with at least one planned feature",
@@ -41974,7 +41974,8 @@ var ISSUE_RULES = [
41974
41974
  {
41975
41975
  id: "board.no-mapping",
41976
41976
  dimension: "board",
41977
- severity: "medium",
41977
+ // Setup nudge — demoted Medium → Low in the #580 lenient phase.
41978
+ severity: "low",
41978
41979
  label: "No board connected",
41979
41980
  category: "gaps",
41980
41981
  howToFix: "Open Project Settings and connect a Linear team or Jira project in the mappings card",
@@ -41984,7 +41985,8 @@ var ISSUE_RULES = [
41984
41985
  {
41985
41986
  id: "tracker.no-oauth",
41986
41987
  dimension: "board",
41987
- severity: "medium",
41988
+ // Setup nudge — demoted Medium → Low in the #580 lenient phase.
41989
+ severity: "low",
41988
41990
  label: "Tracker needs OAuth connect",
41989
41991
  category: "gaps",
41990
41992
  howToFix: "Open Project Settings \u2192 Tracker connections and click Connect for the missing provider; that switches the project off Melt's shared key onto its own OAuth grant",
@@ -41994,7 +41996,9 @@ var ISSUE_RULES = [
41994
41996
  {
41995
41997
  id: "board.empty",
41996
41998
  dimension: "board",
41997
- severity: "medium",
41999
+ // Hygiene check — demoted Medium → Low in the #580 lenient phase (fires
42000
+ // in normal operation, e.g. between cycles).
42001
+ severity: "low",
41998
42002
  label: "Board has no open tickets",
41999
42003
  category: "sprint",
42000
42004
  howToFix: "Confirm the team is creating stories on the board, or that the mapping is correct",
@@ -42003,8 +42007,10 @@ var ISSUE_RULES = [
42003
42007
  {
42004
42008
  id: "board.health-low",
42005
42009
  dimension: "board",
42010
+ // The genuinely-bad tier. Threshold moved <40% → <55% in the #580 lenient
42011
+ // phase so the medium tier only covers boards that are truly failing.
42006
42012
  severity: "medium",
42007
- label: "Board health below 40%",
42013
+ label: "Board health below 55%",
42008
42014
  category: "sprint",
42009
42015
  howToFix: "Open the project's Linear board and triage the failing audit checks",
42010
42016
  scope: "project"
@@ -42012,8 +42018,10 @@ var ISSUE_RULES = [
42012
42018
  {
42013
42019
  id: "board.health-mid",
42014
42020
  dimension: "board",
42015
- severity: "medium",
42016
- label: "Board health 40\u201369%",
42021
+ // The could-be-better tier (55–69%) — demoted Medium → Low in the #580
42022
+ // lenient phase; a passing-but-imperfect board is backlog, not an alarm.
42023
+ severity: "low",
42024
+ label: "Board health 55\u201369%",
42017
42025
  category: "sprint",
42018
42026
  howToFix: "Open the project's Linear board and triage the failing audit checks",
42019
42027
  scope: "project"
@@ -42021,7 +42029,8 @@ var ISSUE_RULES = [
42021
42029
  {
42022
42030
  id: "board.audit-stale",
42023
42031
  dimension: "board",
42024
- severity: "medium",
42032
+ // Staleness nudge — demoted Medium → Low in the #580 lenient phase.
42033
+ severity: "low",
42025
42034
  label: "Board audit stale",
42026
42035
  category: "sprint",
42027
42036
  howToFix: "Open the project page and click 'Run board audit' to refresh the score",
@@ -42102,7 +42111,8 @@ var ISSUE_RULES = [
42102
42111
  {
42103
42112
  id: "activity.dormant",
42104
42113
  dimension: "activity",
42105
- severity: "medium",
42114
+ // Staleness signal — demoted Medium → Low in the #580 lenient phase.
42115
+ severity: "low",
42106
42116
  label: "No activity in 21+ days",
42107
42117
  category: "gaps",
42108
42118
  howToFix: "No meltctl activity in N days \u2014 confirm the project is still active, or mark it on-hold",
@@ -42113,7 +42123,8 @@ var ISSUE_RULES = [
42113
42123
  {
42114
42124
  id: "plans.stale",
42115
42125
  dimension: "plans",
42116
- severity: "medium",
42126
+ // Adoption nudge — demoted Medium → Low in the #580 lenient phase.
42127
+ severity: "low",
42117
42128
  label: "No recent plan",
42118
42129
  category: "plans",
42119
42130
  howToFix: "Remind the team to run `meltctl plan submit` before starting new tickets",
@@ -42189,8 +42200,21 @@ var ISSUE_RULES = [
42189
42200
  {
42190
42201
  id: "findings.medium",
42191
42202
  dimension: "findings",
42203
+ // Fires only when ≥5 medium findings are open (#580) — a real backlog
42204
+ // worth banding, not one warning. Smaller counts fall to findings.minor.
42192
42205
  severity: "medium",
42193
- label: "Open audit warnings",
42206
+ label: "Open medium findings",
42207
+ category: "audits",
42208
+ howToFix: "Open the audit detail page and work through the open warnings/missing checks",
42209
+ scope: "project"
42210
+ },
42211
+ {
42212
+ id: "findings.minor",
42213
+ dimension: "findings",
42214
+ // The lenient tier under findings.medium (#580): 1–4 open mediums, or
42215
+ // only lows, read as backlog — visible but never banding.
42216
+ severity: "low",
42217
+ label: "Minor findings",
42194
42218
  category: "audits",
42195
42219
  howToFix: "Open the audit detail page and work through the open warnings/missing checks",
42196
42220
  scope: "project"
@@ -42199,7 +42223,8 @@ var ISSUE_RULES = [
42199
42223
  {
42200
42224
  id: "audit.never",
42201
42225
  dimension: "audit-coverage",
42202
- severity: "medium",
42226
+ // Coverage nudge — demoted Medium → Low in the #580 lenient phase.
42227
+ severity: "low",
42203
42228
  label: "Never audited",
42204
42229
  category: "audits",
42205
42230
  howToFix: "Run `/melt-dev-tech-audit` on the repo to create the baseline",
@@ -42209,7 +42234,8 @@ var ISSUE_RULES = [
42209
42234
  {
42210
42235
  id: "audit.stale",
42211
42236
  dimension: "audit-coverage",
42212
- severity: "medium",
42237
+ // Staleness nudge — demoted Medium → Low in the #580 lenient phase.
42238
+ severity: "low",
42213
42239
  label: "Audit over 90 days old",
42214
42240
  category: "audits",
42215
42241
  howToFix: "Run `/melt-dev-tech-audit` on the repo to refresh the baseline",
@@ -42231,7 +42257,8 @@ var ISSUE_RULES = [
42231
42257
  {
42232
42258
  id: "audit.partial",
42233
42259
  dimension: "audit-coverage",
42234
- severity: "medium",
42260
+ // Coverage nudge — demoted Medium → Low in the #580 lenient phase.
42261
+ severity: "low",
42235
42262
  label: "Some repos never audited",
42236
42263
  category: "audits",
42237
42264
  howToFix: "Run `/melt-dev-tech-audit` on each unaudited repo to create its baseline",
@@ -54540,9 +54567,9 @@ function createProfileAuditsResource2(config2) {
54540
54567
  function createSupportEffortResource2(config2) {
54541
54568
  return {
54542
54569
  /**
54543
- * Get the by-project + by-architect rollups, the week/month trend, and the
54544
- * actionable missing-time worklist. `period` selects the trend granularity
54545
- * (default 'week').
54570
+ * Get the by-project + by-architect rollups, the project × month matrix
54571
+ * (last 6 months), the week/month trend, and the actionable missing-time
54572
+ * worklist. `period` selects the trend granularity (default 'week').
54546
54573
  */
54547
54574
  async get(opts = {}) {
54548
54575
  const params = new URLSearchParams();
@@ -54716,9 +54743,9 @@ var ISSUE_RULES2 = [
54716
54743
  {
54717
54744
  id: "roadmap.none",
54718
54745
  dimension: "roadmap",
54719
- // Setup/hygiene gap — Medium, not High (#446 follow-up: process-hygiene
54720
- // rules softened so the portfolio's genuinely-critical signals stand out).
54721
- severity: "medium",
54746
+ // Setup/hygiene gap — demoted Medium → Low in the #580 lenient phase
54747
+ // (setup nudges shouldn't band a project; re-promote when ratcheting).
54748
+ severity: "low",
54722
54749
  label: "No roadmap",
54723
54750
  category: "gaps",
54724
54751
  howToFix: "Open the project's Roadmap tab and add an active phase with at least one planned feature",
@@ -54801,7 +54828,8 @@ var ISSUE_RULES2 = [
54801
54828
  {
54802
54829
  id: "board.no-mapping",
54803
54830
  dimension: "board",
54804
- severity: "medium",
54831
+ // Setup nudge — demoted Medium → Low in the #580 lenient phase.
54832
+ severity: "low",
54805
54833
  label: "No board connected",
54806
54834
  category: "gaps",
54807
54835
  howToFix: "Open Project Settings and connect a Linear team or Jira project in the mappings card",
@@ -54811,7 +54839,8 @@ var ISSUE_RULES2 = [
54811
54839
  {
54812
54840
  id: "tracker.no-oauth",
54813
54841
  dimension: "board",
54814
- severity: "medium",
54842
+ // Setup nudge — demoted Medium → Low in the #580 lenient phase.
54843
+ severity: "low",
54815
54844
  label: "Tracker needs OAuth connect",
54816
54845
  category: "gaps",
54817
54846
  howToFix: "Open Project Settings \u2192 Tracker connections and click Connect for the missing provider; that switches the project off Melt's shared key onto its own OAuth grant",
@@ -54821,7 +54850,9 @@ var ISSUE_RULES2 = [
54821
54850
  {
54822
54851
  id: "board.empty",
54823
54852
  dimension: "board",
54824
- severity: "medium",
54853
+ // Hygiene check — demoted Medium → Low in the #580 lenient phase (fires
54854
+ // in normal operation, e.g. between cycles).
54855
+ severity: "low",
54825
54856
  label: "Board has no open tickets",
54826
54857
  category: "sprint",
54827
54858
  howToFix: "Confirm the team is creating stories on the board, or that the mapping is correct",
@@ -54830,8 +54861,10 @@ var ISSUE_RULES2 = [
54830
54861
  {
54831
54862
  id: "board.health-low",
54832
54863
  dimension: "board",
54864
+ // The genuinely-bad tier. Threshold moved <40% → <55% in the #580 lenient
54865
+ // phase so the medium tier only covers boards that are truly failing.
54833
54866
  severity: "medium",
54834
- label: "Board health below 40%",
54867
+ label: "Board health below 55%",
54835
54868
  category: "sprint",
54836
54869
  howToFix: "Open the project's Linear board and triage the failing audit checks",
54837
54870
  scope: "project"
@@ -54839,8 +54872,10 @@ var ISSUE_RULES2 = [
54839
54872
  {
54840
54873
  id: "board.health-mid",
54841
54874
  dimension: "board",
54842
- severity: "medium",
54843
- label: "Board health 40\u201369%",
54875
+ // The could-be-better tier (55–69%) — demoted Medium → Low in the #580
54876
+ // lenient phase; a passing-but-imperfect board is backlog, not an alarm.
54877
+ severity: "low",
54878
+ label: "Board health 55\u201369%",
54844
54879
  category: "sprint",
54845
54880
  howToFix: "Open the project's Linear board and triage the failing audit checks",
54846
54881
  scope: "project"
@@ -54848,7 +54883,8 @@ var ISSUE_RULES2 = [
54848
54883
  {
54849
54884
  id: "board.audit-stale",
54850
54885
  dimension: "board",
54851
- severity: "medium",
54886
+ // Staleness nudge — demoted Medium → Low in the #580 lenient phase.
54887
+ severity: "low",
54852
54888
  label: "Board audit stale",
54853
54889
  category: "sprint",
54854
54890
  howToFix: "Open the project page and click 'Run board audit' to refresh the score",
@@ -54929,7 +54965,8 @@ var ISSUE_RULES2 = [
54929
54965
  {
54930
54966
  id: "activity.dormant",
54931
54967
  dimension: "activity",
54932
- severity: "medium",
54968
+ // Staleness signal — demoted Medium → Low in the #580 lenient phase.
54969
+ severity: "low",
54933
54970
  label: "No activity in 21+ days",
54934
54971
  category: "gaps",
54935
54972
  howToFix: "No meltctl activity in N days \u2014 confirm the project is still active, or mark it on-hold",
@@ -54940,7 +54977,8 @@ var ISSUE_RULES2 = [
54940
54977
  {
54941
54978
  id: "plans.stale",
54942
54979
  dimension: "plans",
54943
- severity: "medium",
54980
+ // Adoption nudge — demoted Medium → Low in the #580 lenient phase.
54981
+ severity: "low",
54944
54982
  label: "No recent plan",
54945
54983
  category: "plans",
54946
54984
  howToFix: "Remind the team to run `meltctl plan submit` before starting new tickets",
@@ -55016,8 +55054,21 @@ var ISSUE_RULES2 = [
55016
55054
  {
55017
55055
  id: "findings.medium",
55018
55056
  dimension: "findings",
55057
+ // Fires only when ≥5 medium findings are open (#580) — a real backlog
55058
+ // worth banding, not one warning. Smaller counts fall to findings.minor.
55019
55059
  severity: "medium",
55020
- label: "Open audit warnings",
55060
+ label: "Open medium findings",
55061
+ category: "audits",
55062
+ howToFix: "Open the audit detail page and work through the open warnings/missing checks",
55063
+ scope: "project"
55064
+ },
55065
+ {
55066
+ id: "findings.minor",
55067
+ dimension: "findings",
55068
+ // The lenient tier under findings.medium (#580): 1–4 open mediums, or
55069
+ // only lows, read as backlog — visible but never banding.
55070
+ severity: "low",
55071
+ label: "Minor findings",
55021
55072
  category: "audits",
55022
55073
  howToFix: "Open the audit detail page and work through the open warnings/missing checks",
55023
55074
  scope: "project"
@@ -55026,7 +55077,8 @@ var ISSUE_RULES2 = [
55026
55077
  {
55027
55078
  id: "audit.never",
55028
55079
  dimension: "audit-coverage",
55029
- severity: "medium",
55080
+ // Coverage nudge — demoted Medium → Low in the #580 lenient phase.
55081
+ severity: "low",
55030
55082
  label: "Never audited",
55031
55083
  category: "audits",
55032
55084
  howToFix: "Run `/melt-dev-tech-audit` on the repo to create the baseline",
@@ -55036,7 +55088,8 @@ var ISSUE_RULES2 = [
55036
55088
  {
55037
55089
  id: "audit.stale",
55038
55090
  dimension: "audit-coverage",
55039
- severity: "medium",
55091
+ // Staleness nudge — demoted Medium → Low in the #580 lenient phase.
55092
+ severity: "low",
55040
55093
  label: "Audit over 90 days old",
55041
55094
  category: "audits",
55042
55095
  howToFix: "Run `/melt-dev-tech-audit` on the repo to refresh the baseline",
@@ -55058,7 +55111,8 @@ var ISSUE_RULES2 = [
55058
55111
  {
55059
55112
  id: "audit.partial",
55060
55113
  dimension: "audit-coverage",
55061
- severity: "medium",
55114
+ // Coverage nudge — demoted Medium → Low in the #580 lenient phase.
55115
+ severity: "low",
55062
55116
  label: "Some repos never audited",
55063
55117
  category: "audits",
55064
55118
  howToFix: "Run `/melt-dev-tech-audit` on each unaudited repo to create its baseline",
@@ -55907,6 +55961,7 @@ async function getSupportEffort(client, input) {
55907
55961
  asOf: data.asOf,
55908
55962
  byProject: data.byProject,
55909
55963
  byArchitect: data.byArchitect,
55964
+ byProjectMonthly: data.byProjectMonthly,
55910
55965
  trend: data.trend,
55911
55966
  // Surface the count prominently; the full actionable list is available via
55912
55967
  // the read API / dashboard page (Slice 2) rather than flooding the tool.
@@ -55919,7 +55974,7 @@ function registerSupportEffortTools(server, getClient2) {
55919
55974
  "get_support_effort",
55920
55975
  {
55921
55976
  title: "Get tech-support effort",
55922
- description: "Tech-support / DevOps effort rollup for the 'Tech Support Ops' Linear team (key DEV). Returns logged hours (parsed from each ticket's self-reported 'Time Spent' label \u2014 the architect's active effort, NOT cycle time) and ticket counts rolled up two ways: `byProject` (which client/product the support load lands on) and `byArchitect` (who is carrying it). Each rollup entry has ticketCount, totalLoggedMinutes, avgLoggedMinutes, and missingTimeCount. Also returns `missingTimeCount`: the number of Done tickets with no time label (a data-quality gap that makes the hours less trustworthy \u2014 the dashboard page surfaces the actionable list). `period` selects the trend granularity (week|month, default week). Manager-gated. Use for 'how much support work did <project> need?', 'who's carrying the support load?', and 'is our support time logged completely?'.",
55977
+ description: "Tech-support / DevOps effort rollup for the 'Tech Support Ops' Linear team (key DEV). Returns logged hours (parsed from each ticket's self-reported 'Time Spent' label \u2014 the architect's active effort, NOT cycle time) and ticket counts rolled up two ways: `byProject` (which client/product the support load lands on) and `byArchitect` (who is carrying it). Each rollup entry has ticketCount, totalLoggedMinutes, avgLoggedMinutes, and missingTimeCount. `byProjectMonthly` is a project \xD7 month matrix over the last 6 months (oldest \u2192 newest, zero-filled): each entry has projectId, projectName, and months[{period 'YYYY-MM', ticketCount, totalLoggedMinutes}] \u2014 use it for 'how much did project X cost us in June?' or 'how is support spend distributed across projects month over month?'. Also returns `missingTimeCount`: the number of Done tickets with no time label (a data-quality gap that makes the hours less trustworthy \u2014 the dashboard page surfaces the actionable list). Only tickets completed on/after 2026-07-01 count as missing time \u2014 older gaps are not backfillable and are exempt, though their logged hours still aggregate. `period` selects the trend granularity (week|month, default week). Manager-gated. Use for 'how much support work did <project> need?', 'who's carrying the support load?', and 'is our support time logged completely?'.",
55923
55978
  inputSchema: {
55924
55979
  period: external_exports.enum(["week", "month"]).optional().describe("Trend bucket granularity. Default week.")
55925
55980
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meltstudio/meltctl",
3
- "version": "5.13.0",
3
+ "version": "5.15.0",
4
4
  "description": "AI-first development tooling for Melt teams — companion CLI for the org-distributed Claude Code dev skills",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",