Skip to content

Commit 7e9f498

Browse files
committed
fix: remove leftover merge marker in pack registry
1 parent c796dde commit 7e9f498

File tree

9 files changed

+136
-92
lines changed

9 files changed

+136
-92
lines changed

services/observability/backpressure.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ class BoundedQueue(Generic[T]):
4040
def __init__(self, capacity: int) -> None:
4141
if capacity <= 0:
4242
raise ValueError("Capacity must be positive")
43-
43+
4444
self._capacity = capacity
4545
self._deque: Deque[T] = deque(maxlen=capacity)
4646
self._lock = threading.Lock()
47-
47+
4848
# Metrics
4949
self._high_watermark = 0
5050
self._total_enqueued = 0
@@ -64,14 +64,14 @@ def enqueue(self, item: T) -> bool:
6464
self._total_dropped += 1
6565
self._last_drop_ts = time.time()
6666
dropped = True
67-
67+
6868
self._deque.append(item)
6969
self._total_enqueued += 1
70-
70+
7171
current_size = len(self._deque)
7272
if current_size > self._high_watermark:
7373
self._high_watermark = current_size
74-
74+
7575
return not dropped
7676

7777
def get_all(self) -> List[T]:
@@ -88,7 +88,7 @@ def stats(self) -> QueueStats:
8888
high_watermark=self._high_watermark,
8989
total_enqueued=self._total_enqueued,
9090
total_dropped=self._total_dropped,
91-
last_drop_ts=self._last_drop_ts
91+
last_drop_ts=self._last_drop_ts,
9292
)
9393

9494
def clear(self) -> None:

services/packs/pack_registry.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import shutil
44
from typing import Dict, List, Optional
55

6-
<<<<<<< HEAD
76
from ..safe_io import resolve_under_root
87
from .pack_archive import PackArchive, PackError
98
from .pack_types import PackMetadata
@@ -57,9 +56,7 @@ def install_pack(self, zip_path: str, overwrite: bool = False) -> PackMetadata:
5756
# A malicious pack.json could contain traversal sequences.
5857
_validate_pack_segment(name, "name")
5958
_validate_pack_segment(version, "version")
60-
target_dir = resolve_under_root(
61-
self.packs_dir, os.path.join(name, version)
62-
)
59+
target_dir = resolve_under_root(self.packs_dir, os.path.join(name, version))
6360

6461
if os.path.exists(target_dir):
6562
if not overwrite:
@@ -76,9 +73,7 @@ def install_pack(self, zip_path: str, overwrite: bool = False) -> PackMetadata:
7673
def uninstall_pack(self, name: str, version: str) -> bool:
7774
_validate_pack_segment(name, "name")
7875
_validate_pack_segment(version, "version")
79-
target_dir = resolve_under_root(
80-
self.packs_dir, os.path.join(name, version)
81-
)
76+
target_dir = resolve_under_root(self.packs_dir, os.path.join(name, version))
8277
if os.path.exists(target_dir):
8378
shutil.rmtree(target_dir)
8479
# Clean up parent if empty
@@ -118,9 +113,7 @@ def list_packs(self) -> List[PackMetadata]:
118113
def get_pack_path(self, name: str, version: str) -> Optional[str]:
119114
_validate_pack_segment(name, "name")
120115
_validate_pack_segment(version, "version")
121-
target_dir = resolve_under_root(
122-
self.packs_dir, os.path.join(name, version)
123-
)
116+
target_dir = resolve_under_root(self.packs_dir, os.path.join(name, version))
124117
if os.path.exists(target_dir):
125118
return target_dir
126119
return None

services/permission_posture.py

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,24 +60,24 @@ def __init__(self) -> None:
6060
def evaluate(self) -> List[PermissionResult]:
6161
"""Run all permission checks."""
6262
results = []
63-
63+
6464
# 1. State Directory
6565
results.append(self._check_state_dir())
6666

6767
# 2. Secrets File
6868
results.append(self._check_secrets_file())
69-
69+
7070
return results
7171

7272
def _check_state_dir(self) -> PermissionResult:
7373
"""Check state directory permissions."""
7474
path = self.state_dir
7575
if not path.exists():
76-
return PermissionResult(
76+
return PermissionResult(
7777
resource="state_dir",
7878
severity=PermissionSeverity.SKIP,
7979
message="State directory does not exist",
80-
code="perm.state_dir.missing"
80+
code="perm.state_dir.missing",
8181
)
8282

8383
# Common: Must be writable by owner/current user
@@ -88,7 +88,7 @@ def _check_state_dir(self) -> PermissionResult:
8888
severity=PermissionSeverity.FAIL,
8989
message=f"State directory not writable: {path}",
9090
code="perm.state_dir.not_writable",
91-
remediation="Ensure the process user has write access."
91+
remediation="Ensure the process user has write access.",
9292
)
9393

9494
# POSIX Hardening
@@ -97,13 +97,17 @@ def _check_state_dir(self) -> PermissionResult:
9797
mode = path.stat().st_mode
9898
if mode & stat.S_IWOTH:
9999
# World writable is CRITICAL in Hardened
100-
sev = PermissionSeverity.FAIL if self.profile == RuntimeProfile.HARDENED else PermissionSeverity.WARN
100+
sev = (
101+
PermissionSeverity.FAIL
102+
if self.profile == RuntimeProfile.HARDENED
103+
else PermissionSeverity.WARN
104+
)
101105
return PermissionResult(
102106
resource="state_dir",
103107
severity=sev,
104-
message="State directory is world-writable",
108+
message="State directory is world-writable",
105109
code="perm.state_dir.world_writable",
106-
remediation=f"chmod 700 {path}"
110+
remediation=f"chmod 700 {path}",
107111
)
108112
except Exception as e:
109113
logger.warning(f"Failed to stat state dir: {e}")
@@ -112,33 +116,37 @@ def _check_state_dir(self) -> PermissionResult:
112116
resource="state_dir",
113117
severity=PermissionSeverity.PASS,
114118
message="State directory permissions OK",
115-
code="perm.state_dir.ok"
119+
code="perm.state_dir.ok",
116120
)
117121

