Tom Boucher
388837219d
fix( #2648 ): phase.complete refuses when non-retired plans lack summaries (fail-closed coverage gate) ( #2953 )
...
* test(#2648 ): failing-first — phase complete must refuse when plans lack summaries
Adds findUnsummarizedPlans to core-utils (mirrors countMatchedSummaries but
returns the unmatched plan files) and a PHASE_PLAN_COVERAGE_INCOMPLETE error
reason, plus a 3-case regression block in phase.test.cjs. The gate itself is
NOT yet wired into cmdPhaseComplete (reverted for the RED run), so the
'blocks completion' and 'superseded does not block' cases must FAIL (the
pre-fix code completes silently).
* fix(#2648 ): phase.complete refuses when non-retired plans lack summaries
cmdPhaseComplete gated only on a single *-VERIFICATION.md status, so a phase
could close complete while an arbitrary number of its plans had no completion
record (confirmed incident: 6/30 plans unexecuted incl. the phase's entire
final UI scope, every signal green). Add a fail-closed plan-coverage gate that
refuses completion when any plan lacks a matching *-SUMMARY.md, naming the
missing plans, UNLESS the plan is retired via machine-readable status:
superseded frontmatter (#2349 ) — closing the Goodhart hole (delete a SUMMARY to
raise the %) without regressing the lock/recovery pattern.
Uses scanPhasePlans (superseded-AWARE) + new findUnsummarizedPlans helper so the
gate, the count, and the named list can never disagree. Evaluated before the
verification-gate transaction so a refusal fails fast without mutating
ROADMAP/STATE. milestone.complete's parallel gap is explicitly out of scope
(separate seam, separate PR).
* fix(#2648 ): test fixtures — give #1752 phase plans summaries + STATE.md in coverage fixture
The plan-coverage gate (#2648 ) correctly blocks phase completion when a plan
lacks a SUMMARY. Two test fixtures needed updating to reflect the new contract:
- #1752 (total_phases-decrement cascade): its 8 phase dirs each had a PLAN.md
with no SUMMARY. The test's concern is the total_phases cascade, not plan
coverage, so add a matching SUMMARY to each to keep the phase fully-covered
and isolate the #1752 behavior.
- the #2648 coverage-gate fixture: write STATE.md (createTempProject scaffolds
.planning/phases but not STATE.md) so the 'ROADMAP/STATE unchanged on refusal'
assertions have a file to read.
* fix(#2648 ): security — fail closed on unreadable plan dir + sanitize msg + surface superseded
Address the security-review blocker (B1) and hardening (M1/m2):
- B1 (blocker): the gate failed OPEN when scanPhasePlans could not read the
phase dir (it swallows readdirSync errors → empty plan set → gate sees zero
unsummarized plans → passes). A coverage gate that passes when it cannot read
the plans re-opens the #2648 hole under any I/O failure. Now readdirSync the
dir explicitly and fail closed (PHASE_PLAN_COVERAGE_INCOMPLETE) on a throw;
a readable empty dir still passes (legitimately complete empty phase).
- m2: sanitize plan filenames (strip C0 controls / DEL) before interpolating
into the error message — they come raw from readdirSync and could spoof the
terminal in plain-error mode.
- M1: surface the count of plans excluded as status: superseded so a reviewer
can audit which work was declared retired (the marker is a committable,
review-time-trusted bypass; keep it visible).
- Add a 4th regression case: unreadable plan dir (ENOTDIR via a file, not chmod
0o000 which root bypasses) must fail closed.
* test(#2648 ): drop unreachable B1 case — no root-safe unreadable-dir repro
The B1 fail-closed-on-unreadable-dir defense stays in src/phase.cts (cheap +
correct), but it cannot be unit-tested cross-platform: any condition that makes
the phase dir unreadable to the gate's readdirSync ALSO fails findPhaseInternal
upstream ('Phase N not found') before the gate runs, and chmod 0o000 is
forbidden (root bypasses it in root CI). Document the gap in the test file;
remove the case that asserted a reason the upstream error pre-empts.
* style(#2648 ): drop unnecessary type assertions flagged by lint:ci
scanPhasePlans returns typed string[] arrays, so the `as string[]` casts on
coverageScan.planFiles/summaryFiles were redundant (@typescript-eslint/
no-unnecessary-type-assertion). Compute supersededCount from typed lengths;
only the phaseInfo['plans'] cast remains (it is genuinely unknown).
* changeset(#2648 ): phase.complete refuses when plans lack summaries
* changeset(#2648 ): backfill PR number 2953
---------
Co-authored-by: sim <sim@users.noreply.github.com >
2026-07-31 18:11:40 -04:00
..
2026-06-25 18:24:39 -04:00
2026-07-31 14:45:51 -04:00
2026-07-29 22:18:48 -04:00
2026-07-31 13:15:29 -04:00
2026-06-25 18:24:39 -04:00
2026-07-09 23:43:18 -04:00
2026-06-15 23:21:20 -04:00
2026-06-02 18:35:29 -04:00
2026-06-17 08:52:23 -04:00
2026-07-06 08:31:51 -04:00
2026-07-17 06:50:06 -04:00
2026-06-13 21:07:55 -04:00
2026-06-13 21:07:55 -04:00
2026-06-13 21:07:55 -04:00
2026-07-30 19:14:13 -04:00
2026-06-14 20:52:36 -04:00
2026-06-14 10:45:42 -04:00
2026-06-14 17:16:19 -04:00
2026-07-24 12:49:53 -04:00
2026-07-13 09:02:44 -06:00
2026-07-29 15:55:57 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-21 22:55:22 -04:00
2026-06-13 23:35:08 -04:00
2026-07-28 18:02:01 -04:00
2026-07-31 14:45:51 -04:00
2026-06-15 15:46:41 -04:00
2026-06-11 20:50:08 -04:00
2026-07-03 10:06:11 -04:00
2026-07-28 15:41:43 -04:00
2026-04-25 10:50:54 -04:00
2026-07-01 20:09:01 -04:00
2026-06-20 16:49:18 -07:00
2026-06-12 19:51:54 -04:00
2026-06-11 23:59:56 -04:00
2026-06-06 11:24:48 -04:00
2026-06-02 18:35:29 -04:00
2026-07-30 12:48:06 -04:00
2026-07-30 12:48:06 -04:00
2026-07-11 03:07:01 -04:00
2026-07-19 14:59:25 -04:00
2026-07-23 07:38:00 -04:00
2026-07-03 08:59:23 -04:00
2026-07-03 09:17:32 -04:00
2026-06-27 08:43:47 -04:00
2026-06-27 08:43:47 -04:00
2026-06-25 18:24:39 -04:00
2026-07-03 08:59:23 -04:00
2026-06-02 18:35:29 -04:00
2026-04-04 14:29:03 -04:00
2026-07-11 04:47:56 -04:00
2026-06-25 18:24:39 -04:00
2026-07-30 19:14:13 -04:00
2026-06-10 16:10:07 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-11 08:31:35 -04:00
2026-06-15 18:11:20 -04:00
2026-07-24 22:49:29 -04:00
2026-07-19 20:24:21 -04:00
2026-05-30 17:44:36 -04:00
2026-07-17 06:50:06 -04:00
2026-06-18 23:37:43 -04:00
2026-06-20 01:59:03 -04:00
2026-06-09 22:35:42 -04:00
2026-06-19 19:55:10 -04:00
2026-06-23 21:49:43 -04:00
2026-06-20 03:24:47 -04:00
2026-06-26 12:44:09 -04:00
2026-07-03 19:37:14 -04:00
2026-06-16 02:38:47 -04:00
2026-07-22 00:58:58 -04:00
2026-06-20 10:50:12 -04:00
2026-07-07 00:19:08 -04:00
2026-06-20 01:59:03 -04:00
2026-06-14 12:51:17 -04:00
2026-07-03 09:17:32 -04:00
2026-06-10 15:55:31 -04:00
2026-06-08 14:04:26 -04:00
2026-07-17 06:48:04 -04:00
2026-06-14 15:02:54 -04:00
2026-07-21 19:32:51 -04:00
2026-05-01 18:12:20 -04:00
2026-05-30 17:25:02 -04:00
2026-05-28 09:23:59 -04:00
2026-07-17 06:49:58 -04:00
2026-07-28 18:26:55 -04:00
2026-07-05 14:04:29 -04:00
2026-07-21 08:13:13 -04:00
2026-06-11 00:58:21 -04:00
2026-07-03 08:59:23 -04:00
2026-06-25 18:24:39 -04:00
2026-06-01 22:43:49 -04:00
2026-07-28 15:41:43 -04:00
2026-07-28 18:02:17 -04:00
2026-07-08 15:26:19 -04:00
2026-06-12 16:03:51 -04:00
2026-07-26 01:06:35 -04:00
2026-07-26 20:49:38 -04:00
2026-07-27 16:24:21 -04:00
2026-06-25 21:16:47 -04:00
2026-06-02 18:35:29 -04:00
2026-06-10 10:40:12 -04:00
2026-07-09 19:38:27 -04:00
2026-07-09 19:38:27 -04:00
2026-07-09 19:38:27 -04:00
2026-06-23 12:51:46 -04:00
2026-07-09 19:38:27 -04:00
2026-05-29 11:39:52 -04:00
2026-07-03 08:59:23 -04:00
2026-07-24 12:10:32 -04:00
2026-07-20 08:22:23 -04:00
2026-06-13 23:35:08 -04:00
2026-06-10 14:07:23 -04:00
2026-06-06 11:24:48 -04:00
2026-07-03 08:59:23 -04:00
2026-07-30 22:27:32 -04:00
2026-07-29 19:49:53 -04:00
2026-07-31 01:57:50 -04:00
2026-06-25 21:16:47 -04:00
2026-07-11 09:39:34 -04:00
2026-07-25 01:50:20 -04:00
2026-07-19 12:53:22 -04:00
2026-07-03 08:59:23 -04:00
2026-07-03 08:59:23 -04:00
2026-07-03 08:59:23 -04:00
2026-07-31 13:17:01 -04:00
2026-07-03 10:22:11 -04:00
2026-04-10 10:56:09 -04:00
2026-07-27 02:45:35 -04:00
2026-06-24 13:19:10 -04:00
2026-07-07 15:11:12 -04:00
2026-07-29 14:19:57 -04:00
2026-07-27 00:09:13 -04:00
2026-07-30 08:52:56 -04:00
2026-07-30 08:52:56 -04:00
2026-07-03 08:59:23 -04:00
2026-07-05 17:15:48 -04:00
2026-06-02 18:35:29 -04:00
2026-07-31 15:44:19 -04:00
2026-07-31 13:17:01 -04:00
2026-07-31 13:17:01 -04:00
2026-07-31 15:44:19 -04:00
2026-06-14 08:25:41 -04:00
2026-06-02 18:35:29 -04:00
2026-07-24 12:49:53 -04:00
2026-07-27 19:55:37 -04:00
2026-07-29 17:06:04 -04:00
2026-07-29 17:06:04 -04:00
2026-07-04 13:32:51 -04:00
2026-07-11 13:10:31 -04:00
2026-07-31 10:56:11 -04:00
2026-06-22 23:43:22 -04:00
2026-06-22 23:43:22 -04:00
2026-06-13 23:35:08 -04:00
2026-06-17 08:51:48 -04:00
2026-07-09 00:21:28 -04:00
2026-07-09 13:17:04 -04:00
2026-06-07 19:22:48 -04:00
2026-07-09 13:17:04 -04:00
2026-07-30 12:48:06 -04:00
2026-07-19 15:43:48 -04:00
2026-07-27 20:10:11 -04:00
2026-07-18 14:42:29 -04:00
2026-07-18 00:39:28 -04:00
2026-07-21 18:38:51 -04:00
2026-07-18 13:42:58 -04:00
2026-07-18 15:46:42 -04:00
2026-07-18 07:55:28 -04:00
2026-07-18 19:01:04 -04:00
2026-07-30 16:55:10 -04:00
2026-07-11 03:07:01 -04:00
2026-07-11 04:47:56 -04:00
2026-07-11 09:39:34 -04:00
2026-07-11 13:10:31 -04:00
2026-07-11 16:04:24 -04:00
2026-07-11 17:14:48 -04:00
2026-07-19 22:44:08 -04:00
2026-07-13 07:03:47 -07:00
2026-07-29 17:06:04 -04:00
2026-06-02 18:35:29 -04:00
2026-06-20 13:36:57 -04:00
2026-07-03 09:17:32 -04:00
2026-06-20 13:36:57 -04:00
2026-07-03 10:22:11 -04:00
2026-07-03 10:06:11 -04:00
2026-07-20 14:22:27 -04:00
2026-07-03 10:22:11 -04:00
2026-06-25 18:24:39 -04:00
2026-06-12 19:51:54 -04:00
2026-06-12 11:05:31 -04:00
2026-06-14 21:44:21 -04:00
2026-06-02 18:35:29 -04:00
2026-07-30 15:27:52 -04:00
2026-07-07 22:21:45 -04:00
2026-07-31 13:15:29 -04:00
2026-07-28 15:41:43 -04:00
2026-07-05 20:56:12 -04:00
2026-07-30 19:55:03 -04:00
2026-07-26 16:28:56 -04:00
2026-07-26 16:28:56 -04:00
2026-06-24 17:16:13 -04:00
2026-06-24 17:16:13 -04:00
2026-06-13 21:07:55 -04:00
2026-07-25 05:30:20 -04:00
2026-07-03 09:17:32 -04:00
2026-07-03 09:17:32 -04:00
2026-06-15 20:53:38 -04:00
2026-07-27 18:32:00 -04:00
2026-07-15 19:18:28 -04:00
2026-07-03 09:51:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-28 12:00:43 -04:00
2026-06-28 12:25:02 -04:00
2026-06-14 12:23:07 -04:00
2026-07-03 19:37:38 -04:00
2026-06-02 18:35:29 -04:00
2026-07-08 12:57:49 +03:00
2026-07-20 14:59:30 -04:00
2026-06-13 21:07:55 -04:00
2026-06-20 01:59:03 -04:00
2026-06-12 23:43:07 -04:00
2026-06-02 18:35:29 -04:00
2026-07-06 13:01:47 -05:00
2026-07-16 15:25:19 -04:00
2026-07-12 15:34:59 -04:00
2026-07-12 15:55:39 -04:00
2026-07-30 12:48:06 -04:00
2026-07-12 19:47:42 -04:00
2026-07-15 12:55:38 -04:00
2026-07-15 17:10:06 -04:00
2026-07-27 16:24:21 -04:00
2026-07-15 21:40:59 -04:00
2026-07-16 00:56:07 -04:00
2026-07-16 13:33:36 -04:00
2026-07-17 14:01:38 -04:00
2026-07-30 15:27:52 -04:00
2026-07-30 12:48:06 -04:00
2026-07-26 19:57:58 -04:00
2026-07-26 19:50:56 -04:00
2026-07-26 20:49:38 -04:00
2026-07-26 21:47:54 -04:00
2026-07-26 22:52:57 -04:00
2026-07-30 12:48:06 -04:00
2026-07-27 02:45:35 -04:00
2026-07-27 09:02:20 -04:00
2026-07-29 22:18:48 -04:00
2026-07-30 12:48:06 -04:00
2026-05-26 11:23:42 -04:00
2026-06-02 18:35:29 -04:00
2026-07-29 17:06:04 -04:00
2026-07-27 16:50:12 -04:00
2026-07-27 16:50:12 -04:00
2026-07-30 13:53:39 -04:00
2026-07-02 11:43:47 -04:00
2026-07-03 08:59:23 -04:00
2026-07-05 18:01:28 -04:00
2026-06-02 18:35:29 -04:00
2026-07-11 23:24:42 -04:00
2026-07-31 13:17:01 -04:00
2026-07-31 08:11:57 -04:00
2026-07-11 23:24:42 -04:00
2026-07-03 10:22:11 -04:00
2026-07-22 00:27:35 -04:00
2026-07-28 15:41:43 -04:00
2026-07-28 15:41:43 -04:00
2026-07-21 23:42:02 -04:00
2026-07-03 08:59:23 -04:00
2026-07-05 14:50:01 -04:00
2026-06-15 23:19:21 -04:00
2026-07-03 10:22:11 -04:00
2026-06-15 23:19:21 -04:00
2026-07-31 10:56:11 -04:00
2026-07-03 09:34:39 -04:00
2026-06-28 14:27:43 -04:00
2026-07-11 21:07:38 -04:00
2026-06-25 18:24:39 -04:00
2026-06-02 18:35:29 -04:00
2026-07-28 08:58:27 -04:00
2026-07-13 11:33:32 -06:00
2026-07-14 21:09:24 -04:00
2026-07-30 14:34:28 -04:00
2026-07-03 08:59:23 -04:00
2026-07-03 12:18:25 -04:00
2026-07-02 18:08:42 -04:00
2026-06-25 18:24:39 -04:00
2026-07-20 15:49:57 -04:00
2026-06-06 11:24:48 -04:00
2026-05-26 11:23:35 -04:00
2026-07-19 15:43:48 -04:00
2026-07-09 20:47:35 -04:00
2026-07-09 22:26:13 -04:00
2026-06-25 21:16:47 -04:00
2026-06-28 11:44:36 -04:00
2026-04-04 14:29:03 -04:00
2026-07-30 12:32:00 -04:00
2026-07-26 22:52:57 -04:00
2026-07-04 13:32:51 -04:00
2026-07-25 01:50:20 -04:00
2026-06-02 18:35:29 -04:00
2026-07-03 08:59:23 -04:00
2026-07-03 01:55:48 -04:00
2026-07-19 15:43:48 -04:00
2026-06-24 17:07:23 -04:00
2026-06-02 18:35:29 -04:00
2026-07-21 08:26:47 -04:00
2026-07-08 21:42:11 -04:00
2026-07-03 10:22:11 -04:00
2026-07-15 13:46:26 -04:00
2026-07-19 12:52:43 -04:00
2026-06-02 18:35:29 -04:00
2026-07-21 08:26:47 -04:00
2026-07-26 19:50:56 -04:00
2026-06-02 18:35:29 -04:00
2026-07-22 00:58:58 -04:00
2026-07-21 08:26:47 -04:00
2026-06-09 12:51:15 -04:00
2026-06-06 11:24:48 -04:00
2026-07-03 09:34:39 -04:00
2026-07-21 18:38:51 -04:00
2026-06-16 00:12:54 -04:00
2026-07-03 09:51:29 -04:00
2026-06-25 18:24:39 -04:00
2026-06-23 19:34:08 -04:00
2026-07-03 09:34:39 -04:00
2026-06-02 18:35:29 -04:00
2026-07-11 23:24:42 -04:00
2026-06-25 21:16:47 -04:00
2026-06-11 15:46:49 -04:00
2026-07-03 09:17:32 -04:00
2026-07-05 15:01:22 -04:00
2026-06-02 18:35:29 -04:00
2026-07-04 13:32:51 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-20 13:37:38 -04:00
2026-06-24 17:07:23 -04:00
2026-06-07 15:20:55 -04:00
2026-07-03 09:17:32 -04:00
2026-07-03 19:37:14 -04:00
2026-07-09 23:43:17 -04:00
2026-07-01 11:51:11 -04:00
2026-07-07 19:38:01 -04:00
2026-07-10 19:55:15 -04:00
2026-06-01 22:43:49 -04:00
2026-07-29 09:30:26 -04:00
2026-07-29 12:29:45 -04:00
2026-07-30 18:52:04 -04:00
2026-07-30 20:12:28 -04:00
2026-07-30 17:25:55 -04:00
2026-07-30 18:14:34 -04:00
2026-07-30 21:19:36 -04:00
2026-07-31 00:47:55 -04:00
2026-06-07 20:35:43 -04:00
2026-06-13 16:13:00 -04:00
2026-07-18 12:20:32 -04:00
2026-07-18 12:20:32 -04:00
2026-07-03 08:59:23 -04:00
2026-07-30 12:32:00 -04:00
2026-07-28 18:31:40 -04:00
2026-07-11 00:53:34 -04:00
2026-07-28 18:31:40 -04:00
2026-07-28 18:31:40 -04:00
2026-06-06 22:16:20 +02:00
2026-06-07 01:27:12 +02:00
2026-07-11 00:53:34 -04:00
2026-07-22 20:58:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-01 22:43:49 -04:00
2026-06-02 18:35:29 -04:00
2026-06-01 22:43:49 -04:00
2026-06-10 01:05:24 -04:00
2026-06-18 08:50:22 -04:00
2026-06-01 22:43:49 -04:00
2026-06-06 11:24:48 -04:00
2026-06-22 00:59:41 -04:00
2026-06-22 00:59:41 -04:00
2026-06-11 14:11:50 -04:00
2026-06-12 21:24:09 -04:00
2026-07-07 15:11:12 -04:00
2026-07-19 20:24:21 -04:00
2026-06-16 00:12:54 -04:00
2026-07-03 19:37:14 -04:00
2026-07-07 19:38:01 -04:00
2026-06-21 14:37:18 -04:00
2026-06-21 14:37:18 -04:00
2026-07-03 10:22:11 -04:00
2026-07-31 13:17:01 -04:00
2026-07-14 14:25:44 -04:00
2026-07-28 18:02:01 -04:00
2026-07-20 16:52:34 -04:00
2026-06-02 18:35:29 -04:00
2026-06-01 22:43:49 -04:00
2026-06-15 18:11:20 -04:00
2026-05-31 23:15:55 -04:00
2026-06-25 18:24:39 -04:00
2026-07-31 00:04:04 -04:00
2026-06-28 11:27:44 -04:00
2026-06-30 22:21:18 -04:00
2026-06-11 13:36:23 -04:00
2026-07-17 06:48:04 -04:00
2026-07-27 15:02:26 -04:00
2026-07-03 08:59:23 -04:00
2026-07-07 21:22:48 -04:00
2026-07-07 21:22:48 -04:00
2026-07-22 00:27:35 -04:00
2026-06-14 08:25:41 -04:00
2026-06-25 21:49:22 -04:00
2026-07-30 08:52:56 -04:00
2026-05-06 21:51:38 -04:00
2026-05-06 21:51:38 -04:00
2026-06-02 18:35:29 -04:00
2026-07-17 06:48:13 -04:00
2026-06-24 14:46:44 -04:00
2026-06-01 22:43:49 -04:00
2026-06-02 18:35:29 -04:00
2026-07-03 09:17:32 -04:00
2026-07-30 11:18:07 -04:00
2026-06-25 18:24:39 -04:00
2026-06-25 18:24:39 -04:00
2026-07-05 16:43:26 -04:00
2026-07-03 09:17:32 -04:00
2026-06-25 18:24:39 -04:00
2026-07-30 15:26:43 -04:00
2026-07-25 23:45:11 -04:00
2026-06-25 15:26:23 -04:00
2026-06-25 16:25:48 -04:00
2026-07-11 23:24:42 -04:00
2026-06-25 21:49:22 -04:00
2026-07-07 12:14:43 -04:00
2026-07-03 10:22:11 -04:00
2026-07-19 15:43:48 -04:00
2026-07-17 08:14:59 -04:00
2026-07-26 21:47:54 -04:00
2026-07-02 14:57:44 -04:00
2026-07-29 11:06:27 -04:00
2026-07-30 15:27:52 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-07-13 13:43:29 -04:00
2026-06-05 17:58:48 -04:00
2026-06-05 17:58:48 -04:00
2026-04-06 15:13:23 -04:00
2026-06-25 18:24:39 -04:00
2026-06-02 18:35:29 -04:00
2026-07-03 00:39:32 -04:00
2026-04-16 17:15:29 -04:00
2026-07-03 10:22:11 -04:00
2026-06-15 18:11:20 -04:00
2026-07-08 10:25:28 -04:00
2026-07-16 00:56:07 -04:00
2026-06-22 12:33:13 -04:00
2026-06-12 19:51:54 -04:00
2026-07-28 15:41:43 -04:00
2026-06-13 21:07:55 -04:00
2026-06-12 21:24:09 -04:00
2026-07-28 18:02:17 -04:00
2026-06-02 18:35:29 -04:00
2026-07-26 21:42:50 -04:00
2026-07-10 09:24:49 -04:00
2026-07-30 15:27:52 -04:00
2026-07-13 20:36:14 -04:00
2026-07-14 15:17:14 -04:00
2026-07-31 18:11:40 -04:00
2026-07-03 01:55:48 -04:00
2026-07-11 21:07:38 -04:00
2026-07-11 21:07:38 -04:00
2026-07-22 16:05:41 -04:00
2026-04-04 14:29:03 -04:00
2026-06-02 18:35:29 -04:00
2026-07-30 16:55:10 -04:00
2026-06-02 18:35:29 -04:00
2026-07-03 09:17:32 -04:00
2026-07-07 15:11:12 -04:00
2026-07-30 19:14:13 -04:00
2026-07-03 09:17:32 -04:00
2026-07-26 14:29:02 -04:00
2026-07-13 20:36:14 -04:00
2026-06-02 18:35:29 -04:00
2026-07-28 21:11:48 -04:00
2026-06-25 14:37:10 -04:00
2026-06-02 18:35:29 -04:00
2026-07-11 22:47:51 -04:00
2026-06-02 18:35:29 -04:00
2026-06-09 23:50:41 -04:00
2026-06-25 18:24:39 -04:00
2026-06-11 13:36:47 -04:00
2026-06-25 23:55:58 -04:00
2026-07-08 21:42:11 -04:00
2026-06-16 21:55:51 -04:00
2026-05-18 12:06:46 -04:00
2026-05-28 18:06:19 -04:00
2026-07-19 07:52:36 -04:00
2026-05-28 18:06:19 -04:00
2026-06-21 10:44:48 -04:00
2026-07-02 11:55:53 -04:00
2026-06-25 18:24:39 -04:00
2026-07-08 21:42:11 -04:00
2026-07-03 01:55:48 -04:00
2026-07-03 09:17:32 -04:00
2026-07-03 08:59:23 -04:00
2026-06-15 22:48:48 -04:00
2026-07-09 23:43:18 -04:00
2026-06-25 18:24:39 -04:00
2026-06-14 21:29:11 -04:00
2026-06-16 14:00:49 -04:00
2026-06-14 21:29:11 -04:00
2026-06-14 21:29:11 -04:00
2026-06-15 23:21:20 -04:00
2026-06-22 09:32:29 -04:00
2026-07-31 02:30:50 -04:00
2026-05-18 23:13:09 -04:00
2026-06-02 18:35:29 -04:00
2026-06-06 11:24:48 -04:00
2026-06-02 18:35:29 -04:00
2026-07-27 15:02:26 -04:00
2026-06-02 18:35:29 -04:00
2026-06-15 18:11:20 -04:00
2026-06-02 18:35:29 -04:00
2026-07-03 09:17:32 -04:00
2026-07-19 15:43:48 -04:00
2026-05-01 19:50:10 -04:00
2026-07-10 15:44:19 -04:00
2026-06-25 21:16:47 -04:00
2026-07-10 15:44:19 -04:00
2026-04-04 14:29:03 -04:00
2026-07-28 18:31:40 -04:00
2026-07-09 09:36:33 -04:00
2026-07-21 23:42:02 -04:00
2026-07-03 09:34:39 -04:00
2026-07-03 09:34:39 -04:00
2026-06-17 14:32:43 -04:00
2026-07-29 07:00:35 -04:00
2026-07-31 08:11:57 -04:00
2026-07-31 08:11:57 -04:00
2026-07-21 23:23:45 -04:00
2026-06-25 18:24:39 -04:00
2026-07-19 14:33:19 -04:00
2026-05-26 22:46:09 -04:00
2026-05-29 10:54:49 -04:00
2026-07-17 12:38:37 -04:00
2026-07-03 10:06:11 -04:00
2026-07-06 11:34:32 -04:00
2026-07-23 07:38:00 -04:00
2026-06-25 23:55:58 -04:00
2026-06-25 18:24:39 -04:00
2026-07-28 18:31:26 -04:00
2026-06-13 23:35:08 -04:00
2026-06-13 23:35:08 -04:00
2026-06-05 17:58:48 -04:00
2026-06-13 23:35:08 -04:00
2026-06-05 17:58:48 -04:00
2026-06-18 07:44:52 -04:00
2026-07-22 20:58:29 -04:00
2026-07-21 10:44:55 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-07-30 15:27:52 -04:00
2026-07-30 12:48:06 -04:00
2026-07-30 12:48:06 -04:00
2026-07-30 12:48:06 -04:00
2026-07-30 08:52:56 -04:00
2026-06-26 23:35:04 -04:00
2026-06-26 23:35:04 -04:00
2026-07-29 07:31:32 -04:00
2026-07-30 08:52:56 -04:00
2026-07-30 19:14:13 -04:00
2026-07-30 12:48:06 -04:00
2026-07-30 08:52:56 -04:00
2026-07-29 11:21:49 -04:00
2026-06-21 23:04:34 -04:00
2026-05-06 21:51:38 -04:00
2026-07-27 20:17:09 -04:00
2026-06-30 20:43:25 -04:00
2026-06-21 23:21:39 -04:00
2026-07-25 00:36:05 -04:00
2026-07-03 08:59:23 -04:00
2026-07-21 09:15:59 -04:00
2026-07-30 23:14:17 -04:00
2026-06-21 20:40:13 -04:00
2026-07-17 08:14:59 -04:00
2026-07-17 06:50:06 -04:00
2026-07-17 08:14:59 -04:00
2026-07-28 23:09:10 -04:00
2026-07-11 23:24:42 -04:00
2026-07-25 01:50:20 -04:00
2026-07-22 00:27:35 -04:00
2026-07-06 08:31:51 -04:00
2026-07-03 08:59:23 -04:00
2026-07-06 08:31:51 -04:00
2026-07-05 19:16:09 +00:00
2026-07-04 13:32:51 -04:00
2026-06-02 18:35:29 -04:00
2026-06-24 17:03:01 -04:00
2026-05-26 18:56:00 -04:00
2026-07-02 21:45:35 -04:00
2026-06-25 18:24:39 -04:00
2026-07-13 00:47:15 -04:00
2026-07-13 00:47:15 -04:00
2026-07-12 00:27:31 -04:00
2026-07-21 23:42:02 -04:00
2026-06-25 18:24:39 -04:00
2026-07-12 00:27:31 -04:00
2026-07-03 09:17:32 -04:00
2026-07-03 08:59:23 -04:00
2026-06-06 11:24:48 -04:00
2026-06-14 20:52:56 -04:00
2026-06-13 23:35:08 -04:00
2026-07-14 15:16:55 -04:00
2026-07-13 15:36:17 -04:00
2026-07-05 19:16:07 +00:00
2026-07-03 08:59:23 -04:00
2026-07-04 13:32:51 -04:00
2026-07-15 19:18:28 -04:00
2026-07-20 17:26:20 -04:00
2026-06-25 18:24:39 -04:00
2026-07-31 10:20:17 -04:00
2026-07-06 14:40:38 -04:00
2026-07-12 16:36:36 -04:00
2026-06-02 18:35:29 -04:00
2026-07-17 18:29:28 -04:00
2026-07-30 19:55:03 -04:00
2026-06-28 11:44:36 -04:00
2026-07-03 01:55:48 -04:00
2026-06-29 16:15:55 -04:00
2026-07-12 15:34:59 -04:00
2026-07-20 19:24:21 -04:00
2026-07-26 00:55:00 -04:00
2026-07-03 01:55:48 -04:00
2026-06-25 18:24:39 -04:00
2026-07-05 18:01:28 -04:00
2026-07-12 01:32:12 -04:00
2026-06-12 13:29:45 -04:00
2026-07-14 14:25:44 -04:00
2026-06-13 21:07:55 -04:00
2026-06-17 08:52:23 -04:00
2026-06-15 18:11:20 -04:00
2026-05-29 11:39:52 -04:00
2026-05-26 11:23:29 -04:00
2026-07-19 14:37:15 -04:00
2026-07-21 10:44:55 -04:00
2026-06-06 11:24:48 -04:00
2026-06-20 13:36:57 -04:00
2026-06-02 18:35:29 -04:00
2026-07-24 21:36:33 -04:00
2026-07-15 09:41:36 -04:00
2026-07-10 21:31:10 -04:00
2026-07-10 21:31:10 -04:00
2026-06-24 13:19:10 -04:00
2026-06-12 18:39:57 -04:00
2026-06-24 13:19:10 -04:00
2026-07-20 14:22:27 -04:00
2026-07-08 12:57:49 +03:00
2026-07-10 14:40:03 -04:00
2026-07-28 18:31:47 -04:00
2026-06-30 10:52:30 -04:00
2026-07-12 16:22:47 -04:00
2026-06-02 18:35:29 -04:00
2026-06-24 17:07:23 -04:00
2026-07-27 20:17:09 -04:00
2026-07-26 19:50:56 -04:00
2026-05-15 19:32:02 -04:00
2026-07-31 08:11:57 -04:00
2026-06-02 18:35:29 -04:00
2026-07-27 10:18:10 -04:00
2026-07-19 14:37:15 -04:00
2026-06-02 18:35:29 -04:00
2026-06-02 18:35:29 -04:00
2026-06-07 00:46:27 -04:00
2026-07-17 06:48:04 -04:00
2026-07-03 09:17:32 -04:00
2026-06-02 19:25:25 -04:00
2026-06-13 23:35:08 -04:00
2026-07-03 09:17:32 -04:00
2026-07-31 03:16:15 -04:00
2026-07-11 23:24:42 -04:00
2026-07-11 23:24:42 -04:00
2026-07-11 23:24:42 -04:00
2026-07-11 23:24:42 -04:00
2026-07-11 23:24:42 -04:00
2026-07-03 10:22:11 -04:00
2026-06-23 14:38:38 -04:00
2026-07-14 14:25:44 -04:00
2026-06-07 12:24:04 -04:00
2026-07-21 18:38:51 -04:00
2026-07-11 16:04:24 -04:00
2026-07-28 18:31:40 -04:00
2026-07-16 13:55:15 -04:00
2026-06-06 11:24:48 -04:00
2026-07-28 15:41:43 -04:00
2026-06-11 23:59:56 -04:00
2026-07-05 14:38:24 -04:00
2026-07-20 14:22:27 -04:00
2026-07-14 14:47:03 -04:00
2026-06-02 18:35:29 -04:00
2026-07-14 14:47:03 -04:00
2026-06-11 11:36:30 -04:00
2026-06-13 23:35:08 -04:00
2026-07-23 07:36:53 -04:00
2026-07-28 18:31:40 -04:00
2026-07-23 07:36:53 -04:00
2026-07-13 20:39:58 -04:00