Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Repository Guidelines

## Communication
- Always write responses in English, even if the prompt is in Portuguese or another language.

## Project Structure & Module Organization
- `packages/`: OpenWrt package definitions and payload files. Runtime Lua code typically lives under `packages/<pkg>/files/usr/lib/lua/`, and package-level tests live under `packages/<pkg>/tests/`.
- Scope: always and only work with code under `packages/pirania/`; ignore all other items inside `packages/`.
- `tests/`: shared test utilities, fakes, and integration tests.
- `captive-portal-v0` … `captive-portal-v3`: captive portal assets by version.
- `Dockerfiles/`: container definitions (notably unit test image).
- `tools/`: helper scripts (e.g., `tools/dockertestshell`).
- `run_tests`: test runner script.
- `libremesh.mk`, `libremesh.sdk.config`: build/SDK integration files for OpenWrt.

## Build, Test, and Development Commands
- `./run_tests`: run Lua unit tests inside Docker using `busted` and generate coverage.
- `LUA_ENABLE_LOGGING=1 ./run_tests`: enable verbose Lua logging during tests.
- `./tools/dockertestshell`: open a shell inside the test container to iterate quickly.
- Only run or modify workflows that target `packages/pirania/`.
- Image building is done via OpenWrt Buildroot/ImageBuilder; see `README.md` for full workflows. Example ImageBuilder usage (run inside the ImageBuilder directory):
```sh
make image PROFILE=<device_profile> PACKAGES="lime-system lime-proto-babeld ..." FILES=files
```

## Coding Style & Naming Conventions
- Preserve existing style within each file; there is no repo-wide formatter.
- Lua: follow current indentation in the file (tabs/spaces vary); keep module-level tables and `return` at end.
- Makefiles: use tabs for recipe lines (required by `make`).
- Shell: scripts such as `run_tests` use bash; avoid bashisms in `sh` scripts unless the file already uses bash.

## Testing Guidelines
- Framework: `busted` with coverage via `luacov` (run by `./run_tests`).
- Test locations:
- Package tests: `packages/<pkg>/tests/test_*.lua`
- Shared/integration tests: `tests/test_*.lua`
- Focus tests on `packages/pirania/` only; do not add or modify tests for other packages.
- When code uses UCI, prefer `lime.config.get_uci_cursor()` and the helpers in `tests/utils` (see `TESTING.md`).

## Commit & Pull Request Guidelines
- Branch from `master` and target `master` for PRs. Recommended branch format: `<type>/<name>` (e.g., `feature/new-ui`, `fix/bug-123`).
- Commit subjects in this repo are short and lowercase, often prefixed by area (`packages: ...`, `lime-system: ...`, or `fix(scope): ...`). Follow that pattern.
- PRs should include a clear description, reference issues when applicable, and mention test results (e.g., `./run_tests`).

## Developer Notes
- Unit tests require Docker running and a non-root user; see `TESTING.md` for setup details.
- Changes and investigations should stay within `packages/pirania/` unless explicitly requested otherwise.
- For deeper context, consult `CONTRIBUTING.md`, `TESTING.md`, and `HACKING.md`.
192 changes: 192 additions & 0 deletions packages/pirania/HISTORIAS_USUARIO_TRANCE_REDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# 👤 Persona 1 — **Cláudio (Liderança comunitária)**

## 📖 Contexto narrativo

Cláudio é uma **liderança comunitária** responsável pela organização da vida coletiva e pela **administração da rede de internet da comunidade**, em um território com muitas crianças e jovens.

Ele passa boa parte do dia apoiando atividades educativas, sociais e organizacionais. Ao mesmo tempo, Cláudio reconhece que possui **hábitos digitais que podem atrapalhar seu foco**, e entende que o próprio sistema pode ajudá-lo a manter limites saudáveis.

Como liderança, ele precisa de **autonomia total sobre a rede**, mas também aceita que **regras comunitárias** existam para todos, inclusive como exemplo.

---

## 🧩 História de usuário — Administração da rede comunitária

> **Como uma liderança comunitária**,
> eu quero **administrar a rede de internet da comunidade**,
> para que **o acesso seja organizado, seguro e alinhado com os acordos coletivos**.

### Critérios de aceitação

* Posso:

* criar vouchers de acesso
* distribuir vouchers para moradores e visitantes
* alterar configurações da rede
* As regras comunitárias de uso são aplicadas automaticamente aos usuários.
* Vouchers **não definem privilégios ou perfis**.

---

## 🧩 História de usuário — Autolimitação e exemplo

> **Como liderança comunitária**,
> eu quero **respeitar os horários comunitários de uso da internet**,
> para que **eu dê o exemplo e mantenha equilíbrio no meu próprio uso**.