118122
def _check_secrets_file(self) -> PermissionResult:
119123
"""Check secrets.json permissions."""
120124
path = self.state_dir / "secrets.json"
121-
125+
122126
if not path.exists():
123-
return PermissionResult(
127+
return PermissionResult(
124128
resource="secrets_file",
125-
severity=PermissionSeverity.PASS, # Not an error to not exist
129+
severity=PermissionSeverity.PASS, # Not an error to not exist
126130
message="Secrets file not present",
127-
code="perm.secrets.missing"
131+
code="perm.secrets.missing",
128132
)
129133

130134
if self.system != "Windows":
131135
try:
132136
mode = path.stat().st_mode
133137
# Check World Readable/Writable
134138
if mode & (stat.S_IROTH | stat.S_IWOTH):
135-
sev = PermissionSeverity.FAIL if self.profile == RuntimeProfile.HARDENED else PermissionSeverity.WARN
139+
sev = (
140+
PermissionSeverity.FAIL
141+
if self.profile == RuntimeProfile.HARDENED
142+
else PermissionSeverity.WARN
143+
)
136144
return PermissionResult(
137145
resource="secrets_file",
138146
severity=sev,
139147
message="Secrets file is world-accessible",
140148
code="perm.secrets.world_accessible",
141-
remediation=f"chmod 600 {path}"
149+
remediation=f"chmod 600 {path}",
142150
)
143151
except Exception as e:
144152
logger.warning(f"Failed to stat secrets file: {e}")
@@ -147,7 +155,7 @@ def _check_secrets_file(self) -> PermissionResult:
147155
resource="secrets_file",
148156
severity=PermissionSeverity.PASS,
149157
message="Secrets file permissions OK",
150-
code="perm.secrets.ok"
158+
code="perm.secrets.ok",
151159
)
152160

153161

@@ -158,13 +166,15 @@ def evaluate_startup_permissions() -> Tuple[bool, List[PermissionResult]]:
158166
"""
159167
evaluator = PermissionEvaluator()
160168
results = evaluator.evaluate()
161-
169+
162170
# Block startup if any FAIL result exists
163171
failures = [r for r in results if r.severity == PermissionSeverity.FAIL]
164172
if failures:
165-
logger.critical(f"Startup blocked by permission checks ({len(failures)} failures).")
173+
logger.critical(
174+
f"Startup blocked by permission checks ({len(failures)} failures)."
175+
)
166176
for f in failures:
167177
logger.critical(f" [{f.code}] {f.message} -> {f.remediation}")
168178
return False, results
169-
179+
170180
return True, results

tests/test_backpressure.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,52 @@
1-
2-
import unittest
31
import time
2+
import unittest
3+
44
from services.observability.backpressure import BoundedQueue
55

6+
67
class TestBoundedQueue(unittest.TestCase):
7-
8+
89
def test_capacity_and_drops(self):
910
"""Test strict capacity enforcement and drop counting."""
1011
q = BoundedQueue[int](capacity=2)
11-
12+
1213
# 1. Fill to capacity
1314
self.assertTrue(q.enqueue(1))
1415
self.assertTrue(q.enqueue(2))
15-
16+
1617
stats = q.stats()
1718
self.assertEqual(stats.current_size, 2)
1819
self.assertEqual(stats.high_watermark, 2)
1920
self.assertEqual(stats.total_dropped, 0)
20-
21+
2122
# 2. Overflow (Drop Oldest)
2223
self.assertFalse(q.enqueue(3))
23-
24+
2425
stats = q.stats()
2526
self.assertEqual(stats.current_size, 2)
2627
self.assertEqual(stats.total_dropped, 1)
2728
self.assertGreater(stats.last_drop_ts, 0)
28-
29+
2930
# Check content (1 should be dropped, 2 and 3 remain)
3031
items = q.get_all()
3132
self.assertEqual(items, [2, 3])
3233

3334
def test_stats_tracking(self):
3435
"""Test cumulative stats logic."""
3536
q = BoundedQueue[str](capacity=5)
36-
37+
3738
q.enqueue("a")
3839
q.enqueue("b")
3940
self.assertEqual(q.stats().high_watermark, 2)
40-
41-
q.get_all() # Just reading doesn't change state
42-
41+
42+
q.get_all() # Just reading doesn't change state
43+
4344
q.clear()
4445
stats = q.stats()
4546
self.assertEqual(stats.current_size, 0)
4647
self.assertEqual(stats.high_watermark, 0)
4748
self.assertEqual(stats.total_enqueued, 0)
4849

50+
4951
if __name__ == "__main__":
5052
unittest.main()

tests/test_packs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
import zipfile
77

88
from services.packs.pack_archive import PackArchive
9-
from services.packs.pack_registry import PackRegistry, _validate_pack_segment
109
from services.packs.pack_manifest import (
1110
MAX_MANIFEST_FILES,
1211
PackError,
1312
validate_manifest_integrity,
1413
validate_pack_metadata,
1514
)
15+
from services.packs.pack_registry import PackRegistry, _validate_pack_segment
1616
from services.packs.pack_types import PackMetadata, PackType
1717

1818

0 commit comments

Comments
 (0)