agentic-devtools 0.2.415__py3-none-any.whl → 0.2.416__py3-none-any.whl
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.
- agentic_devtools/_version.py +2 -2
- agentic_devtools/cli/ci/pipeline/actions/dispatch_repair.py +1 -1
- agentic_devtools/cli/ci/pipeline/actions/resolve_threads.py +10 -5
- agentic_devtools/cli/ci/pipeline/gate_verdict.py +5 -5
- agentic_devtools/cli/ci/pipeline/snapshot.py +104 -38
- {agentic_devtools-0.2.415.dist-info → agentic_devtools-0.2.416.dist-info}/METADATA +1 -1
- {agentic_devtools-0.2.415.dist-info → agentic_devtools-0.2.416.dist-info}/RECORD +10 -10
- {agentic_devtools-0.2.415.dist-info → agentic_devtools-0.2.416.dist-info}/WHEEL +0 -0
- {agentic_devtools-0.2.415.dist-info → agentic_devtools-0.2.416.dist-info}/entry_points.txt +0 -0
- {agentic_devtools-0.2.415.dist-info → agentic_devtools-0.2.416.dist-info}/licenses/LICENSE +0 -0
agentic_devtools/_version.py
CHANGED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
21
|
+
__version__ = version = '0.2.416'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 416)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -106,7 +106,7 @@ def _list_prior_actionable_copilot_reviews(snapshot: PRStateSnapshot) -> list[Re
|
|
|
106
106
|
HEAD move alone (e.g. ``squash``/``takeover``) cannot change the selection.
|
|
107
107
|
"""
|
|
108
108
|
verdict = snapshot.copilot_gate_verdict
|
|
109
|
-
verdict_review_id = verdict.review_id if verdict is not None else
|
|
109
|
+
verdict_review_id = verdict.review_id if verdict is not None and verdict.review_id > 0 else None
|
|
110
110
|
return select_prior_actionable_reviews(snapshot.reviews, verdict_review_id)
|
|
111
111
|
|
|
112
112
|
|
|
@@ -111,7 +111,7 @@ class ResolveThreadsAction:
|
|
|
111
111
|
from agentic_devtools.cli.ci.pipeline.gate_verdict import select_prior_actionable_reviews
|
|
112
112
|
|
|
113
113
|
verdict = snapshot.copilot_gate_verdict
|
|
114
|
-
verdict_review_id = verdict.review_id if verdict is not None else
|
|
114
|
+
verdict_review_id = verdict.review_id if verdict is not None and verdict.review_id > 0 else None
|
|
115
115
|
prior_reviews = select_prior_actionable_reviews(snapshot.reviews, verdict_review_id)
|
|
116
116
|
|
|
117
117
|
if not prior_reviews:
|
|
@@ -175,8 +175,12 @@ class ResolveThreadsAction:
|
|
|
175
175
|
# same source the snapshot uses. The provider's thread-signals cache is
|
|
176
176
|
# invalidated by the resolve/unresolve mutations, so this observes the
|
|
177
177
|
# post-resolution state.
|
|
178
|
-
requeried, degraded = count_unresolved_prior_threads(
|
|
179
|
-
provider,
|
|
178
|
+
requeried, degraded, unknown_provenance = count_unresolved_prior_threads(
|
|
179
|
+
provider,
|
|
180
|
+
snapshot.pr_number,
|
|
181
|
+
snapshot.reviews,
|
|
182
|
+
verdict_review_id,
|
|
183
|
+
verdict=verdict,
|
|
180
184
|
)
|
|
181
185
|
if degraded:
|
|
182
186
|
# Thread state is unavailable — fail closed with the conservative
|
|
@@ -186,12 +190,13 @@ class ResolveThreadsAction:
|
|
|
186
190
|
else:
|
|
187
191
|
unresolved_total = requeried
|
|
188
192
|
derived.set("unresolved_threads", unresolved_total)
|
|
189
|
-
# Propagate the re-query's degraded status so downstream
|
|
190
|
-
# (approve, merge) know whether the thread count is authoritative.
|
|
193
|
+
# Propagate the re-query's degraded and unknown_provenance status so downstream
|
|
194
|
+
# actions (approve, merge) know whether the thread count is authoritative.
|
|
191
195
|
# A failed re-query after a healthy snapshot must mark state as degraded
|
|
192
196
|
# (not leave the snapshot's False in place); a successful re-query
|
|
193
197
|
# replaces whatever the snapshot held.
|
|
194
198
|
derived.set("unresolved_threads_degraded", degraded)
|
|
199
|
+
derived.set("unresolved_threads_unknown_provenance", unknown_provenance)
|
|
195
200
|
|
|
196
201
|
details = f"Resolved {resolved} thread(s), {unresolved_total} left open"
|
|
197
202
|
if suppressed:
|
|
@@ -503,7 +503,7 @@ def copilot_review_gate_passed(
|
|
|
503
503
|
)
|
|
504
504
|
|
|
505
505
|
|
|
506
|
-
def select_prior_actionable_reviews(reviews: list[ReviewInfo], verdict_review_id: int) -> list[ReviewInfo]:
|
|
506
|
+
def select_prior_actionable_reviews(reviews: list[ReviewInfo], verdict_review_id: int | None) -> list[ReviewInfo]:
|
|
507
507
|
"""Return actionable Copilot/synthetic reviews not already owned by the gate verdict.
|
|
508
508
|
|
|
509
509
|
This is the **single** definition of the "which reviews count as prior" predicate.
|
|
@@ -520,11 +520,11 @@ def select_prior_actionable_reviews(reviews: list[ReviewInfo], verdict_review_id
|
|
|
520
520
|
thread (e.g. ``squash``/``takeover`` minting a new commit SHA) does not change
|
|
521
521
|
the selection, unlike a HEAD-commit-SHA comparison.
|
|
522
522
|
|
|
523
|
-
Fails closed: when
|
|
524
|
-
|
|
525
|
-
|
|
523
|
+
Fails closed: when provenance is unknown (``verdict_review_id`` is ``None`` or
|
|
524
|
+
``<= 0``) every actionable review is treated as prior — i.e. this degenerates
|
|
525
|
+
to counting all of them, never fewer. Input order is preserved.
|
|
526
526
|
"""
|
|
527
|
-
if verdict_review_id <= 0:
|
|
527
|
+
if verdict_review_id is None or verdict_review_id <= 0:
|
|
528
528
|
return [r for r in reviews if is_copilot_or_synthetic_review(r) and r.state in _ACTIONABLE_PRIOR_REVIEW_STATES]
|
|
529
529
|
return [
|
|
530
530
|
r
|
|
@@ -61,6 +61,13 @@ class PRStateSnapshot:
|
|
|
61
61
|
mapping omitted selected comments, or a review's comments could not be
|
|
62
62
|
listed), so ``unresolved_threads`` is unknown. The gate fails closed on this signal and
|
|
63
63
|
the run summary reports "degraded / unknown" instead of a fabricated integer.
|
|
64
|
+
unresolved_threads_unknown_provenance: Whether the gate-verdict review ID could not be
|
|
65
|
+
resolved when ``unresolved_threads`` was computed, so the count covers *all*
|
|
66
|
+
actionable reviews (the conservative count-all floor) rather than being scoped
|
|
67
|
+
to reviews whose ID differs from the verdict's owner. The count is still
|
|
68
|
+
authoritative — it is the maximum possible value — but consumers can use this
|
|
69
|
+
flag to emit extra diagnostics. No additional gate blocking is required: the
|
|
70
|
+
count-all strategy is already the most conservative possible reading.
|
|
64
71
|
labels: List of labels on the PR.
|
|
65
72
|
is_draft: Whether the PR is a draft.
|
|
66
73
|
mergeable: Whether the PR is mergeable (None if unknown).
|
|
@@ -134,6 +141,7 @@ class PRStateSnapshot:
|
|
|
134
141
|
copilot_review_pending: bool = False
|
|
135
142
|
unresolved_threads: int = 0
|
|
136
143
|
unresolved_threads_degraded: bool = False
|
|
144
|
+
unresolved_threads_unknown_provenance: bool = False
|
|
137
145
|
labels: list[str] = field(default_factory=list)
|
|
138
146
|
is_draft: bool = False
|
|
139
147
|
mergeable: bool | None = None
|
|
@@ -333,11 +341,22 @@ def build_pr_state_snapshot(
|
|
|
333
341
|
# previously) because provenance is now scoped to the verdict's effective
|
|
334
342
|
# review_id rather than to HEAD's commit SHA — a HEAD move alone (e.g.
|
|
335
343
|
# squash/takeover minting a new commit) must not change which reviews count
|
|
336
|
-
# as "prior". When the verdict evaluation above failed closed,
|
|
337
|
-
#
|
|
338
|
-
#
|
|
339
|
-
|
|
340
|
-
|
|
344
|
+
# as "prior". When the verdict evaluation above failed closed, ``review_id``
|
|
345
|
+
# remains 0 and the helper's ``None`` provenance signal degrades explicitly to
|
|
346
|
+
# count-all instead of pretending the owner is review 0.
|
|
347
|
+
effective_verdict_review_id = (
|
|
348
|
+
copilot_gate_verdict.review_id
|
|
349
|
+
if copilot_gate_verdict is not None and copilot_gate_verdict.review_id > 0
|
|
350
|
+
else None
|
|
351
|
+
)
|
|
352
|
+
unresolved_threads, unresolved_threads_degraded, unresolved_threads_unknown_provenance = (
|
|
353
|
+
count_unresolved_prior_threads(
|
|
354
|
+
provider,
|
|
355
|
+
pr_number,
|
|
356
|
+
reviews,
|
|
357
|
+
effective_verdict_review_id,
|
|
358
|
+
verdict=copilot_gate_verdict,
|
|
359
|
+
)
|
|
341
360
|
)
|
|
342
361
|
|
|
343
362
|
# Whether the Copilot review actually evaluated by the gate still matches HEAD.
|
|
@@ -404,6 +423,7 @@ def build_pr_state_snapshot(
|
|
|
404
423
|
copilot_review_pending=copilot_review_pending,
|
|
405
424
|
unresolved_threads=unresolved_threads,
|
|
406
425
|
unresolved_threads_degraded=unresolved_threads_degraded,
|
|
426
|
+
unresolved_threads_unknown_provenance=unresolved_threads_unknown_provenance,
|
|
407
427
|
labels=list(pr_meta.labels),
|
|
408
428
|
is_draft=pr_meta.is_draft,
|
|
409
429
|
mergeable=pr_meta.mergeable,
|
|
@@ -472,38 +492,84 @@ def _is_copilot_review_pending(requested_reviewers: list[str]) -> bool:
|
|
|
472
492
|
return any(is_copilot_login(reviewer) for reviewer in requested_reviewers)
|
|
473
493
|
|
|
474
494
|
|
|
495
|
+
def _effective_thread_owner_verdict_id(
|
|
496
|
+
verdict_review_id: int | None,
|
|
497
|
+
verdict: CopilotGateVerdict | None,
|
|
498
|
+
) -> int | None:
|
|
499
|
+
"""Resolve the effective thread-owner review ID for merge-gate provenance.
|
|
500
|
+
|
|
501
|
+
``None`` represents unknown provenance, which is the fail-closed signal for
|
|
502
|
+
the count-all path. When a verdict object is present it is authoritative:
|
|
503
|
+
a positive ``verdict.review_id`` is used, otherwise provenance remains
|
|
504
|
+
unknown. The legacy integer is used only when no verdict object is supplied.
|
|
505
|
+
"""
|
|
506
|
+
if verdict is not None:
|
|
507
|
+
if verdict.review_id > 0:
|
|
508
|
+
return verdict.review_id
|
|
509
|
+
return None
|
|
510
|
+
if verdict_review_id is not None and verdict_review_id > 0:
|
|
511
|
+
return verdict_review_id
|
|
512
|
+
return None
|
|
513
|
+
|
|
514
|
+
|
|
475
515
|
def count_unresolved_prior_threads(
|
|
476
516
|
provider: CIPlatformProvider,
|
|
477
517
|
pr_number: int,
|
|
478
518
|
reviews: list[ReviewInfo],
|
|
479
|
-
verdict_review_id: int,
|
|
480
|
-
|
|
519
|
+
verdict_review_id: int | None,
|
|
520
|
+
*,
|
|
521
|
+
verdict: CopilotGateVerdict | None = None,
|
|
522
|
+
) -> tuple[int, bool, bool]:
|
|
481
523
|
"""Count unresolved Copilot or trusted synthetic review threads not owned by the gate verdict.
|
|
482
524
|
|
|
483
|
-
Returns a ``(count, degraded)``
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
525
|
+
Returns a ``(count, degraded, unknown_provenance)`` triple.
|
|
526
|
+
|
|
527
|
+
``count`` is the number of distinct review threads from genuine Copilot or
|
|
528
|
+
trusted synthetic reviews — other than the one the gate verdict already accounts for
|
|
529
|
+
(``verdict_review_id`` or ``verdict.review_id``) — whose provider-reported state is
|
|
530
|
+
unresolved.
|
|
531
|
+
|
|
532
|
+
``unknown_provenance`` is ``True`` when the effective verdict review ID could not be
|
|
533
|
+
resolved (no verdict evaluated, or the verdict's ``review_id`` is ``<= 0``). In that
|
|
534
|
+
case the count is computed over *all* actionable reviews (the conservative count-all
|
|
535
|
+
floor). The count is still authoritative — it is the maximum possible value — but
|
|
536
|
+
downstream consumers can use this flag to log extra diagnostics or distinguish a
|
|
537
|
+
"perfect-provenance" zero from a "conservative-floor" zero. Consumer action logic
|
|
538
|
+
does **not** need to change: a count-all result is already the most conservative
|
|
539
|
+
possible reading, so treating ``unknown_provenance=True`` as a hard block is
|
|
540
|
+
unnecessary and would double-penalise an already-conservative measurement.
|
|
487
541
|
|
|
488
|
-
Provenance is scoped to
|
|
542
|
+
Provenance is scoped to the effective verdict review_id, not to HEAD's commit SHA: this
|
|
489
543
|
keeps the count HEAD-independent, so a HEAD move that touches no review or
|
|
490
544
|
thread (e.g. ``squash``/``takeover`` minting a new commit) cannot change it.
|
|
491
|
-
When
|
|
492
|
-
closed), this explicitly degenerates to counting every
|
|
493
|
-
the same fail-closed direction the verdict itself takes.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
545
|
+
When the effective review_id is unknown (``None`` or ``<= 0``, meaning no verdict
|
|
546
|
+
evaluated or evaluation failed closed), this explicitly degenerates to counting every
|
|
547
|
+
actionable review — the same fail-closed direction the verdict itself takes. The
|
|
548
|
+
resulting count is still authoritative: ``degraded`` remains ``False`` because the
|
|
549
|
+
count-all strategy is the conservative floor, not an estimate.
|
|
550
|
+
|
|
551
|
+
``degraded`` is ``True`` **only** when the provider cannot report review-thread state
|
|
552
|
+
(the capability is missing, the lookup failed, the returned mapping omits selected
|
|
553
|
+
comments, or a review's comments could not be listed). In that case the count falls
|
|
554
|
+
back to the minimum blocking floor of ``1`` so a capability-less provider can never
|
|
555
|
+
present as "0 unresolved threads" and silently open the merge gate. Every such
|
|
556
|
+
degradation is logged, so no thread is ever dropped from the count without a
|
|
557
|
+
diagnostic.
|
|
502
558
|
"""
|
|
503
|
-
|
|
559
|
+
effective_review_id = _effective_thread_owner_verdict_id(verdict_review_id, verdict)
|
|
560
|
+
unknown_provenance = effective_review_id is None
|
|
561
|
+
if unknown_provenance:
|
|
562
|
+
logger.warning(
|
|
563
|
+
"PR #%d: no concrete thread-owner provenance for prior actionable reviews; "
|
|
564
|
+
"falling back to count-all (conservative floor — not a query failure)",
|
|
565
|
+
pr_number,
|
|
566
|
+
)
|
|
567
|
+
prior_copilot_reviews = select_prior_actionable_reviews(reviews, None)
|
|
568
|
+
else:
|
|
569
|
+
prior_copilot_reviews = select_prior_actionable_reviews(reviews, effective_review_id)
|
|
504
570
|
if not prior_copilot_reviews:
|
|
505
571
|
# Nothing to report on — no capability was needed, so this is not degraded.
|
|
506
|
-
return 0, False
|
|
572
|
+
return 0, False, unknown_provenance
|
|
507
573
|
|
|
508
574
|
thread_lookup = getattr(provider, "list_review_threads_by_thread_id", None)
|
|
509
575
|
if not callable(thread_lookup):
|
|
@@ -512,7 +578,7 @@ def count_unresolved_prior_threads(
|
|
|
512
578
|
" — failing closed with an unknown-thread count",
|
|
513
579
|
pr_number,
|
|
514
580
|
)
|
|
515
|
-
return 1, True
|
|
581
|
+
return 1, True, unknown_provenance
|
|
516
582
|
|
|
517
583
|
try:
|
|
518
584
|
thread_states = thread_lookup(pr_number)
|
|
@@ -522,14 +588,14 @@ def count_unresolved_prior_threads(
|
|
|
522
588
|
" — failing closed with an unknown-thread count",
|
|
523
589
|
pr_number,
|
|
524
590
|
)
|
|
525
|
-
return 1, True
|
|
591
|
+
return 1, True, unknown_provenance
|
|
526
592
|
except Exception as exc:
|
|
527
593
|
logger.warning(
|
|
528
594
|
"PR #%d: review-thread state unavailable (%s) — failing closed with an unknown-thread count",
|
|
529
595
|
pr_number,
|
|
530
596
|
str(exc)[:200],
|
|
531
597
|
)
|
|
532
|
-
return 1, True
|
|
598
|
+
return 1, True, unknown_provenance
|
|
533
599
|
|
|
534
600
|
if not isinstance(thread_states, dict):
|
|
535
601
|
logger.warning(
|
|
@@ -539,7 +605,7 @@ def count_unresolved_prior_threads(
|
|
|
539
605
|
pr_number,
|
|
540
606
|
type(thread_states).__name__,
|
|
541
607
|
)
|
|
542
|
-
return 1, True
|
|
608
|
+
return 1, True, unknown_provenance
|
|
543
609
|
|
|
544
610
|
comment_to_thread: dict[int, str] = {}
|
|
545
611
|
for thread_key, state in thread_states.items():
|
|
@@ -552,7 +618,7 @@ def count_unresolved_prior_threads(
|
|
|
552
618
|
pr_number,
|
|
553
619
|
thread_key,
|
|
554
620
|
)
|
|
555
|
-
return 1, True
|
|
621
|
+
return 1, True, unknown_provenance
|
|
556
622
|
if not isinstance(state, tuple) or len(state) != 2 or type(state[0]) is not bool:
|
|
557
623
|
logger.warning(
|
|
558
624
|
"PR #%d: review-thread state unavailable "
|
|
@@ -563,7 +629,7 @@ def count_unresolved_prior_threads(
|
|
|
563
629
|
thread_key,
|
|
564
630
|
state,
|
|
565
631
|
)
|
|
566
|
-
return 1, True
|
|
632
|
+
return 1, True, unknown_provenance
|
|
567
633
|
comment_ids = state[1]
|
|
568
634
|
if not isinstance(comment_ids, tuple):
|
|
569
635
|
logger.warning(
|
|
@@ -572,7 +638,7 @@ def count_unresolved_prior_threads(
|
|
|
572
638
|
" — failing closed with an unknown-thread count",
|
|
573
639
|
pr_number,
|
|
574
640
|
)
|
|
575
|
-
return 1, True
|
|
641
|
+
return 1, True, unknown_provenance
|
|
576
642
|
for comment_id in comment_ids:
|
|
577
643
|
if type(comment_id) is not int:
|
|
578
644
|
logger.warning(
|
|
@@ -584,7 +650,7 @@ def count_unresolved_prior_threads(
|
|
|
584
650
|
thread_key,
|
|
585
651
|
comment_id,
|
|
586
652
|
)
|
|
587
|
-
return 1, True
|
|
653
|
+
return 1, True, unknown_provenance
|
|
588
654
|
mapped_thread = comment_to_thread.get(comment_id)
|
|
589
655
|
if mapped_thread is not None and mapped_thread != thread_key:
|
|
590
656
|
logger.warning(
|
|
@@ -597,7 +663,7 @@ def count_unresolved_prior_threads(
|
|
|
597
663
|
mapped_thread,
|
|
598
664
|
thread_key,
|
|
599
665
|
)
|
|
600
|
-
return 1, True
|
|
666
|
+
return 1, True, unknown_provenance
|
|
601
667
|
comment_to_thread[comment_id] = thread_key
|
|
602
668
|
|
|
603
669
|
total_unresolved = 0
|
|
@@ -636,7 +702,7 @@ def count_unresolved_prior_threads(
|
|
|
636
702
|
comments_unavailable = True
|
|
637
703
|
|
|
638
704
|
if missing_thread_state:
|
|
639
|
-
return max(total_unresolved, 1), True
|
|
705
|
+
return max(total_unresolved, 1), True, unknown_provenance
|
|
640
706
|
if comments_unavailable:
|
|
641
707
|
if total_unresolved == 0:
|
|
642
708
|
logger.warning(
|
|
@@ -644,9 +710,9 @@ def count_unresolved_prior_threads(
|
|
|
644
710
|
" — applying the blocking floor of 1 unresolved thread",
|
|
645
711
|
pr_number,
|
|
646
712
|
)
|
|
647
|
-
return 1, True
|
|
648
|
-
return total_unresolved, True
|
|
649
|
-
return total_unresolved, False
|
|
713
|
+
return 1, True, unknown_provenance
|
|
714
|
+
return total_unresolved, True, unknown_provenance
|
|
715
|
+
return total_unresolved, False, unknown_provenance
|
|
650
716
|
|
|
651
717
|
|
|
652
718
|
def _count_commits(provider: CIPlatformProvider, *, base_branch: str, head_sha: str) -> int:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
agentic_devtools/__init__.py,sha256=J_Zw_vWKghk-cLmqI83hXQmSiS8zMhGIHM5WPLDkZuo,242
|
|
2
|
-
agentic_devtools/_version.py,sha256=
|
|
2
|
+
agentic_devtools/_version.py,sha256=8vuxsd01j_scUQpIgCieYJk6yeMwK5bE_y9JOfqA3uk,524
|
|
3
3
|
agentic_devtools/agdt_gitignore.py,sha256=aBPBQe7M0GLH8NIp1NsyN9ZiO80fNGOi46IcT5A4SK4,1569
|
|
4
4
|
agentic_devtools/background_tasks.py,sha256=IVC1XJKQzPBP8wCRNCZX_iZCg9FJY_GBUzddSJj7xqw,17473
|
|
5
5
|
agentic_devtools/config.py,sha256=DEVxTVZhsQbVQwO9qdB_1h19aBpjMzF6xJY_ePYLGLs,15629
|
|
@@ -169,11 +169,11 @@ agentic_devtools/cli/ci/pipeline/command.py,sha256=RJ_QUhQjSyEobqDUQnPuVMl0-rBWK
|
|
|
169
169
|
agentic_devtools/cli/ci/pipeline/deferral.py,sha256=Dga-CQevmTe1PYeUpvptZxbvD3g8jl7Q5kqgZSAY2dg,18305
|
|
170
170
|
agentic_devtools/cli/ci/pipeline/exceptions.py,sha256=4UXy2weeQZex_lp4sILNxlYfGjetxbR-tjms2ReT4iw,451
|
|
171
171
|
agentic_devtools/cli/ci/pipeline/exclusion.py,sha256=mrOG5G1-m3U-GM4YgtMTuzmoj02TXB6GbNxemRoLtV4,931
|
|
172
|
-
agentic_devtools/cli/ci/pipeline/gate_verdict.py,sha256=
|
|
172
|
+
agentic_devtools/cli/ci/pipeline/gate_verdict.py,sha256=stMgkDzVmn4Tr0yoyfPs7RXe7BpAWkecWFbY1baXEQg,44021
|
|
173
173
|
agentic_devtools/cli/ci/pipeline/models.py,sha256=GVhAXMbIEhkuECYUdk6WgZ7-lOOb5sCFn9MfG50iSqY,2456
|
|
174
174
|
agentic_devtools/cli/ci/pipeline/runner.py,sha256=YfK9QBFQg0ri0kCvYBek3LiQm7Mxv4pXPxiaC5PmIjk,13805
|
|
175
175
|
agentic_devtools/cli/ci/pipeline/session_detector.py,sha256=dWJyZIv7NcJNUl7TIsYqNfzNmZu3vAxHaQp1wMqe70o,8926
|
|
176
|
-
agentic_devtools/cli/ci/pipeline/snapshot.py,sha256=
|
|
176
|
+
agentic_devtools/cli/ci/pipeline/snapshot.py,sha256=Ek9sh9UTU5mg0Kps80jv9sPYHTmnS3AbSjx17T9HXYc,37442
|
|
177
177
|
agentic_devtools/cli/ci/pipeline/suggestions.py,sha256=nM4w1hfDFkT5_DAMMJMDZnFIvKhcvK1ainxcnAU_FkM,26777
|
|
178
178
|
agentic_devtools/cli/ci/pipeline/summary.py,sha256=ILCNHE845oiqGM6CA8NjaVKBVyxLNu5xTG8GXdhOy_U,13321
|
|
179
179
|
agentic_devtools/cli/ci/pipeline/actions/__init__.py,sha256=rY6e3yk5ybMINMSdtWvcwZI8I9GGxQAQ90J_dSjipr8,1577
|
|
@@ -181,13 +181,13 @@ agentic_devtools/cli/ci/pipeline/actions/apply_suggestions.py,sha256=WCtCoJE6795
|
|
|
181
181
|
agentic_devtools/cli/ci/pipeline/actions/approve.py,sha256=AHTm8Mf1kMaQcrS303ZalMaKzpEfYrtMdWDrisWT6kQ,9080
|
|
182
182
|
agentic_devtools/cli/ci/pipeline/actions/defer_suppressed.py,sha256=EZZMXyopk6oBQCjTRi769EsFGfTUeCqwfzBNNgeREHA,16178
|
|
183
183
|
agentic_devtools/cli/ci/pipeline/actions/dispatch_conflict_resolution.py,sha256=Dl6EoagioHq74bLURRB_5Mi36Od6JHkbRuG5_za_goc,13754
|
|
184
|
-
agentic_devtools/cli/ci/pipeline/actions/dispatch_repair.py,sha256=
|
|
184
|
+
agentic_devtools/cli/ci/pipeline/actions/dispatch_repair.py,sha256=6lSPjoO_5OHy34vrrXLA-3hshTj6GjZ5rtoZn0Xy2hQ,21550
|
|
185
185
|
agentic_devtools/cli/ci/pipeline/actions/guards.py,sha256=UIkTgv5_aKqSVNRFlvl_JiAdFswm1uV5VJJfgu5FmFc,4101
|
|
186
186
|
agentic_devtools/cli/ci/pipeline/actions/merge.py,sha256=MPQxTMaDWpeZBzge2tx8htCNCjYDpF_bV5A0AofllBc,16778
|
|
187
187
|
agentic_devtools/cli/ci/pipeline/actions/publish.py,sha256=A00Lk-vZKnhOCN2O5mkks0tayr7NA5eZfUA95CUP7gs,3990
|
|
188
188
|
agentic_devtools/cli/ci/pipeline/actions/rebase.py,sha256=FGykjl5xi9Bg8nq2AE6IB7skdmKJ7Z4iOT4bd2K3B2U,5256
|
|
189
189
|
agentic_devtools/cli/ci/pipeline/actions/request_review.py,sha256=-BInEFbX7rHY_wKna-ksa5cQV_Arxi7w1Jg1kNdBltE,9173
|
|
190
|
-
agentic_devtools/cli/ci/pipeline/actions/resolve_threads.py,sha256=
|
|
190
|
+
agentic_devtools/cli/ci/pipeline/actions/resolve_threads.py,sha256=mJ6tnuazxmTls8_rpA_omwSPFi7JSyEFOViXdchNiUI,9906
|
|
191
191
|
agentic_devtools/cli/ci/pipeline/actions/squash.py,sha256=woloutgBoaEkZMO6HcLoChCV3S-yeD7T22ygePciRx0,10894
|
|
192
192
|
agentic_devtools/cli/ci/pipeline/actions/takeover.py,sha256=ms0coVGuT7peZ3XKbYzqzwrAwqwyyvfPzCsPXLPXKws,6394
|
|
193
193
|
agentic_devtools/cli/ci/pipeline/discovery/__init__.py,sha256=QNdOYvl_wK6qcWOvNJR-wm8EtWD_DPn4barKF5RSmfU,752
|
|
@@ -949,8 +949,8 @@ agentic_devtools/_bundled_skills/prompts/speckit.plan.prompt.md,sha256=IJja5r2Sd
|
|
|
949
949
|
agentic_devtools/_bundled_skills/prompts/speckit.specify.prompt.md,sha256=eyzE3GRi2hyW30a6xPYOU7q6MJf0skrD-baEGURYqpg,31
|
|
950
950
|
agentic_devtools/_bundled_skills/prompts/speckit.tasks.prompt.md,sha256=iPxXwon5nV6dNcJV8-JoP3PssKUVXctNiG-C9SsRhB8,29
|
|
951
951
|
agentic_devtools/_bundled_skills/prompts/speckit.taskstoissues.prompt.md,sha256=L5Y21PMSoUcPAAdHy2Jnf-wGVdi04jV_pPvyOJZfpm0,37
|
|
952
|
-
agentic_devtools-0.2.
|
|
953
|
-
agentic_devtools-0.2.
|
|
954
|
-
agentic_devtools-0.2.
|
|
955
|
-
agentic_devtools-0.2.
|
|
956
|
-
agentic_devtools-0.2.
|
|
952
|
+
agentic_devtools-0.2.416.dist-info/METADATA,sha256=6RJsmJ3zrR_WjT810f797DvhhGhLGEZ_CC7DhIpgPdY,33466
|
|
953
|
+
agentic_devtools-0.2.416.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
954
|
+
agentic_devtools-0.2.416.dist-info/entry_points.txt,sha256=1xH6yqltFD5Gs3qbHN9zpKwwG3nXpWoC7x0w1Ip7LCw,11726
|
|
955
|
+
agentic_devtools-0.2.416.dist-info/licenses/LICENSE,sha256=yBEDdICksxhBYLWoERKp9MTqwGnUF6Ryj9BTLwXTc6k,1082
|
|
956
|
+
agentic_devtools-0.2.416.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|