### Critérios de aceitação

* Ferramentas não essenciais são bloqueadas fora do horário comunitário.
* Ferramentas de comunicação básica permanecem liberadas 24h.
* Cláudio pode acessar funções administrativas quando necessário.

---

## 🧩 História de usuário — Segurança da rede

> **Como liderança comunitária**,
> eu quero **bloquear automaticamente sites maliciosos**,
> para que **a comunidade esteja protegida contra riscos digitais**.

### Critérios de aceitação

* Bloqueio automático de sites maliciosos.
* Lista de bloqueios pode ser atualizada pela liderança.
* Bloqueios não afetam plataformas educacionais nem mensageiros.

---

# 👤 Persona 2 — **Jão (Jovem da comunidade)**

## 📖 Contexto narrativo

Jão tem **14 anos**, vive na comunidade e utiliza a internet diariamente para **estudo, lazer e socialização**. Ele acessa conteúdos por navegador, aplicativos da Play Store e APKs instalados manualmente.

Ele não decide seus próprios horários: seu uso da internet segue os **acordos coletivos definidos pela comunidade**. Ainda assim, ele precisa de previsibilidade, clareza e acesso garantido a ferramentas educacionais e de comunicação.

---

## 🧩 História de usuário — Uso conforme regras comunitárias

> **Como um jovem da comunidade**,
> eu quero **usar a internet dentro dos horários definidos coletivamente**,
> para que **eu saiba exatamente quando posso estudar, me divertir ou descansar**.

### Critérios de aceitação

* O acesso à internet segue **os horários comunitários**, iguais para todos.
* Fora do horário comunitário:

* entretenimento é bloqueado
* jogos e streaming são bloqueados
* Mensageiros e plataformas de reunião permanecem liberados.

---

## 🧩 História de usuário — Acesso garantido à educação

> **Como um jovem estudante**,
> eu quero **acessar plataformas educacionais sempre que permitido**,
> para que **eu possa estudar mesmo com restrições gerais de uso**.

### Critérios de aceitação

* Sempre liberado acesso a:

* CMSP
* Khan Academy
* Duolingo
* plataformas de videoaula
* Funciona via:

* navegador
* aplicativos da Play Store
* APKs
* Plataformas educacionais não são confundidas com entretenimento.

---

## 🧩 História de usuário — Lazer dentro dos limites coletivos

> **Como um jovem da comunidade**,
> eu quero **acessar jogos, streams e entretenimento**,
> para que **eu possa me divertir respeitando os acordos da comunidade**.

### Critérios de aceitação

* Jogos podem ser:

* no navegador
* via APK
* via Play Store
* Streaming de vídeo e jogos permitido **apenas dentro do horário comunitário**.
* Downloads seguem as mesmas regras de horário.

---

# 👤 Persona 3 — **Pedro (Visitante sem privilégios)**

## 📖 Contexto narrativo

Pedro tem **20 anos** e está temporariamente na comunidade para realizar uma **pesquisa em área rural**. Ele não é morador, não participa da governança e **não possui privilégios administrativos**.

Ele utiliza:

* **Notebook** para trabalho em horário fixo
* **Tablet** para anotações
* **Celular** para uso pessoal e comunicação

Pedro aceita e respeita **as mesmas regras comunitárias de uso** aplicadas aos moradores.

---

## 🧩 História de usuário — Acesso como visitante

> **Como um visitante da comunidade**,
> eu quero **acessar a internet sem privilégios especiais**,
> para que **eu consiga realizar minha pesquisa respeitando as regras locais**.

### Critérios de aceitação

* Pedro não pode:

* criar vouchers
* alterar configurações
* Seu acesso é igual ao de qualquer não-liderança.
* Regras comunitárias se aplicam integralmente.

---

## 🧩 História de usuário — Trabalho em horário fixo

> **Como um visitante pesquisador**,
> para que **eu consiga realizar minhas atividades de pesquisa com previsibilidade**.

### Critérios de aceitação

* Uso do notebook permitido **em horário fixo pré-estabelecido**.
* Esse horário:

* é conhecido pelo usuário
* respeita as regras comunitárias
* Comunicação básica continua liberada fora desse horário.

---

## 🧩 História de usuário — Comunicação sempre disponível

> **Como visitante**,
> eu quero **manter acesso contínuo a ferramentas de comunicação**,
> para que **eu consiga lidar com emergências e necessidades básicas**.

### Critérios de aceitação

* Sempre liberado:

* WhatsApp
* Telegram
* Signal
* Zoom
* Google Meet
* Microsoft Teams

Loading