alissa-tools-github-orcloop 0.4.2__tar.gz → 0.4.3__tar.gz

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 (28) hide show
  1. {alissa_tools_github_orcloop-0.4.2/src/main/alissa_tools_github_orcloop.egg-info → alissa_tools_github_orcloop-0.4.3}/PKG-INFO +1 -1
  2. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/loop.py +19 -5
  3. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/state.py +8 -2
  4. alissa_tools_github_orcloop-0.4.3/src/main/alissa/tools/github/orcloop/version +1 -0
  5. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3/src/main/alissa_tools_github_orcloop.egg-info}/PKG-INFO +1 -1
  6. alissa_tools_github_orcloop-0.4.2/src/main/alissa/tools/github/orcloop/version +0 -1
  7. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/LICENSE +0 -0
  8. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/MANIFEST.in +0 -0
  9. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/NOTICE +0 -0
  10. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/README.md +0 -0
  11. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/requirements.txt +0 -0
  12. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/setup.cfg +0 -0
  13. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/setup.py +0 -0
  14. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/__init__.py +0 -0
  15. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/__main__.py +0 -0
  16. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/alissa_client.py +0 -0
  17. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/config.py +0 -0
  18. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/console.py +0 -0
  19. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/ghclient.py +0 -0
  20. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/markers.py +0 -0
  21. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/proc.py +0 -0
  22. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/version.py +0 -0
  23. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/workplan.py +0 -0
  24. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa/tools/github/orcloop/workplan_html.py +0 -0
  25. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa_tools_github_orcloop.egg-info/SOURCES.txt +0 -0
  26. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa_tools_github_orcloop.egg-info/dependency_links.txt +0 -0
  27. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa_tools_github_orcloop.egg-info/entry_points.txt +0 -0
  28. {alissa_tools_github_orcloop-0.4.2 → alissa_tools_github_orcloop-0.4.3}/src/main/alissa_tools_github_orcloop.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-orcloop
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: ALISSA-TOOLS-GITHUB-ORCLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera
@@ -583,6 +583,19 @@ ORIGIN_MISSING_MAX_ATTEMPTS = 3
583
583
  # is written by the loop itself, before anything can refuse it -- a counter
584
584
  # whose advance depends on a remote write is not a counter.
585
585
  #
586
+ # THE FAMILY PREFIX, TRAILING COLON INCLUDED -- not the bare stem, which is what
587
+ # the `_PREFIX` in the name is there to say. Its siblings a few hundred lines up
588
+ # (`ESCALATION_CLOSELOOP_FAILED`, `ESCALATION_CLOSELOOP_TERMINAL`) are bare stems
589
+ # whose call sites append the separator; this one carries it, and the name is the
590
+ # only thing that tells the next author which of the two shapes they are holding.
591
+ # Every reader and the clear pass this one string, so the two sides are the same
592
+ # expression
593
+ # rather than two literals that happen to agree: with the colon left to the call
594
+ # sites, the reads scanned `marker:origin-missing:%` while `CLEARABLE_KINDS`
595
+ # forced the clear to `marker:origin-missing%`, and a future sibling kind --
596
+ # `marker:origin-missing-since`, exactly the clock shape dedupe and context both
597
+ # grew -- would have been swept by a clear meant only for the attempts.
598
+ #
586
599
  # `marker:` for the reason the other markers carry it: `escalations_matching` is
587
600
  # a prefix reader, and these rows must stay out of every prefix read of a page
588
601
  # kind.
@@ -600,7 +613,7 @@ ORIGIN_MISSING_MAX_ATTEMPTS = 3
600
613
  # the same argument applies to `marker:dedupe-unreadable`, which is cleared for
601
614
  # exactly this reason (a blip that clears must not make the next outage look
602
615
  # days old).
603
- ORIGIN_MISSING_ATTEMPT = "marker:origin-missing"
616
+ ORIGIN_MISSING_ATTEMPT_PREFIX = "marker:origin-missing:"
604
617
 
605
618
  # The close edge could not write its evidence AT ALL -- not the enriched
