okstra 0.212.1 → 0.212.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okstra",
3
- "version": "0.212.1",
3
+ "version": "0.212.2",
4
4
  "description": "Host-aware multi-provider cross-verification orchestrator runtime and agent skills.",
5
5
  "license": "MIT",
6
6
  "author": "devonshin",
@@ -1,5 +1,5 @@
1
1
  {
2
- "package": "0.212.1",
3
- "builtAt": "2026-10-06T05:50:20.444Z",
2
+ "package": "0.212.2",
3
+ "builtAt": "2026-10-06T12:30:05.264Z",
4
4
  "repoRoot": "/home/runner/work/okstra/okstra"
5
5
  }
@@ -228,6 +228,9 @@ class ExecutionMutationAudit:
228
228
  and not any(_is_within(path, root) for root in before.artifact_observation_roots)
229
229
  }
230
230
  artifact_changed -= unobserved
231
+ artifact_changed = {
232
+ path for path in artifact_changed if not _is_okstra_os_metadata(path)
233
+ }
231
234
  scratch_changed = _changed_keys(
232
235
  before.scratch_digests, after.scratch_digests
233
236
  )
@@ -782,6 +785,20 @@ def _source_changes(
782
785
  _OKSTRA_ARTIFACT_SUBTREE = ".okstra"
783
786
 
784
787
 
788
+ def _is_okstra_os_metadata(path: str) -> bool:
789
+ """`.okstra/` 아래 Finder 메타데이터(`.DS_Store`, AppleDouble `._*`).
790
+
791
+ 소스 쪽은 레포의 `.gitignore` 가 이런 파일을 면제한다(`_ignored_paths`). okstra 가
792
+ 소유한 `.okstra/` 에는 그 면제가 닿지 않는데, 여기서 이 파일은 어느 워커의
793
+ 산출물도 아니다(2026-10-06, fontsninja-v3-site dev-11126 implementation 007:
794
+ 폴더를 연 Finder 가 쓴 `qa/.DS_Store` 로 완주한 executor 가 버려졌다).
795
+ """
796
+ name = path.rsplit("/", 1)[-1]
797
+ return _is_within(path, _OKSTRA_ARTIFACT_SUBTREE) and (
798
+ name == ".DS_Store" or name.startswith("._")
799
+ )
800
+
801
+
785
802
  def _artifact_policy_failures(
786
803
  snapshot: MutationSnapshot,
787
804
  policies: Sequence[WritePolicy],
@@ -179,7 +179,11 @@ def _directive_context_note(state: WizardState, directive: str) -> str:
179
179
  """
180
180
  if not directive.startswith(MANAGER_CONTEXT_DIRECTIVE_PREFIX):
181
181
  return ""
182
- path = Path(directive[len(MANAGER_CONTEXT_DIRECTIVE_PREFIX):].strip()).expanduser()
182
+ # manager 가 쓰는 directive 는 경로 한 줄이지만, 사람이 그 뒤에 문장을 이어 붙인다
183
+ # ("…context.md. Re-plan scope added …"). 경로는 접두 뒤 첫 토큰이다.
184
+ rest = directive[len(MANAGER_CONTEXT_DIRECTIVE_PREFIX):].split()
185
+ token = rest[0].rstrip(".,;:") if rest else ""
186
+ path = Path(token).expanduser()
183
187
  labels = _p(state.workspace_root, "directive_pick")["labels"]
184
188
  if not path.is_file():
185
189
  return labels["context_missing"].format(path=path)