# NousResearch/hermes-agent · Cron directory ownership on Docker container restart

## Open now

- Nothing open on GitHub.

The members concern ownership of the \`cron/\` directory not being restored when a container restarts, including one bug report and two titles describing changes to chown or repair cron ownership at boot. The titles alone do not show whether any change was merged or whether the problem is fixed.

## TL;DR

- 3 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #41976. Verify it addresses your case.
- **Recommended:** read PR #41976 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-41976`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.67`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #41966: \[Bug\]: \`cron/\` directory ownership not restored on container restart

## Prior & competing PRs

- **#41976: Repair cron ownership on container restart**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `docker/stage2-hook.sh`, `tests/test_docker_home_override_scripts.py`
  - fix hunks:
  - `docker/stage2-hook.sh`

    ```diff
    @@ -262,6 +262,14 @@ if [ -d "$HERMES_HOME/profiles" ]; then
         chown -R hermes:hermes "$HERMES_HOME/profiles" 2>/dev/null || true
     fi
     
    +# Always reset ownership of $HERMES_HOME/cron on every boot for the same
    +# docker-exec/root-write reason as profiles/. The cron scheduler state
    +# (jobs.json) must stay readable by the unprivileged hermes runtime even
    +# after root-context maintenance commands or scheduler writes.
    +if [ -d "$HERMES_HOME/cron" ]; then
    +    chown -R hermes:hermes "$HERMES_HOME/cron" 2>/dev/null || true
    +fi
    +
     # Reset ownership of hermes-owned top-level state files on every boot.
     # The targeted data-volume chown above only covers hermes-owned
     # *subdirectories*; loose state files living directly under $HERMES_HOME
    ```
  - `tests/test_docker_home_override_scripts.py`

    ```diff
    @@ -6,6 +6,7 @@
     REPO_ROOT = Path(__file__).resolve().parent.parent
     DASHBOARD_RUN = REPO_ROOT / "docker" / "s6-rc.d" / "dashboard" / "run"
     MAIN_WRAPPER = REPO_ROOT / "docker" / "main-wrapper.sh"
    +STAGE2_HOOK = REPO_ROOT / "docker" / "stage2-hook.sh"
     
     
     def test_main_wrapper_preserves_docker_workdir() -> None:
    ```

    ```diff
    @@ -77,3 +78,14 @@ def test_dashboard_run_does_not_derive_insecure_from_bind_host() -> None:
             assert truthy in text, (
                 f"HERMES_DASHBOARD_INSECURE should accept truthy value {truthy!r}"
             )
    +
    +
    +def test_stage2_hook_repairs_profiles_and_cron_ownership_on_every_boot() -> None:
    +    """profiles/ and cron/ must both be reclaimed after root-context writes."""
    +    text = STAGE2_HOOK.read_text(encoding="utf-8")
    +
    +    assert 'if [ -d "$HERMES_HOME/profiles" ]; then' in text
    +    assert 'chown -R hermes:hermes "$HERMES_HOME/profiles" 2>/dev/null || true' in text
    +
    +    assert 'if [ -d "$HERMES_HOME/cron" ]; then' in text
    +    assert 'chown -R hermes:hermes "$HERMES_HOME/cron" 2>/dev/null || true' in text
    ```
- **#41981: fix(docker): unconditionally chown cron/ on container boot**. closed without merge
  - maintainer direction: category `superseded_by_pr`; implication `superseded`; refs `#41976`, `#41966`

## Fix status

- Merged to main in PR #41976 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-06-10`.