606
619
  # delivery record, not the bare confirmation line -- for longer than the
@@ -788,7 +801,7 @@ def origin_missing_attempt_kind(attempt: int) -> str:
788
801
  `closeloop_failed_kind`, so the row count IS the attempt number under the
789
802
  ledger's idempotent (task, kind) insert -- two writes of the same attempt
790
803
  can never inflate it, and a restart cannot reset it."""
791
- return f"{ORIGIN_MISSING_ATTEMPT}:a{attempt}"
804
+ return f"{ORIGIN_MISSING_ATTEMPT_PREFIX}a{attempt}"
792
805
 
793
806
 
794
807
  # --- escalation copy -------------------------------------------------------
@@ -4289,10 +4302,11 @@ class Orchestrator:
4289
4302
  `_origin_missing` at all (`_close_loop` returns before the read), so
4290
4303
  there are no rows for it to clear and no side effect to suppress. The
4291
4304
  guard below means it does not even query."""
4292
- if not self.state.escalations_matching(task_number, ORIGIN_MISSING_ATTEMPT + ":"):
4305
+ if not self.state.escalations_matching(task_number, ORIGIN_MISSING_ATTEMPT_PREFIX):
4293
4306
  return
4307
+ # The SAME string the read above scans with -- see the constant.
4294
4308
  cleared = self.state.clear_escalations_matching(
4295
- task_number, ORIGIN_MISSING_ATTEMPT
4309
+ task_number, ORIGIN_MISSING_ATTEMPT_PREFIX
4296
4310
  )
4297
4311
  log.info(
4298
4312
  "%s: the origin task reads again — clearing %d unreadable-attempt "
@@ -4368,7 +4382,7 @@ class Orchestrator:
4368
4382
  What is NOT done here: the trigger label is not touched (parking stays
4369
4383
  the operator's call, the rule the park path holds), the issue is not
4370
4384
  closed or re-opened, and no Alissa write of any kind is attempted."""
4371
- prior = self.state.escalations_matching(task_number, ORIGIN_MISSING_ATTEMPT + ":")
4385
+ prior = self.state.escalations_matching(task_number, ORIGIN_MISSING_ATTEMPT_PREFIX)
4372
4386
  if len(prior) >= ORIGIN_MISSING_MAX_ATTEMPTS:
4373
4387
  last_at = max(int(row["escalated_at"]) for row in prior)
4374
4388
  waited = self._now() - last_at
@@ -74,14 +74,20 @@ CREATE TABLE IF NOT EXISTS meta (
74
74
  # imported from `loop`, which imports this module; `test_loop` pins that the
75
75
  # loop's constants and this set stay the same five strings.
76
76
  #
77
- # `marker:origin-missing` is the one entry that names a PREFIX rather than a
77
+ # `marker:origin-missing:` is the one entry that names a PREFIX rather than a
78
78
  # whole kind: its rows are `marker:origin-missing:a<j>`, one per poll, and they
79
79
  # are cleared as a family by `clear_escalations_matching` -- a counter of
80
80
  # CONSECUTIVE failures is only consecutive if a success resets it.
81
+ #
82
+ # Its TRAILING COLON is load-bearing, and is the entry's whole job: the allowlist
83
+ # is what forces the prefix the clear may use, so the bare stem would have
84
+ # licensed a DELETE of `marker:origin-missing%` -- sweeping any future sibling
85
+ # kind (`marker:origin-missing-since`, say) along with the attempts. Narrower
86
+ # here means narrower everywhere, since the loop reads with this same string.
81
87
  CLEARABLE_KINDS = frozenset({
82
88
  "marker:dedupe-unreadable", "dedupe-unreadable",
83
89
  "marker:context-unreadable", "context-unreadable",
84
- "marker:origin-missing",
90
+ "marker:origin-missing:",
85
91
  })
86
92
 
87
93
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-orcloop
3
- Version: 0.4.2
3
+ Version: 0.4.3
4
4
  Summary: ALISSA-TOOLS-GITHUB-ORCLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera