Skip to content

docs: overhaul README with badges + add privacy policy#13

Merged
joeVenner merged 2 commits into
mainfrom
fix/post-merge-polish
Apr 21, 2026
Merged

docs: overhaul README with badges + add privacy policy#13
joeVenner merged 2 commits into
mainfrom
fix/post-merge-polish

Conversation

@joeVenner
Copy link
Copy Markdown
Contributor

Summary

Post-merge polish after PR #12. Adds an impressive README overhaul and a privacy policy document.

What's New

  • README overhaul:

    • Centered tagline + 6 shields/badges (PyPI, Python versions, CI, Coverage, License, Privacy)
    • "What is iotcli?" section with key principles
    • New Demo section showing list, status, and --json output
    • Architecture overview with directory tree and design decisions
    • Expanded AI Agent Integration (skill files, MCP server, agent workflow)
    • Security section now links to PRIVACY.md
  • PRIVACY.md:

    • Local-only data storage policy
    • Fernet encryption details
    • No telemetry / analytics commitment
    • Contact info
  • Bug fix: Removed duplicate device = cfg.get_device_or_none(device_name) line in control.py (post-merge artifact from PR fix: address pre-publish review issues #12).

Test Plan

  • pytest -q passes (4 passed, 1 skipped)
  • No secrets or sensitive data introduced
  • All changes are docs + a trivial bug fix, fully backwards-compatible

🤖 Generated with Claude Code

…olicy

- Centered tagline + 6 shields (PyPI, Python, CI, Coverage, License, Privacy)
- Add "What is iotcli?" section with key principles
- Add Demo section with list/status/JSON examples
- Add Architecture overview with directory tree
- Expand AI Agent Integration with clearer MCP/skill/workflow sections
- Add PRIVACY.md: local-only data, Fernet encryption, no telemetry
- Fix duplicate device lookup line in control.py (post-merge artifact)
@github-actions github-actions Bot added bug Something isn't working documentation Improvements or additions to documentation area: cli CLI commands size: L < 500 lines changed and removed bug Something isn't working labels Apr 21, 2026
@joeVenner joeVenner self-assigned this Apr 21, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 21, 2026

Greptile Summary

This PR delivers a polished README overhaul (badges, demo output, architecture tree, expanded AI agent docs), a new PRIVACY.md privacy policy, and a one-line bug fix in control.py that removes a duplicate cfg.get_device_or_none() call left over from the previous merge.

  • README.md — well-structured addition of badges, nav links, demo section, supported protocols table, architecture overview, and MCP/skill-file integration docs. No issues found.
  • PRIVACY.md — accurate and clear policy covering local-only storage, Fernet encryption, no-telemetry commitment, and third-party communication disclosure. One cosmetic markdown rendering bug (broken bold on line 29).
  • control.py set action — the duplicate-call removal is correct, but the existing validation guard on lines 95-96 is missing a return, so when a user omits the value argument or provides one without =, they receive two error messages: the helpful formatted one, then a raw Python exception string swallowed by the outer except block. A one-line fix resolves this.

Confidence Score: 4/5

Safe to merge after the one-line return fix in control.py; all other changes are docs with a minor cosmetic markdown bug.

The README and PRIVACY.md changes are purely additive documentation with no runtime impact. The control.py change correctly removes a duplicate call, but the missing return after the set-action validation causes a double error output on invalid input — a real user-facing bug that is straightforward to fix. Once the return is added, this PR is ready to merge.

src/iotcli/cli/commands/control.py — needs the return added after the set validation error on line 96.

Important Files Changed

Filename Overview
src/iotcli/cli/commands/control.py Removed duplicate cfg.get_device_or_none() call (good cleanup), but the set action is missing a return after its validation error, causing a double error message via the outer exception handler.
PRIVACY.md New privacy policy document; well-structured and accurate, but one bullet has a broken bold span (** Governed with a leading space) that won't render correctly.
README.md Comprehensive README overhaul with badges, demo section, architecture overview, and AI agent integration docs — no issues found.

Sequence Diagram

sequenceDiagram
    actor User
    participant CLI as control.py
    participant Cfg as ConfigManager
    participant Ctrl as DeviceController
    participant Out as Output

    User->>CLI: iotcli control set DEVICE VALUE
    CLI->>Cfg: get_device_or_none(device_name)
    Cfg-->>CLI: device or None

    alt device not found
        CLI->>Out: error("Device not found")
        CLI-->>User: error output
    else action is set, value invalid
        CLI->>Out: error("set requires property=value")
        Note over CLI: missing return - falls through to split()
        CLI->>Out: error(AttributeError or ValueError message)
        CLI-->>User: two error messages
    else action is set, value valid
        CLI->>Ctrl: set_value(device, prop, coerced)
        Ctrl-->>CLI: ok
        CLI->>Cfg: update_status(device_name, ONLINE)
        CLI->>Out: success(...)
        CLI-->>User: success output
    end
Loading

Comments Outside Diff (1)

  1. src/iotcli/cli/commands/control.py, line 95-97 (link)

    P1 Missing return after validation error causes double error output

    When value is None (no argument provided) or lacks =, out.error(...) is called correctly on line 96, but execution falls through to line 97 where value.split("=", 1) raises either AttributeError (if value is None) or ValueError (if there's no =). The outer except Exception on line 107 catches it and calls out.error(str(e)) a second time, so the user sees two error messages: the helpful one, then a raw Python exception string.

    A return is needed after the validation error:

Reviews (1): Last reviewed commit: "docs(readme): overhaul with badges, demo..." | Re-trigger Greptile

Comment thread PRIVACY.md Outdated
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
@github-actions github-actions Bot added the bug Something isn't working label Apr 21, 2026
@joeVenner
Copy link
Copy Markdown
Contributor Author

@joeVenner review

@joeVenner joeVenner merged commit 6a6d6eb into main Apr 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli CLI commands bug Something isn't working documentation Improvements or additions to documentation size: L < 500 lines changed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant