/etc/systemd/system/ollama.service:6:ExecStart=/usr/local/bin/ollama serve /etc/systemd/system/ollama.service:7:User=ollama /etc/systemd/system/ollama.service:8:Group=ollama /etc/systemd/system/shire-brain.service:3:After=network-online.target tailscaled.service ollama.service /etc/systemd/system/shire-brain.service:4:Wants=network-online.target tailscaled.service ollama.service /etc/systemd/system/shire-brain.service:12:Environment=SHIRE_BRAIN_PORT=8765 /home/shire3d/ARMOR/ai/brain_server.py:40:PORT = int(os.environ.get("SHIRE_BRAIN_PORT", "8765")) /home/shire3d/ARMOR/ai/brain_server.py:69:def json_response(handler, payload, status=200): /home/shire3d/ARMOR/ai/brain_server.py:71: handler.send_response(status) /home/shire3d/ARMOR/ai/brain_server.py:118: for name, allowed in route["capabilities"].items() /home/shire3d/ARMOR/ai/brain_server.py:129: "Denied capabilities: " + ", ".join(denied) + "\n" /home/shire3d/ARMOR/ai/brain_server.py:138:def resolve_request_route(payload, prompt): /home/shire3d/ARMOR/ai/brain_server.py:145: route = prepare_route( /home/shire3d/ARMOR/ai/brain_server.py:175: model, mode, clean_prompt, route_reason = choose_model( /home/shire3d/ARMOR/ai/brain_server.py:184: route_reason, /home/shire3d/ARMOR/ai/brain_server.py:208:def ask_ollama(model, prompt, max_tokens, system_context=""): /home/shire3d/ARMOR/ai/brain_server.py:243: if self.path not in {"/", "/health"}: /home/shire3d/ARMOR/ai/brain_server.py:244: json_response(self, {"ok": False, "error": "Not found"}, status=404) /home/shire3d/ARMOR/ai/brain_server.py:260: "ollama_url": OLLAMA_URL, /home/shire3d/ARMOR/ai/brain_server.py:267: json_response(self, {"ok": False, "error": "Not found"}, status=404) /home/shire3d/ARMOR/ai/brain_server.py:277: json_response(self, {"ok": False, "error": "Missing prompt"}, status=400) /home/shire3d/ARMOR/ai/brain_server.py:284: route_reason, /home/shire3d/ARMOR/ai/brain_server.py:287: ) = resolve_request_route(payload, prompt) /home/shire3d/ARMOR/ai/brain_server.py:297: ollama_data = ask_ollama( /home/shire3d/ARMOR/ai/brain_server.py:305: message = ollama_data.get("message", {}) /home/shire3d/ARMOR/ai/brain_server.py:314: "route_reason": route_reason, /home/shire3d/ARMOR/ai/brain_server.py:328: status=400, /home/shire3d/ARMOR/ai/brain_server.py:342: status=500, /home/shire3d/ARMOR/ai/brain_server.py:351: status=500, /home/shire3d/ARMOR/ai/systemd/shire-brain.service:3:After=network-online.target tailscaled.service ollama.service /home/shire3d/ARMOR/ai/systemd/shire-brain.service:4:Wants=network-online.target tailscaled.service ollama.service /home/shire3d/ARMOR/ai/systemd/shire-brain.service:12:Environment=SHIRE_BRAIN_PORT=8765 /home/shire3d/ARMOR/codex/memory_rules.json:11: "module status", /home/shire3d/ARMOR/codex/memory_rules.json:13: "AI capability", /home/shire3d/ARMOR/codex/personality.json:10: "fake status claims" /home/shire3d/ARMOR/codex/prompt_builder.py:123:Current module status: /home/shire3d/ARMOR/config/shire_appliances.json:8: "brain_port": 8765 /home/shire3d/ARMOR/core/agent_manager.py:15: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:24: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:33: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:42: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:51: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:60: "health": "ok", /home/shire3d/ARMOR/core/agent_manager.py:66: event_bus.publish("agents", "status", "Agent Manager Standby", "standby") /home/shire3d/ARMOR/core/agent_manager.py:91: agent["health"] = "ok" /home/shire3d/ARMOR/core/agent_manager.py:130: event_bus.publish("agents", "night_forge", "Night Forge worker chain prepared", "online") /home/shire3d/ARMOR/core/cooling_manager.py:86: def preference_status_text(self): /home/shire3d/ARMOR/core/cooling_manager.py:336: def auto_status_text(self): /home/shire3d/ARMOR/core/cooling_manager.py:368: "auto_status": self.auto_status_text(), /home/shire3d/ARMOR/core/cooling_manager.py:369: "preference_status": self.preference_status_text(), /home/shire3d/ARMOR/core/service_manager.py:97: code, out, err = self.command_output(["systemctl", "is-active", "ollama"]) /home/shire3d/ARMOR/core/service_manager.py:107: code, out, err = self.command_output(["git", "-C", str(root), "status", "--short"]) /home/shire3d/ARMOR/core/service_manager.py:115: lines.append(f"Git status failed: {err or out}") /home/shire3d/ARMOR/core/service_manager.py:116: issues.append("Git status check failed") /home/shire3d/ARMOR/core/shire_runtime.py:96: self.working("Night Forge task queued. Awaiting worker execution.") /home/shire3d/ARMOR/core/task_manager.py:33: "status": "queued", /home/shire3d/ARMOR/core/task_manager.py:55: return len([t for t in self.tasks if t["status"] in ["queued", "running", "awaiting_approval"]]) /home/shire3d/ARMOR/core/task_manager.py:57: def set_status(self, task_id, status, result=None): /home/shire3d/ARMOR/core/task_manager.py:60: task["status"] = status /home/shire3d/ARMOR/core/task_manager.py:66: "task_status", /home/shire3d/ARMOR/core/task_manager.py:67: f'{task["title"]}: {status}', /home/shire3d/ARMOR/data/blender_background_jobs/background_job_registry.json:2: "jobs": [ /home/shire3d/ARMOR/data/blender_background_jobs/background_job_registry.json:10: "status": "complete_success", /home/shire3d/ARMOR/data/blender_background_jobs/background_job_registry.json:16: "probe_status": "probe_complete_success", /home/shire3d/ARMOR/data/blender_background_jobs/background_job_registry.json:18: "path": "/home/shire3d/ARMOR/data/blender_background_jobs/BBJ-0001_from_BHP-0001", /home/shire3d/ARMOR/data/blender_background_jobs/BBJ-0001_from_BHP-0001/manifest.json:8: "status": "complete_success", /home/shire3d/ARMOR/data/blender_background_jobs/BBJ-0001_from_BHP-0001/manifest.json:14: "probe_status": "probe_complete_success", /home/shire3d/ARMOR/data/blender_background_jobs/BBJ-0001_from_BHP-0001/manifest.json:16: "path": "/home/shire3d/ARMOR/data/blender_background_jobs/BBJ-0001_from_BHP-0001", /home/shire3d/ARMOR/data/blender_codex/manifest.json:20: "status": "learning_mode_not_automation", /home/shire3d/ARMOR/data/blender_dry_run_plans/BDR-0001_from_BSD-0001/manifest.json:9: "status": "ray_plan_approved_no_execution", /home/shire3d/ARMOR/data/blender_dry_run_plans/dry_run_registry.json:11: "status": "ray_plan_approved_no_execution", /home/shire3d/ARMOR/data/blender_headless_probes/BHP-0001_from_BHR-0001/manifest.json:10: "status": "probe_complete_success", /home/shire3d/ARMOR/data/blender_headless_probes/BHP-0001_from_BHR-0001/safe_headless_probe.py:20: 'status=HEADLESS_BLENDER_PROBE_OK', /home/shire3d/ARMOR/data/blender_headless_probes/headless_probe_registry.json:12: "status": "probe_complete_success", /home/shire3d/ARMOR/data/blender_headless_runs/BHR-0001_from_BDR-0001/manifest.json:9: "status": "ray_headless_request_approved_execution_still_blocked", /home/shire3d/ARMOR/data/blender_headless_runs/headless_run_registry.json:11: "status": "ray_headless_request_approved_execution_still_blocked", /home/shire3d/ARMOR/data/blender_mastery_projects/BMP-0001/history/manifest-event-000002.json:48: "physical_x11_status": "DEFERRED_SSH_ONLY", /home/shire3d/ARMOR/data/blender_mastery_projects/BMP-0001/manifest.json:48: "physical_x11_status": "DEFERRED_SSH_ONLY", /home/shire3d/ARMOR/data/blender_script_drafts/BSD-0001_gothic_skull_dice_tower_concept_review_only/manifest.json:6: "status": "draft_text_only_not_approved", /home/shire3d/ARMOR/data/blender_script_drafts/script_registry.json:8: "status": "draft_text_only_not_approved", /home/shire3d/ARMOR/data/forge_learning_queue.json:6: "status": "awaiting_ray_approval", /home/shire3d/ARMOR/data/forge_learning_queue.json:42: "status": "sandbox_learning_pack_created", /home/shire3d/ARMOR/data/forge_learning_queue.json:120: "status": "approved_learning_plan", /home/shire3d/ARMOR/data/forge_learning_queue.json:178: "status": "sandbox_learning_pack_created", /home/shire3d/ARMOR/data/forge_learning_sandbox/FLR-0002_master_blender_stl_dice_tower_creation_in_rays_shire3d_gothi/manifest.json:4: "status": "sandbox_learning_pack_created", /home/shire3d/ARMOR/data/forge_learning_sandbox/FLR-0004_make_shire_face_more_animated/manifest.json:4: "status": "sandbox_learning_pack_created", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/manifest.json:7: "status": "research_completed", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/search_log.json:4: "status": "search_error_NameError_name 're' is not defined_fallback_sources_used", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/search_log.json:17: "status": "search_error_NameError_name 're' is not defined_fallback_sources_used", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/search_log.json:30: "status": "search_error_NameError_name 're' is not defined_fallback_sources_used", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/search_log.json:43: "status": "search_error_NameError_name 're' is not defined_fallback_sources_used", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:4: "status": "ok", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:10: "status": "http_error_404", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:16: "status": "http_error_404", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:22: "status": "http_error_404", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:28: "status": "ok", /home/shire3d/ARMOR/data/forge_research/FRR-0001_write_gothic_etsy_product_listings/sources.json:34: "status": "http_error_403", /home/shire3d/ARMOR/data/forge_research_queue.json:7: "status": "research_completed", /home/shire3d/ARMOR/data/forge_research_queue.json:45: "status": "awaiting_ray_approval", /home/shire3d/ARMOR/data/forge_skill_drafts/skill_registry.json:6: "status": "draft_not_certified", /home/shire3d/ARMOR/data/forge_skill_drafts/write_gothic_etsy_product_listings/manifest.json:6: "status": "training_notes_created_not_certified", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/manifest.json:9: "status": "CALIBRATION_PASSED", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/manifest.json:20: "cadquery": "2.8.0", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/manifest.json:21: "cadquery_ocp": "7.9.3.1.1", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/source/model.py:15:import cadquery as cq /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/source/model.py:135: "status": "PASS" if not errors else "FAIL", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/source/model.py:154: "cadquery": importlib.metadata.version("cadquery"), /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/source/model.py:155: "cadquery_ocp": importlib.metadata.version("cadquery-ocp"), /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/validation/determinism.json:4: "status": "PASS", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/validation/determinism.json:6: "status": true, /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/validation/report.json:5: "status": "PASS", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/validation/report.json:55: "cadquery": "2.8.0", /home/shire3d/ARMOR/data/parametric_forge_projects/CAL-0001/validation/report.json:56: "cadquery_ocp": "7.9.3.1.1", /home/shire3d/ARMOR/data/shire3d_commercial_projects/COMM-0001/job.json:80: "schema": "shire3d.commercial_job.v1", /home/shire3d/ARMOR/data/shire3d_commercial_projects/COMM-0001/job.json:86: "status": "MARK_IV_DESIGN_CONVERGENCE_READY", /home/shire3d/ARMOR/data/shire3d_commercial_projects/COMM-0001/mark-ii-concept.json:19: "status": "MARK_II_CONCEPT_READY" /home/shire3d/ARMOR/data/shire3d_commercial_projects/COMM-0001/mark-iii-industrial-design.json:19: "status": "MARK_III_INDUSTRIAL_DESIGN_READY", /home/shire3d/ARMOR/data/shire3d_commercial_projects/COMM-0001/mark-iv-design-convergence.json:20: "status": "MARK_IV_DESIGN_CONVERGENCE_READY", /home/shire3d/ARMOR/docs/parametric_forge/requirements-0001B.lock.txt:7:cadquery-ocp-proxy==7.9.3.1.1 /home/shire3d/ARMOR/docs/parametric_forge/requirements-0001B.lock.txt:8:cadquery-ocp==7.9.3.1.1 /home/shire3d/ARMOR/docs/parametric_forge/requirements-0001B.lock.txt:9:cadquery==2.8.0 /home/shire3d/ARMOR/framework/base_module.py:7: def __init__(self, stack, name, status="STANDBY"): /home/shire3d/ARMOR/framework/base_module.py:18: status_colour = GREEN if status == "ONLINE" else AMBER /home/shire3d/ARMOR/framework/base_module.py:19: module_status = QLabel(f"MODULE STATUS: {status}") /home/shire3d/ARMOR/framework/base_module.py:20: module_status.setAlignment(Qt.AlignCenter) /home/shire3d/ARMOR/framework/base_module.py:21: module_status.setStyleSheet(f"color:{status_colour}; font-size:14px; font-weight:bold;") /home/shire3d/ARMOR/framework/base_module.py:24: self.main.addWidget(module_status) /home/shire3d/ARMOR/framework/warden_station.py:11: def __init__(self, stack, title, subtitle, icon, status_lines=None, objective="Awaiting assignment"): /home/shire3d/ARMOR/framework/warden_station.py:17: self.status_lines = status_lines or [] /home/shire3d/ARMOR/framework/warden_station.py:71: status = QLabel("STATION ONLINE") /home/shire3d/ARMOR/framework/warden_station.py:72: status.setAlignment(Qt.AlignCenter) /home/shire3d/ARMOR/framework/warden_station.py:73: status.setStyleSheet(f""" /home/shire3d/ARMOR/framework/warden_station.py:82: core_layout.addWidget(status) /home/shire3d/ARMOR/framework/warden_station.py:87: info = QLabel(self.build_status_text()) /home/shire3d/ARMOR/framework/warden_station.py:138: def build_status_text(self): /home/shire3d/ARMOR/framework/warden_station.py:140: for line in self.status_lines: /home/shire3d/ARMOR/framework/warden_widgets.py:144: self.status_text = "CORE READY" /home/shire3d/ARMOR/framework/warden_widgets.py:179: self.status_text = "CORE FAULT" /home/shire3d/ARMOR/framework/warden_widgets.py:182: self.status_text = "CORE SYNCING" /home/shire3d/ARMOR/framework/warden_widgets.py:185: self.status_text = "FORGE ACTIVE" /home/shire3d/ARMOR/framework/warden_widgets.py:188: self.status_text = "CORE STANDBY" /home/shire3d/ARMOR/framework/warden_widgets.py:191: self.status_text = "CORE READY" /home/shire3d/ARMOR/framework/warden_widgets.py:241: painter.drawText(QRect(18, 13, w - 36, 16), Qt.AlignRight | Qt.AlignVCenter, self.status_text) /home/shire3d/ARMOR/heart/oath.json:11: "I will preserve knowledge, remain truthful about my capabilities, and seek better solutions every day.", /home/shire3d/ARMOR/modules/archive.py:11: status_lines=[ /home/shire3d/ARMOR/modules/atlas.py:11: status_lines=[ /home/shire3d/ARMOR/modules/dashboard.py:187: status_grid = QGridLayout() /home/shire3d/ARMOR/modules/dashboard.py:188: status_grid.setSpacing(4) /home/shire3d/ARMOR/modules/dashboard.py:189: status_grid.setColumnStretch(0, 1) /home/shire3d/ARMOR/modules/dashboard.py:190: status_grid.setColumnStretch(1, 1) /home/shire3d/ARMOR/modules/dashboard.py:192: status_items = [ /home/shire3d/ARMOR/modules/dashboard.py:203: for i, item in enumerate(status_items): /home/shire3d/ARMOR/modules/dashboard.py:206: card.clicked.connect(self.handle_status_tile) /home/shire3d/ARMOR/modules/dashboard.py:208: status_grid.addWidget(card, i // 2, i % 2) /home/shire3d/ARMOR/modules/dashboard.py:214: main.addLayout(status_grid) /home/shire3d/ARMOR/modules/dashboard.py:245: self.health_summary = QLabel() /home/shire3d/ARMOR/modules/dashboard.py:246: self.health_summary.setAlignment(Qt.AlignLeft | Qt.AlignTop) /home/shire3d/ARMOR/modules/dashboard.py:247: self.health_summary.setWordWrap(True) /home/shire3d/ARMOR/modules/dashboard.py:248: self.health_summary.setStyleSheet(f""" /home/shire3d/ARMOR/modules/dashboard.py:257: self.health_summary.setMinimumHeight(115) /home/shire3d/ARMOR/modules/dashboard.py:258: self.health_summary.setText( /home/shire3d/ARMOR/modules/dashboard.py:262: main.addWidget(self.health_summary) /home/shire3d/ARMOR/modules/dashboard.py:345: self.timer.timeout.connect(self.update_status) /home/shire3d/ARMOR/modules/dashboard.py:347: self.update_status() /home/shire3d/ARMOR/modules/dashboard.py:477: status = task.get("status") /home/shire3d/ARMOR/modules/dashboard.py:478: if status == "queued": /home/shire3d/ARMOR/modules/dashboard.py:480: elif status in ["completed", "done"]: /home/shire3d/ARMOR/modules/dashboard.py:482: elif status == "awaiting_approval": /home/shire3d/ARMOR/modules/dashboard.py:523: data.get("auto_status", "Auto cooling: unknown"), /home/shire3d/ARMOR/modules/dashboard.py:614: "Agent worker chain prepared.", /home/shire3d/ARMOR/modules/dashboard.py:633: f"Agent status: {agent_manager.summary()}" /home/shire3d/ARMOR/modules/dashboard.py:636: def handle_status_tile(self, key): /home/shire3d/ARMOR/modules/dashboard.py:670: "Night Forge can queue a demo worker chain.", /home/shire3d/ARMOR/modules/dashboard.py:684: f"Agent status: {agent_manager.summary()}", /home/shire3d/ARMOR/modules/dashboard.py:685: "Agents can prepare worker chains and support Night Forge." /home/shire3d/ARMOR/modules/dashboard.py:715: "Caretaker continues background health checks." /home/shire3d/ARMOR/modules/dashboard.py:733: "Watching temperature, RAM, disk, and core health.", /home/shire3d/ARMOR/modules/dashboard.py:747: def health_colour(self, state): /home/shire3d/ARMOR/modules/dashboard.py:754: def update_health_summary(self, snapshot, caretaker_result): /home/shire3d/ARMOR/modules/dashboard.py:765: auto_cooling_line = cooling.get("auto_status", "Auto cooling: unknown") /home/shire3d/ARMOR/modules/dashboard.py:817: health_state = "critical" /home/shire3d/ARMOR/modules/dashboard.py:821: health_state = "watch" /home/shire3d/ARMOR/modules/dashboard.py:825: health_state = "clear" /home/shire3d/ARMOR/modules/dashboard.py:832: colour = self.health_colour(health_state) /home/shire3d/ARMOR/modules/dashboard.py:834: self.health_summary.setStyleSheet(f""" /home/shire3d/ARMOR/modules/dashboard.py:857: self.health_summary.setText("\n".join(body)) /home/shire3d/ARMOR/modules/dashboard.py:859: def update_status(self): /home/shire3d/ARMOR/modules/dashboard.py:879: self.update_health_summary(s, caretaker_result) /home/shire3d/ARMOR/modules/global_prompt_bar.py:407: if message_type == "status": /home/shire3d/ARMOR/modules/global_prompt_bar.py:558: exit_status, /home/shire3d/ARMOR/modules/global_prompt_bar.py:560: del exit_status /home/shire3d/ARMOR/modules/global_prompt_bar.py:657: worker = getattr( /home/shire3d/ARMOR/modules/global_prompt_bar.py:659: "brain_worker", /home/shire3d/ARMOR/modules/global_prompt_bar.py:664: worker is not None /home/shire3d/ARMOR/modules/global_prompt_bar.py:665: and worker.isRunning() /home/shire3d/ARMOR/modules/laptop_dashboard.py:1002: def _build_status_card(self): /home/shire3d/ARMOR/modules/laptop_dashboard.py:1200: left_column.addWidget(self._build_status_card(), 2) /home/shire3d/ARMOR/modules/media.py:11: status_lines=[ /home/shire3d/ARMOR/modules/sentinel.py:174: self.status_line = QLabel("LIVE DEFENCE BOARD | DEFENSIVE TOOLS ONLY") /home/shire3d/ARMOR/modules/sentinel.py:175: self.status_line.setAlignment(Qt.AlignCenter) /home/shire3d/ARMOR/modules/sentinel.py:176: self.status_line.setStyleSheet(""" /home/shire3d/ARMOR/modules/sentinel.py:182: main.addWidget(self.status_line) /home/shire3d/ARMOR/modules/sentinel.py:292: ("SCAN", self.security_status), /home/shire3d/ARMOR/modules/sentinel.py:293: ("NETWORK", self.network_status), /home/shire3d/ARMOR/modules/sentinel.py:294: ("OPEN PORTS", self.port_status), /home/shire3d/ARMOR/modules/sentinel.py:295: ("TOOLS", self.tool_status), /home/shire3d/ARMOR/modules/sentinel.py:406: self.security_status() /home/shire3d/ARMOR/modules/sentinel.py:556: code, out = self.run_cmd(["ufw", "status"], timeout=4) /home/shire3d/ARMOR/modules/sentinel.py:611: self.status_line.setText(f"SENTINEL LIVE | UFW: {ufw} | FAIL2BAN: {self.fail2ban_state()} | MISSING: {tools_missing}") /home/shire3d/ARMOR/modules/sentinel.py:615: self.network_status() /home/shire3d/ARMOR/modules/sentinel.py:617: self.port_status() /home/shire3d/ARMOR/modules/sentinel.py:619: self.packet_capture_status() /home/shire3d/ARMOR/modules/sentinel.py:621: self.malware_status() /home/shire3d/ARMOR/modules/sentinel.py:623: self.firewall_status() /home/shire3d/ARMOR/modules/sentinel.py:625: self.hardening_status() /home/shire3d/ARMOR/modules/sentinel.py:627: def security_status(self): /home/shire3d/ARMOR/modules/sentinel.py:630: self.log("Security status refreshed.") /home/shire3d/ARMOR/modules/sentinel.py:631: self.tool_status() /home/shire3d/ARMOR/modules/sentinel.py:633: def tool_status(self): /home/shire3d/ARMOR/modules/sentinel.py:661: def network_status(self): /home/shire3d/ARMOR/modules/sentinel.py:666: def port_status(self): /home/shire3d/ARMOR/modules/sentinel.py:672: def packet_capture_status(self): /home/shire3d/ARMOR/modules/sentinel.py:681: def malware_status(self): /home/shire3d/ARMOR/modules/sentinel.py:688: def firewall_status(self): /home/shire3d/ARMOR/modules/sentinel.py:691: code, out = self.run_cmd(["ufw", "status"], timeout=4) /home/shire3d/ARMOR/modules/sentinel.py:692: self.log(out if out else "UFW installed but no status output.") /home/shire3d/ARMOR/modules/sentinel.py:696: def hardening_status(self): /home/shire3d/ARMOR/modules/settings.py:41: self.status = QLabel("Preferences loaded from config/preferences.json") /home/shire3d/ARMOR/modules/settings.py:42: self.status.setAlignment(Qt.AlignCenter) /home/shire3d/ARMOR/modules/settings.py:43: self.status.setStyleSheet(f"color:{AMBER}; font-size:13px; font-weight:bold;") /home/shire3d/ARMOR/modules/settings.py:119: layout.addWidget(self.status) /home/shire3d/ARMOR/modules/settings.py:200: self.status.setText("Preferences loaded.") /home/shire3d/ARMOR/modules/settings.py:206: self.status.setText("Preferences saved to config/preferences.json") /home/shire3d/ARMOR/modules/settings.py:211: self.status.setText("Template values restored. Press SAVE SETTINGS to write runtime preferences.") /home/shire3d/ARMOR/modules/shire.py:83:from sentinel.status import check_system, forge_score /home/shire3d/ARMOR/modules/shire.py:449: # status frame /home/shire3d/ARMOR/modules/shire.py:458: # animated status overlays /home/shire3d/ARMOR/modules/shire.py:526: port = laptop.get("brain_port", 8765) /home/shire3d/ARMOR/modules/shire.py:533: return f"http://100.74.51.32:8765/{endpoint}" /home/shire3d/ARMOR/modules/shire.py:677: "No dead controls. No fake status. ARMOR-only responses.\n" /home/shire3d/ARMOR/modules/shire.py:788: "Git Status": self.action_git_status, /home/shire3d/ARMOR/modules/shire.py:790: "Appliance Status": self.appliance_registry_status, /home/shire3d/ARMOR/modules/shire.py:791: "Laser Status": self.utility_node_status, /home/shire3d/ARMOR/modules/shire.py:802: "View STLs Button Status": lambda: self.shire_append(forge_learning_service.view_stls_button_status()), /home/shire3d/ARMOR/modules/shire.py:882: status = task.get("status", "unknown") /home/shire3d/ARMOR/modules/shire.py:883: if status in ["queued", "running", "awaiting_approval"]: /home/shire3d/ARMOR/modules/shire.py:886: if status in counts: /home/shire3d/ARMOR/modules/shire.py:887: counts[status] += 1 /home/shire3d/ARMOR/modules/shire.py:888: elif status in ["done", "complete"]: /home/shire3d/ARMOR/modules/shire.py:899: status = task.get("status", "unknown") /home/shire3d/ARMOR/modules/shire.py:910: f" Status: {status}\n" /home/shire3d/ARMOR/modules/shire.py:927: def action_git_status(self): /home/shire3d/ARMOR/modules/shire.py:928: code, status = self.run_shell(["git", "status", "--short"]) /home/shire3d/ARMOR/modules/shire.py:934: if status.strip(): /home/shire3d/ARMOR/modules/shire.py:936: self.shire_append(status) /home/shire3d/ARMOR/modules/shire.py:1008: if task.get("type") == "night_forge" and task.get("status") in ["queued", "running", "awaiting_approval"]: /home/shire3d/ARMOR/modules/shire.py:1009: task["status"] = "completed" /home/shire3d/ARMOR/modules/shire.py:1031: code, git_status = self.run_shell(["git", "status", "--short"]) /home/shire3d/ARMOR/modules/shire.py:1055: "git_status": git_status, /home/shire3d/ARMOR/modules/shire.py:1056: "git_dirty": bool(git_status.strip()), /home/shire3d/ARMOR/modules/shire.py:1075: "do": "Review git status, compile, then commit or restore runtime files.", /home/shire3d/ARMOR/modules/shire.py:1258: "why": "ARMOR should offer safe restart, service status, display checks, and repair commands from one place.", /home/shire3d/ARMOR/modules/shire.py:1395: self.shire_append("Do not patch. Review git status, compile, then commit or restore first.") /home/shire3d/ARMOR/modules/shire.py:1467: code_status, git_status = self.run_shell(["git", "status", "--short"]) /home/shire3d/ARMOR/modules/shire.py:1502: f"- Auto Cooling: {cooling.get('auto_status', 'unknown')}", /home/shire3d/ARMOR/modules/shire.py:1503: f"- Cooling Preference: {cooling.get('preference_status', 'unknown')}", /home/shire3d/ARMOR/modules/shire.py:1531: if git_status.strip(): /home/shire3d/ARMOR/modules/shire.py:1533: journal_lines.append(git_status) /home/shire3d/ARMOR/modules/shire.py:1592: def add(status, name, detail, fix): /home/shire3d/ARMOR/modules/shire.py:1594: "status": status, /home/shire3d/ARMOR/modules/shire.py:1637: code, ollama = self.run_shell([str(venv_python), "-c", "import ollama; print('ollama OK')"]) if venv_python.exists() else (1, "") /home/shire3d/ARMOR/modules/shire.py:1641: ollama or "ollama import failed.", /home/shire3d/ARMOR/modules/shire.py:1642: "Install ollama in the ARMOR venv or keep AI service in standby." /home/shire3d/ARMOR/modules/shire.py:1650: cooling.get("summary", "Cooling HAT status unknown."), /home/shire3d/ARMOR/modules/shire.py:1655: "PASS" if cooling.get("auto_status") else "WARN", /home/shire3d/ARMOR/modules/shire.py:1656: "Auto cooling status", /home/shire3d/ARMOR/modules/shire.py:1657: cooling.get("auto_status", "Auto cooling status unavailable."), /home/shire3d/ARMOR/modules/shire.py:1700: # System health /home/shire3d/ARMOR/modules/shire.py:1731: pass_count = len([c for c in checks if c["status"] == "PASS"]) /home/shire3d/ARMOR/modules/shire.py:1732: warn_count = len([c for c in checks if c["status"] == "WARN"]) /home/shire3d/ARMOR/modules/shire.py:1733: fail_count = len([c for c in checks if c["status"] == "FAIL"]) /home/shire3d/ARMOR/modules/shire.py:1753: f"{i}. [{check['status']}] {check['name']}\n" /home/shire3d/ARMOR/modules/shire.py:1767: fail = [c for c in checks if c["status"] == "FAIL"] /home/shire3d/ARMOR/modules/shire.py:1768: warn = [c for c in checks if c["status"] == "WARN"] /home/shire3d/ARMOR/modules/shire.py:1800: code, git_status = self.run_shell(["git", "status", "--short"]) /home/shire3d/ARMOR/modules/shire.py:1804: dirty = bool(git_status.strip()) /home/shire3d/ARMOR/modules/shire.py:1893: def system_status(self): /home/shire3d/ARMOR/modules/shire.py:1964: "brain_port": 8765, /home/shire3d/ARMOR/modules/shire.py:2035: def shire_brain_url(self, endpoint="health"): /home/shire3d/ARMOR/modules/shire.py:2039: port = laptop.get("brain_port", 8765) /home/shire3d/ARMOR/modules/shire.py:2215: def appliance_registry_status(self): /home/shire3d/ARMOR/modules/shire.py:2216: """ENG-UTIL-0003A / ENG-UTIL-0004A: SHIRE appliance registry status view.""" /home/shire3d/ARMOR/modules/shire.py:2260: with urllib.request.urlopen(self.shire_brain_url("health"), timeout=3) as response: /home/shire3d/ARMOR/modules/shire.py:2429: """ENG-UTIL-0002A / ENG-UTIL-0004A: Fast laptop-side SHIRE Laser / Node health poll.""" /home/shire3d/ARMOR/modules/shire.py:2486: def utility_node_status(self): /home/shire3d/ARMOR/modules/shire.py:2487: """ENG-UTIL-0001A / ENG-UTIL-0004A: Laptop-side SHIRE Utility Node / Laser status.""" /home/shire3d/ARMOR/modules/shire.py:2524: self.shire_append("ℹ Pi can confirm printer service is reachable, but laptop holds the secure full-status SSH key.") /home/shire3d/ARMOR/modules/shire.py:2597: self.shire_append("\nRaw status:") /home/shire3d/ARMOR/modules/shire.py:2635: """ENG-TAIL-0004A: Fast laptop brain health poll over Tailscale.""" /home/shire3d/ARMOR/modules/shire.py:2637: with urllib.request.urlopen(self.shire_brain_url("health"), timeout=2) as response: /home/shire3d/ARMOR/modules/shire.py:2652: def shire_brain_status(self): /home/shire3d/ARMOR/modules/shire.py:2653: """ENG-TAIL-0002D: Fast laptop brain health check only.""" /home/shire3d/ARMOR/modules/shire.py:2658: with urllib.request.urlopen(self.shire_brain_url("health"), timeout=4) as response: /home/shire3d/ARMOR/modules/shire.py:2688: if getattr(self, "brain_worker", None) is not None and self.brain_worker.isRunning(): /home/shire3d/ARMOR/modules/shire.py:2715: self.brain_worker = ShireBrainAskWorker(prompt, self) /home/shire3d/ARMOR/modules/shire.py:2716: self.brain_worker.done.connect(self.on_laptop_brain_done) /home/shire3d/ARMOR/modules/shire.py:2717: self.brain_worker.finished.connect(self.on_laptop_brain_finished) /home/shire3d/ARMOR/modules/shire.py:2718: self.brain_worker.start() /home/shire3d/ARMOR/modules/shire.py:2731: self.brain_worker = None /home/shire3d/ARMOR/modules/shire.py:2822: "My job is to support ARMOR OS, track tasks, help with security, guide builds, keep logs, and make the system easier to control." /home/shire3d/ARMOR/modules/shire.py:2846: "No false status. No drift. Ready for build work." /home/shire3d/ARMOR/modules/shire.py:3148: self.appliance_registry_status() /home/shire3d/ARMOR/modules/shire.py:3152: self.utility_node_status() /home/shire3d/ARMOR/modules/shire.py:3156: self.shire_brain_status() /home/shire3d/ARMOR/modules/shire.py:3160: self.shire_brain_status() /home/shire3d/ARMOR/modules/shire.py:3168: self.appliance_registry_status() /home/shire3d/ARMOR/modules/shire.py:3172: self.utility_node_status() /home/shire3d/ARMOR/modules/shire.py:3209: self.shire_append(forge_learning_service.blender_status_report()) /home/shire3d/ARMOR/modules/shire.py:3372: # ENG-BLENDER-0001D-D: background Blender job log/report layer. /home/shire3d/ARMOR/modules/shire.py:3375: self.shire_append(forge_learning_service.blender_background_job_rules()) /home/shire3d/ARMOR/modules/shire.py:3379: self.shire_append(forge_learning_service.rebuild_blender_background_job_log()) /home/shire3d/ARMOR/modules/shire.py:3383: self.shire_append(forge_learning_service.background_blender_jobs_report()) /home/shire3d/ARMOR/modules/shire.py:3387: job_id = cmd.replace("SHOW BACKGROUND BLENDER JOB", "", 1).strip() /home/shire3d/ARMOR/modules/shire.py:3388: self.shire_append(forge_learning_service.show_background_blender_job(job_id)) /home/shire3d/ARMOR/modules/shire.py:3421: # ENG-BLENDER-0001E-B: read-only View STLs launcher/button status. /home/shire3d/ARMOR/modules/shire.py:3424: self.shire_append(forge_learning_service.view_stls_button_status()) /home/shire3d/ARMOR/modules/shire.py:3660: "Use BRAIN STATUS for live brain health." /home/shire3d/ARMOR/modules/shire.py:3694: self.shire_append(security_service.status_report()) /home/shire3d/ARMOR/modules/shire.py:3715: self.action_git_status() /home/shire3d/ARMOR/modules/shire.py:3739: self.system_status() /home/shire3d/ARMOR/modules/shire.py:3850: "• Sentinel status installed.\n" /home/shire3d/ARMOR/modules/system.py:26: status = QLabel("MODULE STATUS: ONLINE") /home/shire3d/ARMOR/modules/system.py:27: status.setAlignment(Qt.AlignCenter) /home/shire3d/ARMOR/modules/system.py:28: status.setStyleSheet(f"color:{GREEN}; font-size:14px; font-weight:bold;") /home/shire3d/ARMOR/modules/system.py:47: ("NETWORK STATUS", self.network_status, GREEN), /home/shire3d/ARMOR/modules/system.py:96: "Safe Status": self.safe_status, /home/shire3d/ARMOR/modules/system.py:121: layout.addWidget(status) /home/shire3d/ARMOR/modules/system.py:144: def safe_status(self): /home/shire3d/ARMOR/modules/system.py:199: status = subprocess.check_output( /home/shire3d/ARMOR/modules/system.py:200: ["git", "-C", str(Path(__file__).resolve().parent.parent), "status", "--short"], /home/shire3d/ARMOR/modules/system.py:211: if status: /home/shire3d/ARMOR/modules/system.py:216: f"{status}\n" /home/shire3d/ARMOR/modules/system.py:234: "5. Check Git before patching: git status --short\n" /home/shire3d/ARMOR/modules/system.py:253: def network_status(self): /home/shire3d/ARMOR/modules/tasks.py:206: lines.append("SHIRE is not actively forging a job right now.") /home/shire3d/ARMOR/modules/tasks.py:241: status = self.safe_text(task.get("status"), "queued").upper() /home/shire3d/ARMOR/modules/tasks.py:248: f"Status: {status}\n" /home/shire3d/ARMOR/modules/tasks.py:255: self.list_layout.addWidget(TaskCard(title, body, task.get("status", "queued"))) /home/shire3d/ARMOR/modules/tasks.py:260: queued = [t for t in tasks if t.get("status") == "queued"] /home/shire3d/ARMOR/modules/tasks.py:261: running = [t for t in tasks if t.get("status") == "running"] /home/shire3d/ARMOR/modules/tasks.py:264: if t.get("status") == "awaiting_approval" /home/shire3d/ARMOR/modules/tasks.py:268: and t.get("status") not in ["completed", "done", "failed"] /home/shire3d/ARMOR/modules/tasks.py:272: completed = [t for t in tasks if t.get("status") in ["completed", "done"]] /home/shire3d/ARMOR/modules/tasks.py:319: self.add_empty_card("No queued jobs.") /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:28: base = os.environ.get("SHIRE_BRAIN_URL", "http://127.0.0.1:8765").rstrip("/") /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:43: if parsed.port != 8765: /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:44: raise QuestionWorkflowError("SHIRE Brain URL must use the locked private port 8765") /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:99: exc.reason or "no response detail" /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:108: f"SHIRE Brain connection failed: {exc.reason}" /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:149: capabilities = route.get("capabilities") /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:152: not isinstance(capabilities, dict) /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:153: or not capabilities /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:156: for value in capabilities.values() /home/shire3d/ARMOR/scripts/blender_mastery_questions.py:160: "SHIRE Brain returned an unsafe capability manifest" /home/shire3d/ARMOR/scripts/shire_live_transcribe.py:127: "status", /home/shire3d/ARMOR/scripts/shire_live_transcribe.py:161: "status", /home/shire3d/ARMOR/scripts/shire_live_transcribe.py:257: "status", /home/shire3d/ARMOR/sentinel/status.py:28: ollama = _run(["ollama", "list"]) /home/shire3d/ARMOR/sentinel/status.py:29: if ollama and ollama.returncode == 0: /home/shire3d/ARMOR/sentinel/status.py:55: "Sentinel": Path("/home/shire3d/ARMOR/sentinel/status.py").exists(), /home/shire3d/ARMOR/services/ai_service.py:11: self.status = "ONLINE" /home/shire3d/ARMOR/services/ai_service.py:34: return f"http://{address}:8765" /home/shire3d/ARMOR/services/ai_service.py:38: return "http://127.0.0.1:8765" /home/shire3d/ARMOR/services/ai_service.py:73: self.status = "ONLINE" /home/shire3d/ARMOR/services/ai_service.py:80: self.status = "ERROR" /home/shire3d/ARMOR/services/ai_service.py:83: def status_report(self): /home/shire3d/ARMOR/services/ai_service.py:87: "status": self.status, /home/shire3d/ARMOR/services/blender_brain_contract.py:43:def prepare_route( /home/shire3d/ARMOR/services/blender_brain_contract.py:71: "capabilities": copy.deepcopy(DENIED_CAPABILITIES), /home/shire3d/ARMOR/services/blender_mastery_commands.py:29: "Current capability: request recording and project inspection only.\n" /home/shire3d/ARMOR/services/blender_mastery_state.py:135: "physical_x11_status": "DEFERRED_SSH_ONLY", /home/shire3d/ARMOR/services/blender_mastery_state.py:190: "physical_x11_status": "DEFERRED_SSH_ONLY", /home/shire3d/ARMOR/services/blender_mastery_state.py:273: approval["invalidation_reason"] = f"artifact changed: {kind}" /home/shire3d/ARMOR/services/blender_mastery_state.py:420:def create_job_manifest( /home/shire3d/ARMOR/services/blender_mastery_state.py:422: job_id: str, /home/shire3d/ARMOR/services/blender_mastery_state.py:430: job_id = str(job_id).strip().upper() /home/shire3d/ARMOR/services/blender_mastery_state.py:432: if not JOB_ID_RE.fullmatch(job_id): /home/shire3d/ARMOR/services/blender_mastery_state.py:433: raise MasteryError("job_id must match BMJ-XXXX") /home/shire3d/ARMOR/services/blender_mastery_state.py:444: "schema": "shire.blender_mastery.job.v1", /home/shire3d/ARMOR/services/blender_mastery_state.py:445: "job_id": job_id, /home/shire3d/ARMOR/services/blender_mastery_state.py:476:def review_job(job: dict, observed_script_sha256: str) -> dict: /home/shire3d/ARMOR/services/blender_mastery_state.py:477: if job.get("lifecycle") != "PREPARE": /home/shire3d/ARMOR/services/blender_mastery_state.py:478: raise TransitionError("job review requires PREPARE") /home/shire3d/ARMOR/services/blender_mastery_state.py:479: if observed_script_sha256 != job.get("script_sha256"): /home/shire3d/ARMOR/services/blender_mastery_state.py:481: job["lifecycle"] = "REVIEW" /home/shire3d/ARMOR/services/blender_mastery_state.py:482: job["reviewed_script_sha256"] = observed_script_sha256 /home/shire3d/ARMOR/services/blender_mastery_state.py:483: return job /home/shire3d/ARMOR/services/blender_mastery_state.py:486:def approve_job(job: dict, actor: str, expected_script_sha256: str) -> dict: /home/shire3d/ARMOR/services/blender_mastery_state.py:488: raise ApprovalError("only Ray Morrison may approve jobs") /home/shire3d/ARMOR/services/blender_mastery_state.py:489: if job.get("lifecycle") != "REVIEW": /home/shire3d/ARMOR/services/blender_mastery_state.py:490: raise TransitionError("job approval requires REVIEW") /home/shire3d/ARMOR/services/blender_mastery_state.py:491: if expected_script_sha256 != job.get("script_sha256"): /home/shire3d/ARMOR/services/blender_mastery_state.py:493: job["lifecycle"] = "APPROVE" /home/shire3d/ARMOR/services/blender_mastery_state.py:494: job["approval"] = { /home/shire3d/ARMOR/services/blender_mastery_state.py:497: "approved_project_revision": job["approved_project_revision"], /home/shire3d/ARMOR/services/blender_mastery_state.py:500: return job /home/shire3d/ARMOR/services/blender_mastery_state.py:503:def run_job(*_args, **_kwargs): /home/shire3d/ARMOR/services/caretaker_service.py:79: "status", /home/shire3d/ARMOR/services/caretaker_service.py:111: "status", /home/shire3d/ARMOR/services/forge_learning_service.py:214: "status": "awaiting_ray_approval", /home/shire3d/ARMOR/services/forge_learning_service.py:263: plan["status"] = "approved_learning_plan" /home/shire3d/ARMOR/services/forge_learning_service.py:272: f"Status: {plan.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:285: plan["status"] = "approved_learning_plan" /home/shire3d/ARMOR/services/forge_learning_service.py:292: f"Status: {plan.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:311: plan["status"] = "rejected_by_ray" /home/shire3d/ARMOR/services/forge_learning_service.py:318: f"Status: {plan.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:339: f"Status: {plan.get('status')}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:414: if not plan.get("approved") or plan.get("status") != "approved_learning_plan": /home/shire3d/ARMOR/services/forge_learning_service.py:418: f"Status: {plan.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:437: "status": "sandbox_learning_pack_created", /home/shire3d/ARMOR/services/forge_learning_service.py:590: plan["status"] = "sandbox_learning_pack_created" /home/shire3d/ARMOR/services/forge_learning_service.py:602: f"Status: {plan.get('status')}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:635: f"Status: {plan.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:642: f"Status: {plan.get('status')}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:714: def blender_status_report(self): /home/shire3d/ARMOR/services/forge_learning_service.py:953: "status": "learning_mode_not_automation", /home/shire3d/ARMOR/services/forge_learning_service.py:1336: "status": "draft_text_only_not_approved", /home/shire3d/ARMOR/services/forge_learning_service.py:1393: lines.append(f"{item.get('id')} | {item.get('status')} | {item.get('goal')}") /home/shire3d/ARMOR/services/forge_learning_service.py:1438: f"Status: {item.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:1599: f"Status: {existing.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:1697: "status": "awaiting_ray_plan_approval", /home/shire3d/ARMOR/services/forge_learning_service.py:1759: f"{item.get('id')} | {item.get('status')} | " /home/shire3d/ARMOR/services/forge_learning_service.py:1796: f"Status: {item.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:1851: item["status"] = "ray_plan_approved_no_execution" /home/shire3d/ARMOR/services/forge_learning_service.py:1886: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:1911: item["status"] = "ray_rejected_no_execution" /home/shire3d/ARMOR/services/forge_learning_service.py:2068: f"Status: {existing.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:2149: "# Current status:", /home/shire3d/ARMOR/services/forge_learning_service.py:2168: "status": "awaiting_ray_headless_request_approval", /home/shire3d/ARMOR/services/forge_learning_service.py:2234: f"{item.get('id')} | {item.get('status')} | " /home/shire3d/ARMOR/services/forge_learning_service.py:2272: f"Status: {item.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:2329: item["status"] = "ray_headless_request_approved_execution_still_blocked" /home/shire3d/ARMOR/services/forge_learning_service.py:2366: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:2391: item["status"] = "ray_rejected_no_execution" /home/shire3d/ARMOR/services/forge_learning_service.py:2563: f"Status: {existing.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:2600: " 'status=HEADLESS_BLENDER_PROBE_OK',", /home/shire3d/ARMOR/services/forge_learning_service.py:2679: "- Autonomous jobs.", /home/shire3d/ARMOR/services/forge_learning_service.py:2692: "status": "awaiting_ray_probe_approval", /home/shire3d/ARMOR/services/forge_learning_service.py:2763: f"{item.get('id')} | {item.get('status')} | " /home/shire3d/ARMOR/services/forge_learning_service.py:2802: f"Status: {item.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:2862: item["status"] = "ray_probe_approved_ready_for_manual_run_command" /home/shire3d/ARMOR/services/forge_learning_service.py:2904: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:2930: item["status"] = "ray_rejected_no_probe_run" /home/shire3d/ARMOR/services/forge_learning_service.py:3016: item["status"] = "probe_running" /home/shire3d/ARMOR/services/forge_learning_service.py:3041: item["status"] = "probe_complete_success" if exit_code == 0 else "probe_complete_failed" /home/shire3d/ARMOR/services/forge_learning_service.py:3058: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3072: # ENG-BLENDER-0001D-D: background Blender job log/report layer. /home/shire3d/ARMOR/services/forge_learning_service.py:3073: # This creates SHIRE-readable job history from completed headless probes. /home/shire3d/ARMOR/services/forge_learning_service.py:3076: def blender_background_jobs_dir(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3077: return self.data_dir / "blender_background_jobs" /home/shire3d/ARMOR/services/forge_learning_service.py:3079: def blender_background_job_registry_path(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3080: return self.blender_background_jobs_dir() / "background_job_registry.json" /home/shire3d/ARMOR/services/forge_learning_service.py:3082: def ensure_blender_background_job_registry(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3085: root = self.blender_background_jobs_dir() /home/shire3d/ARMOR/services/forge_learning_service.py:3087: path = self.blender_background_job_registry_path() /home/shire3d/ARMOR/services/forge_learning_service.py:3089: path.write_text(json.dumps({"jobs": []}, indent=2) + "\n", encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3092: def load_blender_background_job_registry(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3095: path = self.ensure_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3099: return {"jobs": []} /home/shire3d/ARMOR/services/forge_learning_service.py:3101: def save_blender_background_job_registry(self, data): /home/shire3d/ARMOR/services/forge_learning_service.py:3104: self.ensure_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3105: self.blender_background_job_registry_path().write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3107: def next_blender_background_job_id(self, data): /home/shire3d/ARMOR/services/forge_learning_service.py:3109: for item in data.get("jobs", []): /home/shire3d/ARMOR/services/forge_learning_service.py:3110: job_id = item.get("id", "") /home/shire3d/ARMOR/services/forge_learning_service.py:3111: if job_id.startswith("BBJ-"): /home/shire3d/ARMOR/services/forge_learning_service.py:3113: highest = max(highest, int(job_id.split("-", 1)[1])) /home/shire3d/ARMOR/services/forge_learning_service.py:3118: def find_blender_background_job(self, job_id): /home/shire3d/ARMOR/services/forge_learning_service.py:3119: job_id = (job_id or "").strip().upper() /home/shire3d/ARMOR/services/forge_learning_service.py:3120: data = self.load_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3121: for item in data.get("jobs", []): /home/shire3d/ARMOR/services/forge_learning_service.py:3122: if item.get("id", "").upper() == job_id: /home/shire3d/ARMOR/services/forge_learning_service.py:3126: def blender_background_job_rules(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3131: "- Convert completed probe records into SHIRE-readable job reports.\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3134: "- Refresh the background Blender job log from probe records.\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3135: "- Show a job history list.\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3136: "- Show one detailed job report.\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3140: "- Running probes/jobs: BLOCKED.\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3153: def rebuild_blender_background_job_log(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3158: data = self.load_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3159: jobs = data.setdefault("jobs", []) /home/shire3d/ARMOR/services/forge_learning_service.py:3162: for job in jobs: /home/shire3d/ARMOR/services/forge_learning_service.py:3163: probe_id = job.get("source_probe_id") /home/shire3d/ARMOR/services/forge_learning_service.py:3165: existing_by_probe[probe_id] = job /home/shire3d/ARMOR/services/forge_learning_service.py:3193: status = probe.get("status") /home/shire3d/ARMOR/services/forge_learning_service.py:3196: status == "probe_complete_success" /home/shire3d/ARMOR/services/forge_learning_service.py:3198: and "status=HEADLESS_BLENDER_PROBE_OK" in result_text /home/shire3d/ARMOR/services/forge_learning_service.py:3202: job = existing_by_probe[probe_id] /home/shire3d/ARMOR/services/forge_learning_service.py:3205: job = { /home/shire3d/ARMOR/services/forge_learning_service.py:3206: "id": self.next_blender_background_job_id(data), /home/shire3d/ARMOR/services/forge_learning_service.py:3212: jobs.append(job) /home/shire3d/ARMOR/services/forge_learning_service.py:3213: existing_by_probe[probe_id] = job /home/shire3d/ARMOR/services/forge_learning_service.py:3216: job_dir = self.blender_background_jobs_dir() / f"{job.get('id')}_from_{probe_id}" /home/shire3d/ARMOR/services/forge_learning_service.py:3217: job_dir.mkdir(parents=True, exist_ok=True) /home/shire3d/ARMOR/services/forge_learning_service.py:3219: job.update({ /home/shire3d/ARMOR/services/forge_learning_service.py:3221: "status": "complete_success" if ok else "complete_needs_review", /home/shire3d/ARMOR/services/forge_learning_service.py:3227: "probe_status": status, /home/shire3d/ARMOR/services/forge_learning_service.py:3229: "path": str(job_dir), /home/shire3d/ARMOR/services/forge_learning_service.py:3248: f"# Background Blender Job Report — {job.get('id')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3253: f"Status: {job.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3277: (job_dir / "README.md").write_text("\n".join(report_lines), encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3278: (job_dir / "result_report.md").write_text("\n".join(report_lines), encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3279: (job_dir / "manifest.json").write_text(json.dumps(job, indent=2) + "\n", encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3282: (job_dir / "probe_stdout_snapshot.txt").write_text(stdout_text[-4000:], encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3284: (job_dir / "probe_stderr_snapshot.txt").write_text(stderr_text[-4000:], encoding="utf-8") /home/shire3d/ARMOR/services/forge_learning_service.py:3286: self.save_blender_background_job_registry(data) /home/shire3d/ARMOR/services/forge_learning_service.py:3290: f"Created jobs: {created}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3291: f"Updated jobs: {updated}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3293: f"Location: {self.blender_background_jobs_dir()}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3301: def background_blender_jobs_report(self): /home/shire3d/ARMOR/services/forge_learning_service.py:3302: data = self.load_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3303: jobs = data.get("jobs", []) /home/shire3d/ARMOR/services/forge_learning_service.py:3305: if not jobs: /home/shire3d/ARMOR/services/forge_learning_service.py:3315: f"Location: {self.blender_background_jobs_dir()}", /home/shire3d/ARMOR/services/forge_learning_service.py:3319: for job in jobs: /home/shire3d/ARMOR/services/forge_learning_service.py:3321: f"{job.get('id')} | {job.get('status')} | " /home/shire3d/ARMOR/services/forge_learning_service.py:3322: f"probe {job.get('source_probe_id')} | exit={job.get('probe_exit_code')}" /home/shire3d/ARMOR/services/forge_learning_service.py:3324: lines.append(f" Goal: {job.get('source_goal')}") /home/shire3d/ARMOR/services/forge_learning_service.py:3325: lines.append(f" Summary: {job.get('summary')}") /home/shire3d/ARMOR/services/forge_learning_service.py:3338: def show_background_blender_job(self, job_id): /home/shire3d/ARMOR/services/forge_learning_service.py:3341: data, job = self.find_blender_background_job(job_id) /home/shire3d/ARMOR/services/forge_learning_service.py:3342: if not job: /home/shire3d/ARMOR/services/forge_learning_service.py:3345: f"No job found for: {job_id}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:3346: "Use BACKGROUND BLENDER JOBS to view jobs." /home/shire3d/ARMOR/services/forge_learning_service.py:3349: job_dir = Path(job.get("path", "")) /home/shire3d/ARMOR/services/forge_learning_service.py:3350: report_file = job_dir / "result_report.md" /home/shire3d/ARMOR/services/forge_learning_service.py:3355: f"ID: {job.get('id')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3356: f"Status: {job.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3357: f"Source probe: {job.get('source_probe_id')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3358: f"Source goal: {job.get('source_goal')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3359: f"Exit code: {job.get('probe_exit_code')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3360: f"Background Blender confirmed: {job.get('background_blender_confirmed')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3361: f"Location: {job_dir}", /home/shire3d/ARMOR/services/forge_learning_service.py:3364: f"- Blender GUI opened: {job.get('blender_gui_opened')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3365: f"- BlenderMCP used: {job.get('blender_mcp_used')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3366: f"- Draft script executed: {job.get('draft_script_executed')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3367: f"- Rendering used: {job.get('rendering_used')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3368: f"- Export used: {job.get('export_used')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3369: f"- STL created: {job.get('stl_created')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3370: f"- Model generation used: {job.get('model_generation_used')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3371: f"- Autonomous queue used: {job.get('autonomous_queue_used')}", /home/shire3d/ARMOR/services/forge_learning_service.py:3384: data = self.load_blender_background_job_registry() /home/shire3d/ARMOR/services/forge_learning_service.py:3385: jobs = data.get("jobs", []) /home/shire3d/ARMOR/services/forge_learning_service.py:3387: if not jobs: /home/shire3d/ARMOR/services/forge_learning_service.py:3393: latest = jobs[-1] /home/shire3d/ARMOR/services/forge_learning_service.py:3394: return self.show_background_blender_job(latest.get("id")) /home/shire3d/ARMOR/services/forge_learning_service.py:3743: def view_stls_button_status(self): /home/shire3d/ARMOR/services/forge_learning_service.py:4180: "status": "draft_not_certified", /home/shire3d/ARMOR/services/forge_learning_service.py:4201: "status": "draft_not_certified", /home/shire3d/ARMOR/services/forge_learning_service.py:4280: "status": source.get("status", ""), /home/shire3d/ARMOR/services/forge_learning_service.py:4372: block.append(f"Status: {source['status']}") /home/shire3d/ARMOR/services/forge_learning_service.py:4412: manifest["status"] = "training_notes_created_not_certified" /home/shire3d/ARMOR/services/forge_learning_service.py:4470: f"- Status: {manifest.get('status', 'unknown')}", /home/shire3d/ARMOR/services/forge_learning_service.py:4533: f"[{skill.get('status', 'draft_not_certified')}]" /home/shire3d/ARMOR/services/forge_learning_service.py:4675: "status": "awaiting_ray_approval", /home/shire3d/ARMOR/services/forge_learning_service.py:4743: lines.append(f"{item.get('id')} | {item.get('status')} | {item.get('topic')}") /home/shire3d/ARMOR/services/forge_learning_service.py:4767: f"Status: {item.get('status')}\n" /home/shire3d/ARMOR/services/forge_learning_service.py:4795: item["status"] = "approved_research_plan" /home/shire3d/ARMOR/services/forge_learning_service.py:4839: item["status"] = "rejected_or_delayed" /home/shire3d/ARMOR/services/forge_learning_service.py:4922: f"Status: {item.get('status')}", /home/shire3d/ARMOR/services/forge_learning_service.py:5060: return "", f"url_error_{str(exc.reason)[:80]}" /home/shire3d/ARMOR/services/forge_learning_service.py:5185: allowed_statuses = ["approved_research_plan", "research_completed"] /home/shire3d/ARMOR/services/forge_learning_service.py:5186: if not item.get("approved") or item.get("status") not in allowed_statuses: /home/shire3d/ARMOR/services/forge_learning_service.py:5190: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:5203: links, status = self.search_public_web(query, limit=item.get("max_search_results", 6)) /home/shire3d/ARMOR/services/forge_learning_service.py:5210: status = f"{status}_fallback_sources_used" /home/shire3d/ARMOR/services/forge_learning_service.py:5215: "status": status, /home/shire3d/ARMOR/services/forge_learning_service.py:5231: text, status = self.fetch_web_text(url) /home/shire3d/ARMOR/services/forge_learning_service.py:5235: "status": status, /home/shire3d/ARMOR/services/forge_learning_service.py:5236: "readable": bool(excerpt and status == "ok"), /home/shire3d/ARMOR/services/forge_learning_service.py:5240: if excerpt and status == "ok": /home/shire3d/ARMOR/services/forge_learning_service.py:5277: report_lines.append(f"{index}. {page['url']} — {page['status']}") /home/shire3d/ARMOR/services/forge_learning_service.py:5284: report_lines.append(f"Status: {page['status']}") /home/shire3d/ARMOR/services/forge_learning_service.py:5308: "status": "research_completed", /home/shire3d/ARMOR/services/forge_learning_service.py:5323: item["status"] = "research_completed" /home/shire3d/ARMOR/services/forge_learning_service.py:5365: f"Status: {item.get('status')}\n\n" /home/shire3d/ARMOR/services/forge_learning_service.py:5383: status = str(plan.get("status", "")).strip() /home/shire3d/ARMOR/services/forge_learning_service.py:5385: if status == "certified_skill": /home/shire3d/ARMOR/services/forge_learning_service.py:5387: if status == "mastery_candidate": /home/shire3d/ARMOR/services/forge_learning_service.py:5389: if status == "sandbox_learning_pack_created": /home/shire3d/ARMOR/services/forge_learning_service.py:5391: if status == "approved_learning_plan": /home/shire3d/ARMOR/services/forge_learning_service.py:5393: if status == "awaiting_ray_approval": /home/shire3d/ARMOR/services/forge_learning_service.py:5395: if status == "rejected_by_ray": /home/shire3d/ARMOR/services/forge_learning_service.py:5427: status = str(plan.get("status", "")).strip() /home/shire3d/ARMOR/services/forge_learning_service.py:5429: if status == "awaiting_ray_approval": /home/shire3d/ARMOR/services/forge_learning_service.py:5432: elif status == "approved_learning_plan": /home/shire3d/ARMOR/services/forge_learning_service.py:5435: elif status == "sandbox_learning_pack_created": /home/shire3d/ARMOR/services/forge_learning_service.py:5438: elif status == "certified_skill": /home/shire3d/ARMOR/services/forge_learning_service.py:5441: elif status == "rejected_by_ray": /home/shire3d/ARMOR/services/forge_learning_service.py:5448: "status": status or "unknown", /home/shire3d/ARMOR/services/forge_learning_service.py:5495: lines.append(f"{item.get('id')} | {item.get('status')} | {item.get('request')}") /home/shire3d/ARMOR/services/security_service.py:87: def status_report(self): /home/shire3d/ARMOR/services/security_service.py:124: ufw_code, ufw = self.run_cmd(["ufw", "status"], timeout=2) /home/shire3d/ARMOR/services/security_service.py:206: "sudo fail2ban-client status\n" /home/shire3d/ARMOR/services/security_service.py:207: "sudo fail2ban-client status sshd\n" /home/shire3d/ARMOR/services/security_service.py:219: "sudo ufw status verbose\n" /home/shire3d/ARMOR/services/security_service.py:241: "1. SECURITY STATUS — overall health.\n" /home/shire3d/ARMOR/services/security_service.py:280: "• SECURITY STATUS — live defence status\n" /home/shire3d/ARMOR/services/sound.py:3: self.status = "STANDBY" /home/shire3d/ARMOR/services/system_monitor.py:40:def get_status_line(): /home/shire3d/ARMOR/tests/parametric_forge/test_calibration_cube.py:28: assert report["status"] == "PASS" /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:18: route = prepare_route("questions", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:24: route = prepare_route("modelling_plan", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:29: def test_every_capability_is_denied(self): /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:30: route = prepare_route("design_brief", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:31: self.assertTrue(route["capabilities"]) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:32: self.assertTrue(all(value is False for value in route["capabilities"].values())) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:36: prepare_route("run_blender", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:40: prepare_route("questions", "BMP-1", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:42: prepare_route("questions", "BMP-0001", 0, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:44: prepare_route("questions", "BMP-0001", 2, "bad") /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:46: def test_returned_capabilities_are_defensive_copies(self): /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:47: first = prepare_route("summary", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:48: first["capabilities"]["export_allowed"] = True /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:49: second = prepare_route("summary", "BMP-0001", 2, DIGEST) /home/shire3d/ARMOR/tests/test_blender_brain_contract.py:50: self.assertFalse(second["capabilities"]["export_allowed"]) /home/shire3d/ARMOR/tests/test_blender_mastery_questions_cli.py:16: self.assertEqual(CLI.private_brain_url(), "http://127.0.0.1:8765") /home/shire3d/ARMOR/tests/test_blender_mastery_questions_cli.py:23: CLI.os.environ["SHIRE_BRAIN_URL"] = "http://8.8.8.8:8765" /home/shire3d/ARMOR/tests/test_blender_mastery_service.py:183: def test_no_runtime_capability_is_enabled(self): /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:33: self.assertEqual(policy["physical_x11_status"], "DEFERRED_SSH_ONLY") /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:103: def test_candidate_job_can_never_run(self): /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:105: job = mastery.create_job_manifest( /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:109: mastery.review_job(job, digest) /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:110: mastery.approve_job(job, mastery.AUTHORITY, digest) /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:112: mastery.run_job(job) /home/shire3d/ARMOR/tests/test_blender_mastery_state.py:116: mastery.create_job_manifest(