@levr-one/cli 0.12.14 → 0.12.15
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.
|
@@ -918,7 +918,8 @@ const LEVR_PREAPPROVED_TOOLS = [
|
|
|
918
918
|
"report_gate_results",
|
|
919
919
|
"get_gate_status",
|
|
920
920
|
"transition_issue",
|
|
921
|
-
"get_practice_app"
|
|
921
|
+
"get_practice_app",
|
|
922
|
+
"my_work"
|
|
922
923
|
];
|
|
923
924
|
/**
|
|
924
925
|
* A plain description of what each tool does, printed next to its entry in
|
|
@@ -939,7 +940,8 @@ const LEVR_PREAPPROVED_TOOL_DESCRIPTIONS = {
|
|
|
939
940
|
verify_deliverable_gates: "runs the task's checklist",
|
|
940
941
|
report_gate_results: "records the checklist results your agent ran",
|
|
941
942
|
get_gate_status: "reads the task's checklist results",
|
|
942
|
-
get_practice_app: "reads the sample practice app"
|
|
943
|
+
get_practice_app: "reads the sample practice app",
|
|
944
|
+
my_work: "reads your tasks, ranked, with what to pick up next"
|
|
943
945
|
};
|
|
944
946
|
|
|
945
947
|
//#endregion
|
|
@@ -2629,6 +2629,736 @@ const ReviewLoopPrMergedEventSchema = z.object({
|
|
|
2629
2629
|
*/
|
|
2630
2630
|
const ReviewLoopEventSchema = z.discriminatedUnion("event", [ReviewLoopPushEventSchema, ReviewLoopPrMergedEventSchema]);
|
|
2631
2631
|
|
|
2632
|
+
//#endregion
|
|
2633
|
+
//#region ../shared/dist/issues/next-issue/job-profiles.js
|
|
2634
|
+
/** States where a deliverable waits for verification (QA's lead tier). */
|
|
2635
|
+
const VERIFICATION_STATE_NAMES = ["In Review", "Gates Pending"];
|
|
2636
|
+
/**
|
|
2637
|
+
* The state named Review that PM's lead tier admits Proposals and Plans from
|
|
2638
|
+
* (a Plan's own `Review` state). A Proposal's `In Review` is a verification
|
|
2639
|
+
* name, declared once in VERIFICATION_STATE_NAMES, and is NOT part of this
|
|
2640
|
+
* tier; Proposals reach PM through the triage clause instead.
|
|
2641
|
+
*/
|
|
2642
|
+
const PM_REVIEW_STATE_NAMES = ["Review"];
|
|
2643
|
+
/** The dev type order. An untyped or unknown type sorts after the last tier. */
|
|
2644
|
+
const DEV_TYPE_TIERS = [
|
|
2645
|
+
["Incident"],
|
|
2646
|
+
["Bug", "Security"],
|
|
2647
|
+
["Deliverable", "Finding"],
|
|
2648
|
+
[
|
|
2649
|
+
"Task",
|
|
2650
|
+
"Feature",
|
|
2651
|
+
"Improvement",
|
|
2652
|
+
"Story",
|
|
2653
|
+
"Chore"
|
|
2654
|
+
],
|
|
2655
|
+
["Doc", "Test"]
|
|
2656
|
+
];
|
|
2657
|
+
/** Case-insensitive, whitespace-trimmed name match. */
|
|
2658
|
+
function nameMatches(name, names) {
|
|
2659
|
+
if (!name) return false;
|
|
2660
|
+
const needle = name.trim().toLowerCase();
|
|
2661
|
+
return names.some((candidate) => candidate.toLowerCase() === needle);
|
|
2662
|
+
}
|
|
2663
|
+
const DEV_PROFILE = {
|
|
2664
|
+
job: "dev",
|
|
2665
|
+
typeTiers: DEV_TYPE_TIERS,
|
|
2666
|
+
leadTier: null,
|
|
2667
|
+
admittedContainerTypes: [],
|
|
2668
|
+
affinity: null
|
|
2669
|
+
};
|
|
2670
|
+
/** Move `promoted` types into a new first tier, keeping the rest in dev order. */
|
|
2671
|
+
function promoteTypes(tiers, promoted) {
|
|
2672
|
+
const promotedLower = new Set(promoted.map((t) => t.toLowerCase()));
|
|
2673
|
+
return [promoted, ...tiers.map((tier) => tier.filter((t) => !promotedLower.has(t.toLowerCase()))).filter((tier) => tier.length > 0)];
|
|
2674
|
+
}
|
|
2675
|
+
const QA_VERIFICATION_TIER = {
|
|
2676
|
+
name: "verification",
|
|
2677
|
+
matches: (issue$1) => nameMatches(issue$1.stateName, VERIFICATION_STATE_NAMES),
|
|
2678
|
+
reason: () => "waiting in verification"
|
|
2679
|
+
};
|
|
2680
|
+
/**
|
|
2681
|
+
* PM's lead tier: every triage-type issue (a Decision awaiting an answer is
|
|
2682
|
+
* one), plus Proposals and Plans in a state named Review
|
|
2683
|
+
* (PM_REVIEW_STATE_NAMES). A Proposal in Triage matches the first clause; a
|
|
2684
|
+
* Proposal, Plan or Decision in any other state does not.
|
|
2685
|
+
*/
|
|
2686
|
+
const PM_TRIAGE_TIER = {
|
|
2687
|
+
name: "triage",
|
|
2688
|
+
matches: (issue$1) => issue$1.stateType === "triage" || nameMatches(issue$1.typeName, ["Proposal", "Plan"]) && nameMatches(issue$1.stateName, PM_REVIEW_STATE_NAMES),
|
|
2689
|
+
reason: (issue$1) => {
|
|
2690
|
+
if (nameMatches(issue$1.typeName, ["Proposal"])) return "proposal awaiting review";
|
|
2691
|
+
if (nameMatches(issue$1.typeName, ["Plan"])) return "plan in review";
|
|
2692
|
+
if (nameMatches(issue$1.typeName, ["Decision"])) return "decision awaiting an answer";
|
|
2693
|
+
return "waiting in triage";
|
|
2694
|
+
}
|
|
2695
|
+
};
|
|
2696
|
+
const JOB_PROFILES = {
|
|
2697
|
+
dev: DEV_PROFILE,
|
|
2698
|
+
qa: {
|
|
2699
|
+
...DEV_PROFILE,
|
|
2700
|
+
job: "qa",
|
|
2701
|
+
typeTiers: promoteTypes(DEV_PROFILE.typeTiers, [
|
|
2702
|
+
"Bug",
|
|
2703
|
+
"Incident",
|
|
2704
|
+
"Test",
|
|
2705
|
+
"Finding"
|
|
2706
|
+
]),
|
|
2707
|
+
leadTier: QA_VERIFICATION_TIER
|
|
2708
|
+
},
|
|
2709
|
+
pm: {
|
|
2710
|
+
...DEV_PROFILE,
|
|
2711
|
+
job: "pm",
|
|
2712
|
+
leadTier: PM_TRIAGE_TIER,
|
|
2713
|
+
admittedContainerTypes: [
|
|
2714
|
+
"Proposal",
|
|
2715
|
+
"Plan",
|
|
2716
|
+
"Decision"
|
|
2717
|
+
]
|
|
2718
|
+
}
|
|
2719
|
+
};
|
|
2720
|
+
|
|
2721
|
+
//#endregion
|
|
2722
|
+
//#region ../shared/dist/issues/next-issue/rank-next-issues.js
|
|
2723
|
+
const DUE_SOON_WINDOW_MS = 10080 * 60 * 1e3;
|
|
2724
|
+
|
|
2725
|
+
//#endregion
|
|
2726
|
+
//#region ../shared/dist/issues/next-issue/conformance-fixture.js
|
|
2727
|
+
/**
|
|
2728
|
+
* The conformance fixture for the next-issue ranker (Plan ENG-7779, D1 sub-req 7).
|
|
2729
|
+
*
|
|
2730
|
+
* Raw `SnapshotRows` plus the EXPECTED full order for each job. The same
|
|
2731
|
+
* fixture is asserted by the shared unit tests (D1), by the backend adapter's
|
|
2732
|
+
* conformance spec once the rows are round-tripped through Postgres (D2) and by
|
|
2733
|
+
* the client mapper (D4): if the two sides ever disagree on the order, this is
|
|
2734
|
+
* what they disagree against.
|
|
2735
|
+
*
|
|
2736
|
+
* The actor is `user-me`, on team `team-1`. The completed issue is ENG-100,
|
|
2737
|
+
* a child of plan ENG-90; it was blocking ENG-101 (now free) and ENG-102 (still
|
|
2738
|
+
* blocked by ENG-300). `now` is 2026-10-23T12:00:00Z.
|
|
2739
|
+
*
|
|
2740
|
+
* Coverage checklist (one row per bullet, at least):
|
|
2741
|
+
* - every dev tier: parked, ownership, momentum (unblocked AND sibling), each
|
|
2742
|
+
* state type, each priority value including 0, each deadline bucket, each
|
|
2743
|
+
* type tier, recency and identifier tiebreaks
|
|
2744
|
+
* - a mirrored relation pair (ENG-129 ⇄ ENG-300) counted once
|
|
2745
|
+
* - a hidden blocker (ENG-116 → X-999, absent everywhere)
|
|
2746
|
+
* - an open blocker that exists only in `relationEndStates` (ENG-117 → out-1)
|
|
2747
|
+
* - a closed blocker in the pool (ENG-118 → ENG-119, done) and a closed
|
|
2748
|
+
* `depends_on` (ENG-130 → ENG-119)
|
|
2749
|
+
* - a past snooze (ENG-114) and a future snooze (ENG-113)
|
|
2750
|
+
* - an unassigned in_progress issue (ENG-107) treated as to_do
|
|
2751
|
+
* - excluded rows present for every exclusion: finished (ENG-100, ENG-119,
|
|
2752
|
+
* ENG-128), containers (ENG-90, ENG-123, ENG-124, ENG-126), someone else's
|
|
2753
|
+
* (ENG-120, ENG-121, ENG-127, ENG-300) — the job tests slice the pool down
|
|
2754
|
+
* to fewer survivors than `limit` and assert none of these fill the gap
|
|
2755
|
+
*/
|
|
2756
|
+
const ME = "user-me";
|
|
2757
|
+
const OTHER = "user-other";
|
|
2758
|
+
const TEAM = "team-1";
|
|
2759
|
+
const S = {
|
|
2760
|
+
triage: "st-triage",
|
|
2761
|
+
backlog: "st-backlog",
|
|
2762
|
+
todo: "st-todo",
|
|
2763
|
+
inProgress: "st-in-progress",
|
|
2764
|
+
inReview: "st-in-review",
|
|
2765
|
+
gatesPending: "st-gates-pending",
|
|
2766
|
+
blocked: "st-blocked",
|
|
2767
|
+
planReview: "st-plan-review",
|
|
2768
|
+
done: "st-done",
|
|
2769
|
+
canceled: "st-canceled"
|
|
2770
|
+
};
|
|
2771
|
+
const T = {
|
|
2772
|
+
incident: "tl-incident",
|
|
2773
|
+
bug: "tl-bug",
|
|
2774
|
+
security: "tl-security",
|
|
2775
|
+
deliverable: "tl-deliverable",
|
|
2776
|
+
finding: "tl-finding",
|
|
2777
|
+
task: "tl-task",
|
|
2778
|
+
feature: "tl-feature",
|
|
2779
|
+
doc: "tl-doc",
|
|
2780
|
+
test: "tl-test",
|
|
2781
|
+
epic: "tl-epic",
|
|
2782
|
+
plan: "tl-plan",
|
|
2783
|
+
proposal: "tl-proposal",
|
|
2784
|
+
decision: "tl-decision"
|
|
2785
|
+
};
|
|
2786
|
+
const CYCLE_ACTIVE = "cycle-active";
|
|
2787
|
+
const CYCLE_UPCOMING = "cycle-upcoming";
|
|
2788
|
+
const day = (d) => `2026-10-${d}T00:00:00.000Z`;
|
|
2789
|
+
const issue = (s) => ({
|
|
2790
|
+
id: `i-${s.n}`,
|
|
2791
|
+
identifier: `ENG-${s.n}`,
|
|
2792
|
+
title: s.title ?? `Issue ${s.n}`,
|
|
2793
|
+
team_id: TEAM,
|
|
2794
|
+
project_id: "project-1",
|
|
2795
|
+
parent_id: s.parent ?? null,
|
|
2796
|
+
assignee_id: s.assignee,
|
|
2797
|
+
priority: s.priority,
|
|
2798
|
+
workflow_state_id: s.state,
|
|
2799
|
+
type_label_id: s.type,
|
|
2800
|
+
due_date: s.due ?? null,
|
|
2801
|
+
snoozed_until: s.snoozed ?? null,
|
|
2802
|
+
sla_status: s.sla ?? null,
|
|
2803
|
+
cycle_id: s.cycle ?? null,
|
|
2804
|
+
updated_at: day(s.updated)
|
|
2805
|
+
});
|
|
2806
|
+
const rel = (issueN, relation_type, relatedN) => ({
|
|
2807
|
+
issue_id: typeof issueN === "number" ? `i-${issueN}` : issueN,
|
|
2808
|
+
related_issue_id: typeof relatedN === "number" ? `i-${relatedN}` : relatedN,
|
|
2809
|
+
relation_type
|
|
2810
|
+
});
|
|
2811
|
+
const NEXT_ISSUE_CONFORMANCE_FIXTURE = {
|
|
2812
|
+
actorId: ME,
|
|
2813
|
+
teamIds: [TEAM],
|
|
2814
|
+
completedIssueId: "i-100",
|
|
2815
|
+
now: "2026-10-23T12:00:00.000Z",
|
|
2816
|
+
rows: {
|
|
2817
|
+
workflowStates: [
|
|
2818
|
+
{
|
|
2819
|
+
id: S.triage,
|
|
2820
|
+
name: "Triage",
|
|
2821
|
+
type: "triage"
|
|
2822
|
+
},
|
|
2823
|
+
{
|
|
2824
|
+
id: S.backlog,
|
|
2825
|
+
name: "Backlog",
|
|
2826
|
+
type: "backlog"
|
|
2827
|
+
},
|
|
2828
|
+
{
|
|
2829
|
+
id: S.todo,
|
|
2830
|
+
name: "To Do",
|
|
2831
|
+
type: "to_do"
|
|
2832
|
+
},
|
|
2833
|
+
{
|
|
2834
|
+
id: S.inProgress,
|
|
2835
|
+
name: "In Progress",
|
|
2836
|
+
type: "in_progress"
|
|
2837
|
+
},
|
|
2838
|
+
{
|
|
2839
|
+
id: S.inReview,
|
|
2840
|
+
name: "In Review",
|
|
2841
|
+
type: "in_progress"
|
|
2842
|
+
},
|
|
2843
|
+
{
|
|
2844
|
+
id: S.gatesPending,
|
|
2845
|
+
name: "Gates Pending",
|
|
2846
|
+
type: "in_progress"
|
|
2847
|
+
},
|
|
2848
|
+
{
|
|
2849
|
+
id: S.blocked,
|
|
2850
|
+
name: "Blocked",
|
|
2851
|
+
type: "in_progress"
|
|
2852
|
+
},
|
|
2853
|
+
{
|
|
2854
|
+
id: S.planReview,
|
|
2855
|
+
name: "Review",
|
|
2856
|
+
type: "in_progress"
|
|
2857
|
+
},
|
|
2858
|
+
{
|
|
2859
|
+
id: S.done,
|
|
2860
|
+
name: "Done",
|
|
2861
|
+
type: "done"
|
|
2862
|
+
},
|
|
2863
|
+
{
|
|
2864
|
+
id: S.canceled,
|
|
2865
|
+
name: "Canceled",
|
|
2866
|
+
type: "canceled"
|
|
2867
|
+
}
|
|
2868
|
+
],
|
|
2869
|
+
typeLabels: [
|
|
2870
|
+
{
|
|
2871
|
+
id: T.incident,
|
|
2872
|
+
name: "Incident"
|
|
2873
|
+
},
|
|
2874
|
+
{
|
|
2875
|
+
id: T.bug,
|
|
2876
|
+
name: "Bug"
|
|
2877
|
+
},
|
|
2878
|
+
{
|
|
2879
|
+
id: T.security,
|
|
2880
|
+
name: "Security"
|
|
2881
|
+
},
|
|
2882
|
+
{
|
|
2883
|
+
id: T.deliverable,
|
|
2884
|
+
name: "Deliverable"
|
|
2885
|
+
},
|
|
2886
|
+
{
|
|
2887
|
+
id: T.finding,
|
|
2888
|
+
name: "Finding"
|
|
2889
|
+
},
|
|
2890
|
+
{
|
|
2891
|
+
id: T.task,
|
|
2892
|
+
name: "Task"
|
|
2893
|
+
},
|
|
2894
|
+
{
|
|
2895
|
+
id: T.feature,
|
|
2896
|
+
name: "Feature"
|
|
2897
|
+
},
|
|
2898
|
+
{
|
|
2899
|
+
id: T.doc,
|
|
2900
|
+
name: "Doc"
|
|
2901
|
+
},
|
|
2902
|
+
{
|
|
2903
|
+
id: T.test,
|
|
2904
|
+
name: "Test"
|
|
2905
|
+
},
|
|
2906
|
+
{
|
|
2907
|
+
id: T.epic,
|
|
2908
|
+
name: "Epic"
|
|
2909
|
+
},
|
|
2910
|
+
{
|
|
2911
|
+
id: T.plan,
|
|
2912
|
+
name: "Plan"
|
|
2913
|
+
},
|
|
2914
|
+
{
|
|
2915
|
+
id: T.proposal,
|
|
2916
|
+
name: "Proposal"
|
|
2917
|
+
},
|
|
2918
|
+
{
|
|
2919
|
+
id: T.decision,
|
|
2920
|
+
name: "Decision"
|
|
2921
|
+
}
|
|
2922
|
+
],
|
|
2923
|
+
cycles: [{
|
|
2924
|
+
id: CYCLE_ACTIVE,
|
|
2925
|
+
status: "active",
|
|
2926
|
+
starts_at: day("20"),
|
|
2927
|
+
ends_at: day("26")
|
|
2928
|
+
}, {
|
|
2929
|
+
id: CYCLE_UPCOMING,
|
|
2930
|
+
status: "upcoming",
|
|
2931
|
+
starts_at: day("27"),
|
|
2932
|
+
ends_at: "2026-11-02T00:00:00.000Z"
|
|
2933
|
+
}],
|
|
2934
|
+
issues: [
|
|
2935
|
+
issue({
|
|
2936
|
+
n: 90,
|
|
2937
|
+
state: S.inProgress,
|
|
2938
|
+
priority: 2,
|
|
2939
|
+
type: T.plan,
|
|
2940
|
+
assignee: ME,
|
|
2941
|
+
updated: "23",
|
|
2942
|
+
title: "Plan ENG-90"
|
|
2943
|
+
}),
|
|
2944
|
+
issue({
|
|
2945
|
+
n: 100,
|
|
2946
|
+
state: S.done,
|
|
2947
|
+
priority: 3,
|
|
2948
|
+
type: T.task,
|
|
2949
|
+
assignee: ME,
|
|
2950
|
+
updated: "23",
|
|
2951
|
+
parent: "i-90",
|
|
2952
|
+
title: "Completed"
|
|
2953
|
+
}),
|
|
2954
|
+
issue({
|
|
2955
|
+
n: 101,
|
|
2956
|
+
state: S.todo,
|
|
2957
|
+
priority: 3,
|
|
2958
|
+
type: T.task,
|
|
2959
|
+
assignee: null,
|
|
2960
|
+
updated: "20",
|
|
2961
|
+
title: "Unblocked by 100"
|
|
2962
|
+
}),
|
|
2963
|
+
issue({
|
|
2964
|
+
n: 102,
|
|
2965
|
+
state: S.todo,
|
|
2966
|
+
priority: 1,
|
|
2967
|
+
type: T.bug,
|
|
2968
|
+
assignee: ME,
|
|
2969
|
+
updated: "14",
|
|
2970
|
+
title: "Still blocked"
|
|
2971
|
+
}),
|
|
2972
|
+
issue({
|
|
2973
|
+
n: 103,
|
|
2974
|
+
state: S.todo,
|
|
2975
|
+
priority: 2,
|
|
2976
|
+
type: T.feature,
|
|
2977
|
+
assignee: null,
|
|
2978
|
+
updated: "20",
|
|
2979
|
+
parent: "i-90",
|
|
2980
|
+
title: "Sibling"
|
|
2981
|
+
}),
|
|
2982
|
+
issue({
|
|
2983
|
+
n: 104,
|
|
2984
|
+
state: S.inProgress,
|
|
2985
|
+
priority: 3,
|
|
2986
|
+
type: T.task,
|
|
2987
|
+
assignee: ME,
|
|
2988
|
+
updated: "22",
|
|
2989
|
+
title: "Mine in progress"
|
|
2990
|
+
}),
|
|
2991
|
+
issue({
|
|
2992
|
+
n: 105,
|
|
2993
|
+
state: S.todo,
|
|
2994
|
+
priority: 1,
|
|
2995
|
+
type: T.bug,
|
|
2996
|
+
assignee: ME,
|
|
2997
|
+
updated: "22",
|
|
2998
|
+
title: "Mine urgent"
|
|
2999
|
+
}),
|
|
3000
|
+
issue({
|
|
3001
|
+
n: 106,
|
|
3002
|
+
state: S.backlog,
|
|
3003
|
+
priority: 2,
|
|
3004
|
+
type: T.task,
|
|
3005
|
+
assignee: ME,
|
|
3006
|
+
updated: "12",
|
|
3007
|
+
due: day("20"),
|
|
3008
|
+
title: "Mine backlog overdue"
|
|
3009
|
+
}),
|
|
3010
|
+
issue({
|
|
3011
|
+
n: 107,
|
|
3012
|
+
state: S.inProgress,
|
|
3013
|
+
priority: 1,
|
|
3014
|
+
type: T.task,
|
|
3015
|
+
assignee: null,
|
|
3016
|
+
updated: "21",
|
|
3017
|
+
title: "Unowned in progress"
|
|
3018
|
+
}),
|
|
3019
|
+
issue({
|
|
3020
|
+
n: 108,
|
|
3021
|
+
state: S.todo,
|
|
3022
|
+
priority: 0,
|
|
3023
|
+
type: T.task,
|
|
3024
|
+
assignee: null,
|
|
3025
|
+
updated: "22",
|
|
3026
|
+
title: "No priority"
|
|
3027
|
+
}),
|
|
3028
|
+
issue({
|
|
3029
|
+
n: 109,
|
|
3030
|
+
state: S.todo,
|
|
3031
|
+
priority: 4,
|
|
3032
|
+
type: T.incident,
|
|
3033
|
+
assignee: null,
|
|
3034
|
+
updated: "21",
|
|
3035
|
+
title: "Low incident"
|
|
3036
|
+
}),
|
|
3037
|
+
issue({
|
|
3038
|
+
n: 110,
|
|
3039
|
+
state: S.todo,
|
|
3040
|
+
priority: 3,
|
|
3041
|
+
type: T.bug,
|
|
3042
|
+
assignee: null,
|
|
3043
|
+
updated: "20",
|
|
3044
|
+
cycle: CYCLE_ACTIVE,
|
|
3045
|
+
title: "In active cycle"
|
|
3046
|
+
}),
|
|
3047
|
+
issue({
|
|
3048
|
+
n: 111,
|
|
3049
|
+
state: S.todo,
|
|
3050
|
+
priority: 3,
|
|
3051
|
+
type: T.doc,
|
|
3052
|
+
assignee: null,
|
|
3053
|
+
updated: "10",
|
|
3054
|
+
title: "Doc"
|
|
3055
|
+
}),
|
|
3056
|
+
issue({
|
|
3057
|
+
n: 112,
|
|
3058
|
+
state: S.todo,
|
|
3059
|
+
priority: 3,
|
|
3060
|
+
type: null,
|
|
3061
|
+
assignee: null,
|
|
3062
|
+
updated: "21",
|
|
3063
|
+
title: "Untyped"
|
|
3064
|
+
}),
|
|
3065
|
+
issue({
|
|
3066
|
+
n: 113,
|
|
3067
|
+
state: S.todo,
|
|
3068
|
+
priority: 1,
|
|
3069
|
+
type: T.bug,
|
|
3070
|
+
assignee: ME,
|
|
3071
|
+
updated: "14",
|
|
3072
|
+
snoozed: "2026-11-01T00:00:00.000Z",
|
|
3073
|
+
title: "Snoozed"
|
|
3074
|
+
}),
|
|
3075
|
+
issue({
|
|
3076
|
+
n: 114,
|
|
3077
|
+
state: S.todo,
|
|
3078
|
+
priority: 3,
|
|
3079
|
+
type: T.task,
|
|
3080
|
+
assignee: ME,
|
|
3081
|
+
updated: "16",
|
|
3082
|
+
snoozed: day("01"),
|
|
3083
|
+
title: "Snooze expired"
|
|
3084
|
+
}),
|
|
3085
|
+
issue({
|
|
3086
|
+
n: 115,
|
|
3087
|
+
state: S.blocked,
|
|
3088
|
+
priority: 1,
|
|
3089
|
+
type: T.bug,
|
|
3090
|
+
assignee: ME,
|
|
3091
|
+
updated: "19",
|
|
3092
|
+
title: "Blocked state"
|
|
3093
|
+
}),
|
|
3094
|
+
issue({
|
|
3095
|
+
n: 116,
|
|
3096
|
+
state: S.todo,
|
|
3097
|
+
priority: 1,
|
|
3098
|
+
type: T.bug,
|
|
3099
|
+
assignee: ME,
|
|
3100
|
+
updated: "14",
|
|
3101
|
+
title: "Hidden blocker"
|
|
3102
|
+
}),
|
|
3103
|
+
issue({
|
|
3104
|
+
n: 117,
|
|
3105
|
+
state: S.todo,
|
|
3106
|
+
priority: 1,
|
|
3107
|
+
type: T.bug,
|
|
3108
|
+
assignee: ME,
|
|
3109
|
+
updated: "14",
|
|
3110
|
+
title: "Outside-pool blocker"
|
|
3111
|
+
}),
|
|
3112
|
+
issue({
|
|
3113
|
+
n: 118,
|
|
3114
|
+
state: S.todo,
|
|
3115
|
+
priority: 3,
|
|
3116
|
+
type: T.task,
|
|
3117
|
+
assignee: ME,
|
|
3118
|
+
updated: "18",
|
|
3119
|
+
title: "Closed blocker"
|
|
3120
|
+
}),
|
|
3121
|
+
issue({
|
|
3122
|
+
n: 119,
|
|
3123
|
+
state: S.done,
|
|
3124
|
+
priority: 3,
|
|
3125
|
+
type: T.task,
|
|
3126
|
+
assignee: ME,
|
|
3127
|
+
updated: "01",
|
|
3128
|
+
title: "Done blocker"
|
|
3129
|
+
}),
|
|
3130
|
+
issue({
|
|
3131
|
+
n: 120,
|
|
3132
|
+
state: S.inReview,
|
|
3133
|
+
priority: 2,
|
|
3134
|
+
type: T.deliverable,
|
|
3135
|
+
assignee: OTHER,
|
|
3136
|
+
updated: "21",
|
|
3137
|
+
title: "Other in review"
|
|
3138
|
+
}),
|
|
3139
|
+
issue({
|
|
3140
|
+
n: 121,
|
|
3141
|
+
state: S.gatesPending,
|
|
3142
|
+
priority: 3,
|
|
3143
|
+
type: T.deliverable,
|
|
3144
|
+
assignee: OTHER,
|
|
3145
|
+
updated: "21",
|
|
3146
|
+
title: "Other gates pending"
|
|
3147
|
+
}),
|
|
3148
|
+
issue({
|
|
3149
|
+
n: 122,
|
|
3150
|
+
state: S.triage,
|
|
3151
|
+
priority: 2,
|
|
3152
|
+
type: T.bug,
|
|
3153
|
+
assignee: null,
|
|
3154
|
+
updated: "21",
|
|
3155
|
+
title: "Triage bug"
|
|
3156
|
+
}),
|
|
3157
|
+
issue({
|
|
3158
|
+
n: 123,
|
|
3159
|
+
state: S.triage,
|
|
3160
|
+
priority: 3,
|
|
3161
|
+
type: T.proposal,
|
|
3162
|
+
assignee: null,
|
|
3163
|
+
updated: "20",
|
|
3164
|
+
title: "Proposal"
|
|
3165
|
+
}),
|
|
3166
|
+
issue({
|
|
3167
|
+
n: 124,
|
|
3168
|
+
state: S.planReview,
|
|
3169
|
+
priority: 2,
|
|
3170
|
+
type: T.plan,
|
|
3171
|
+
assignee: OTHER,
|
|
3172
|
+
updated: "20",
|
|
3173
|
+
title: "Plan in review"
|
|
3174
|
+
}),
|
|
3175
|
+
issue({
|
|
3176
|
+
n: 125,
|
|
3177
|
+
state: S.triage,
|
|
3178
|
+
priority: 0,
|
|
3179
|
+
type: T.decision,
|
|
3180
|
+
assignee: null,
|
|
3181
|
+
updated: "20",
|
|
3182
|
+
title: "Decision"
|
|
3183
|
+
}),
|
|
3184
|
+
issue({
|
|
3185
|
+
n: 126,
|
|
3186
|
+
state: S.todo,
|
|
3187
|
+
priority: 1,
|
|
3188
|
+
type: T.epic,
|
|
3189
|
+
assignee: ME,
|
|
3190
|
+
updated: "20",
|
|
3191
|
+
title: "Epic"
|
|
3192
|
+
}),
|
|
3193
|
+
issue({
|
|
3194
|
+
n: 127,
|
|
3195
|
+
state: S.todo,
|
|
3196
|
+
priority: 1,
|
|
3197
|
+
type: T.task,
|
|
3198
|
+
assignee: OTHER,
|
|
3199
|
+
updated: "20",
|
|
3200
|
+
title: "Other task"
|
|
3201
|
+
}),
|
|
3202
|
+
issue({
|
|
3203
|
+
n: 128,
|
|
3204
|
+
state: S.canceled,
|
|
3205
|
+
priority: 1,
|
|
3206
|
+
type: T.bug,
|
|
3207
|
+
assignee: ME,
|
|
3208
|
+
updated: "01",
|
|
3209
|
+
title: "Canceled"
|
|
3210
|
+
}),
|
|
3211
|
+
issue({
|
|
3212
|
+
n: 129,
|
|
3213
|
+
state: S.todo,
|
|
3214
|
+
priority: 3,
|
|
3215
|
+
type: T.task,
|
|
3216
|
+
assignee: ME,
|
|
3217
|
+
updated: "13",
|
|
3218
|
+
title: "Mirrored pair"
|
|
3219
|
+
}),
|
|
3220
|
+
issue({
|
|
3221
|
+
n: 130,
|
|
3222
|
+
state: S.todo,
|
|
3223
|
+
priority: 3,
|
|
3224
|
+
type: T.test,
|
|
3225
|
+
assignee: ME,
|
|
3226
|
+
updated: "17",
|
|
3227
|
+
title: "Depends on done"
|
|
3228
|
+
}),
|
|
3229
|
+
issue({
|
|
3230
|
+
n: 131,
|
|
3231
|
+
state: S.todo,
|
|
3232
|
+
priority: 2,
|
|
3233
|
+
type: T.task,
|
|
3234
|
+
assignee: ME,
|
|
3235
|
+
updated: "21",
|
|
3236
|
+
due: day("27"),
|
|
3237
|
+
title: "Due soon"
|
|
3238
|
+
}),
|
|
3239
|
+
issue({
|
|
3240
|
+
n: 132,
|
|
3241
|
+
state: S.todo,
|
|
3242
|
+
priority: 2,
|
|
3243
|
+
type: T.task,
|
|
3244
|
+
assignee: ME,
|
|
3245
|
+
updated: "19",
|
|
3246
|
+
sla: "at_risk",
|
|
3247
|
+
title: "SLA at risk"
|
|
3248
|
+
}),
|
|
3249
|
+
issue({
|
|
3250
|
+
n: 300,
|
|
3251
|
+
state: S.todo,
|
|
3252
|
+
priority: 2,
|
|
3253
|
+
type: T.task,
|
|
3254
|
+
assignee: OTHER,
|
|
3255
|
+
updated: "20",
|
|
3256
|
+
title: "Open blocker"
|
|
3257
|
+
})
|
|
3258
|
+
],
|
|
3259
|
+
relations: [
|
|
3260
|
+
rel(100, "blocks", 101),
|
|
3261
|
+
rel(101, "blocked_by", 100),
|
|
3262
|
+
rel(100, "blocks", 102),
|
|
3263
|
+
rel(102, "blocked_by", 300),
|
|
3264
|
+
rel(116, "blocked_by", "x-999"),
|
|
3265
|
+
rel(117, "blocked_by", "out-1"),
|
|
3266
|
+
rel(118, "blocked_by", 119),
|
|
3267
|
+
rel(129, "blocked_by", 300),
|
|
3268
|
+
rel(300, "blocks", 129),
|
|
3269
|
+
rel(130, "depends_on", 119),
|
|
3270
|
+
rel(119, "is_dependency_of", 130),
|
|
3271
|
+
rel(104, "relates_to", 105)
|
|
3272
|
+
],
|
|
3273
|
+
relationEndStates: {
|
|
3274
|
+
"out-1": "open",
|
|
3275
|
+
"out-2": "closed"
|
|
3276
|
+
}
|
|
3277
|
+
},
|
|
3278
|
+
expected: {
|
|
3279
|
+
dev: [
|
|
3280
|
+
"ENG-104",
|
|
3281
|
+
"ENG-105",
|
|
3282
|
+
"ENG-131",
|
|
3283
|
+
"ENG-132",
|
|
3284
|
+
"ENG-118",
|
|
3285
|
+
"ENG-114",
|
|
3286
|
+
"ENG-130",
|
|
3287
|
+
"ENG-106",
|
|
3288
|
+
"ENG-101",
|
|
3289
|
+
"ENG-103",
|
|
3290
|
+
"ENG-107",
|
|
3291
|
+
"ENG-110",
|
|
3292
|
+
"ENG-111",
|
|
3293
|
+
"ENG-112",
|
|
3294
|
+
"ENG-108",
|
|
3295
|
+
"ENG-109",
|
|
3296
|
+
"ENG-122",
|
|
3297
|
+
"ENG-115",
|
|
3298
|
+
"ENG-102",
|
|
3299
|
+
"ENG-113",
|
|
3300
|
+
"ENG-116",
|
|
3301
|
+
"ENG-117",
|
|
3302
|
+
"ENG-129"
|
|
3303
|
+
],
|
|
3304
|
+
qa: [
|
|
3305
|
+
"ENG-120",
|
|
3306
|
+
"ENG-121",
|
|
3307
|
+
"ENG-104",
|
|
3308
|
+
"ENG-105",
|
|
3309
|
+
"ENG-131",
|
|
3310
|
+
"ENG-132",
|
|
3311
|
+
"ENG-130",
|
|
3312
|
+
"ENG-118",
|
|
3313
|
+
"ENG-114",
|
|
3314
|
+
"ENG-106",
|
|
3315
|
+
"ENG-101",
|
|
3316
|
+
"ENG-103",
|
|
3317
|
+
"ENG-107",
|
|
3318
|
+
"ENG-110",
|
|
3319
|
+
"ENG-111",
|
|
3320
|
+
"ENG-112",
|
|
3321
|
+
"ENG-108",
|
|
3322
|
+
"ENG-109",
|
|
3323
|
+
"ENG-122",
|
|
3324
|
+
"ENG-115",
|
|
3325
|
+
"ENG-102",
|
|
3326
|
+
"ENG-113",
|
|
3327
|
+
"ENG-116",
|
|
3328
|
+
"ENG-117",
|
|
3329
|
+
"ENG-129"
|
|
3330
|
+
],
|
|
3331
|
+
pm: [
|
|
3332
|
+
"ENG-122",
|
|
3333
|
+
"ENG-123",
|
|
3334
|
+
"ENG-125",
|
|
3335
|
+
"ENG-124",
|
|
3336
|
+
"ENG-104",
|
|
3337
|
+
"ENG-105",
|
|
3338
|
+
"ENG-131",
|
|
3339
|
+
"ENG-132",
|
|
3340
|
+
"ENG-118",
|
|
3341
|
+
"ENG-114",
|
|
3342
|
+
"ENG-130",
|
|
3343
|
+
"ENG-106",
|
|
3344
|
+
"ENG-101",
|
|
3345
|
+
"ENG-103",
|
|
3346
|
+
"ENG-107",
|
|
3347
|
+
"ENG-110",
|
|
3348
|
+
"ENG-111",
|
|
3349
|
+
"ENG-112",
|
|
3350
|
+
"ENG-108",
|
|
3351
|
+
"ENG-109",
|
|
3352
|
+
"ENG-115",
|
|
3353
|
+
"ENG-102",
|
|
3354
|
+
"ENG-113",
|
|
3355
|
+
"ENG-116",
|
|
3356
|
+
"ENG-117",
|
|
3357
|
+
"ENG-129"
|
|
3358
|
+
]
|
|
3359
|
+
}
|
|
3360
|
+
};
|
|
3361
|
+
|
|
2632
3362
|
//#endregion
|
|
2633
3363
|
//#region ../shared/dist/first-task/first-task-prompt.js
|
|
2634
3364
|
/**
|
|
@@ -2758,7 +3488,7 @@ async function executeBindingsImport(flags, file, deps) {
|
|
|
2758
3488
|
const out = [];
|
|
2759
3489
|
if (flags["repo-root"]) {
|
|
2760
3490
|
const root = flags["repo-root"];
|
|
2761
|
-
const missing = missingFiles(payload, (rel) => deps.exists(root, rel));
|
|
3491
|
+
const missing = missingFiles(payload, (rel$1) => deps.exists(root, rel$1));
|
|
2762
3492
|
for (const f of namedFiles(payload)) out.push(`${missing.includes(f) ? "MISSING" : "present"} ${f}`);
|
|
2763
3493
|
if (missing.length > 0) return {
|
|
2764
3494
|
exitCode: 1,
|
|
@@ -2820,7 +3550,7 @@ async function liveDeps(workspaceFlag) {
|
|
|
2820
3550
|
})),
|
|
2821
3551
|
readFile: (file) => fs.readFileSync(file, "utf8"),
|
|
2822
3552
|
writeFile: (file, content) => fs.writeFileSync(file, content),
|
|
2823
|
-
exists: (root, rel) => fs.existsSync(path$1.join(root, rel))
|
|
3553
|
+
exists: (root, rel$1) => fs.existsSync(path$1.join(root, rel$1))
|
|
2824
3554
|
};
|
|
2825
3555
|
}
|
|
2826
3556
|
function emit(ctx, outcome) {
|
package/dist/cli.js
CHANGED
|
@@ -226,7 +226,7 @@ Examples:
|
|
|
226
226
|
aliases: { y: "yes" }
|
|
227
227
|
},
|
|
228
228
|
loader: async () => {
|
|
229
|
-
const { mcpAddHandler } = await import("./addHandler-
|
|
229
|
+
const { mcpAddHandler } = await import("./addHandler-DG2flbF8.js");
|
|
230
230
|
return mcpAddHandler;
|
|
231
231
|
}
|
|
232
232
|
});
|
|
@@ -688,7 +688,7 @@ Examples:
|
|
|
688
688
|
}
|
|
689
689
|
},
|
|
690
690
|
loader: async () => {
|
|
691
|
-
const { gatesBindingsExportHandler } = await import("./bindingsHandler-
|
|
691
|
+
const { gatesBindingsExportHandler } = await import("./bindingsHandler-DQHF9AqQ.js");
|
|
692
692
|
return gatesBindingsExportHandler;
|
|
693
693
|
}
|
|
694
694
|
});
|
|
@@ -761,7 +761,7 @@ Examples:
|
|
|
761
761
|
aliases: { w: "workspace-id" }
|
|
762
762
|
},
|
|
763
763
|
loader: async () => {
|
|
764
|
-
const { gatesBindingsImportHandler } = await import("./bindingsHandler-
|
|
764
|
+
const { gatesBindingsImportHandler } = await import("./bindingsHandler-DQHF9AqQ.js");
|
|
765
765
|
return gatesBindingsImportHandler;
|
|
766
766
|
}
|
|
767
767
|
});
|
|
@@ -1248,7 +1248,7 @@ Examples:
|
|
|
1248
1248
|
|
|
1249
1249
|
//#endregion
|
|
1250
1250
|
//#region package.json
|
|
1251
|
-
var version = "0.12.
|
|
1251
|
+
var version = "0.12.15";
|
|
1252
1252
|
|
|
1253
1253
|
//#endregion
|
|
1254
1254
|
//#region src/app.ts
|