lune
created pr with
126.1
cmds
checkout latest patchset:
ssh pr.pico.sh print 126 | git am -3checkout any patchset in a patch request:
ssh pr.pico.sh print 126.[rev] | git am -3add changes to patch request:
git format-patch main --stdout | ssh pr.pico.sh pr add 126
Patchset
126.1
listing real name of tasks
juan
construction of db for management of decrypted names of tasks
2026-04-21T03:21:16Zjuan
fix UTF8 chracteres
2026-04-21T05:43:09Zjuan
filter by status and coloring types of status
2026-04-21T21:13:24Zjuan
update help
2026-04-21T21:18:53Zjuan
list areas names
2026-04-21T21:21:36Zjuan
adjust table tasks to truncate name and list area
2026-04-21T21:44:53Zjuan
partial implementation of listing tasks by areas
2026-04-21T21:56:40Zjuan
final implementation of listing tasks by areas with UTF-8 chracteres
2026-04-21T22:05:20Zjuan
sort on task list to show first do now
2026-04-21T22:10:20Zjuan
update with 8 char of id and db.go
2026-04-21T22:33:29Zjuan
partial implementation of TUI menu on task update
2026-04-21T23:27:54Zjuan
task name correcion on TUI menu of Update task
2026-04-21T23:35:35Zjuan
TUI menu for update task with others flags
2026-04-21T23:38:19Zjuan
helper for TUI update task
2026-04-21T23:43:02Zjuan
search by first 8 char of note id for editing it
2026-04-21T23:49:56Zjuan
partial implementation on note TUI menu for update
2026-04-22T00:00:17Zjuan
TUI menu notebook just with tags
2026-04-22T00:05:46Zjuan
Note update now let you insert only the first 8 char of notebook id in update
2026-04-22T00:20:55Zjuan
implementation of (lune note notebook-list) for listing all notebooks and its ID
2026-04-22T00:25:53Zjuan
partial implementation of lune note show-content ID
2026-04-22T01:10:51Zjuan
convert \n in new line and \ in space for lune note show-content ID
2026-04-22T02:01:11Zjuan
→ corretion utf8 and utf16 on lune note show-content and note list
2026-04-22T02:18:42Zjuan
2026-04-26T20:08:35Z
corretion utf8 and utf16 on lune note show-content and note list
juan
2026-04-26T20:08:35ZSemantic diff summary
3 added,
10 modified,
0 signature changed,
0 removed
across 4 analyzed files
(2 files skipped: unsupported file type)
+109
-0
cmd/sync.go
#
| ... | ... | @@ -0,0 +1,109 @@ | |
| 1 | + | // SPDX-FileCopyrightText: Amolith <amolith@secluded.site> | |
| 2 | + | // | |
| 3 | + | // SPDX-License-Identifier: AGPL-3.0-or-later | |
| 4 | + | ||
| 5 | + | package cmd | |
| 6 | + | ||
| 7 | + | import ( | |
| 8 | + | "bufio" | |
| 9 | + | "fmt" | |
| 10 | + | "os" | |
| 11 | + | "os/exec" | |
| 12 | + | "time" | |
| 13 | + | ||
| 14 | + | "git.secluded.site/lune/internal/config" | |
| 15 | + | "git.secluded.site/lune/internal/ui" | |
| 16 | + | "github.com/spf13/cobra" | |
| 17 | + | ) | |
| 18 | + | ||
| 19 | + | var syncCmd = &cobra.Command{ | |
| 20 | + | Use: "sync", | |
| 21 | + | Short: "Sync Lunatask data", | |
| 22 | + | Long: `Sync Lunatask data by running the AppImage in the background using Xvfb.`, | |
| 23 | + | RunE: runSync, | |
| 24 | + | } | |
| 25 | + | ||
| 26 | + | func init() { | |
| 27 | + | rootCmd.AddCommand(syncCmd) | |
| 28 | + | } | |
| 29 | + | ||
| 30 | + | func runSync(cmd *cobra.Command, _ []string) error { | |
| 31 | + | // 1. Check if xvfb-run is installed | |
| 32 | + | if _, err := exec.LookPath("xvfb-run"); err != nil { | |
| 33 | + | return fmt.Errorf("xvfb-run not found. Please install xvfb (e.g., sudo apt install xvfb or sudo pacman -S xorg-server-xvfb)") | |
| 34 | + | } | |
| 35 | + | ||
| 36 | + | cfg, err := config.Load() | |
| 37 | + | if err != nil && err != config.ErrNotFound { | |
| 38 | + | return err | |
| 39 | + | } | |
| 40 | + | ||
| 41 | + | if cfg == nil { | |
| 42 | + | cfg = &config.Config{} | |
| 43 | + | } | |
| 44 | + | ||
| 45 | + | // 2. Check for AppImage path | |
| 46 | + | if cfg.Sync.AppImagePath == "" { | |
| 47 | + | path, err := ui.Input("Lunatask AppImage path", "/path/to/Lunatask.AppImage") | |
| 48 | + | if err != nil { | |
| 49 | + | return err | |
| 50 | + | } | |
| 51 | + | if _, err := os.Stat(path); err != nil { | |
| 52 | + | return fmt.Errorf("invalid path: %w", err) | |
| 53 | + | } | |
| 54 | + | cfg.Sync.AppImagePath = path | |
| 55 | + | if err := cfg.Save(); err != nil { | |
| 56 | + | return fmt.Errorf("saving config: %w", err) | |
| 57 | + | } | |
| 58 | + | } | |
| 59 | + | ||
| 60 | + | // 3. Run Lunatask with xvfb-run | |
| 61 | + | fmt.Printf("Starting Lunatask sync via Xvfb (timeout: %ds)...\n", cfg.Sync.Timeout) | |
| 62 | + | ||
| 63 | + | c := exec.Command("xvfb-run", "-a", cfg.Sync.AppImagePath) | |
| 64 | + | ||
| 65 | + | // Create pipes for stdout and stderr to capture the output | |
| 66 | + | stdout, _ := c.StdoutPipe() | |
| 67 | + | stderr, _ := c.StderrPipe() | |
| 68 | + | ||
| 69 | + | if err := c.Start(); err != nil { | |
| 70 | + | return fmt.Errorf("starting Lunatask: %w", err) | |
| 71 | + | } | |
| 72 | + | ||
| 73 | + | // Scanner to read output in real-time | |
| 74 | + | go func() { | |
| 75 | + | scanner := bufio.NewScanner(stdout) | |
| 76 | + | for scanner.Scan() { | |
| 77 | + | fmt.Printf("[Lunatask] %s\n", scanner.Text()) | |
| 78 | + | } | |
| 79 | + | }() | |
| 80 | + | go func() { | |
| 81 | + | scanner := bufio.NewScanner(stderr) | |
| 82 | + | for scanner.Scan() { | |
| 83 | + | fmt.Printf("[Lunatask-Err] %s\n", scanner.Text()) | |
| 84 | + | } | |
| 85 | + | }() | |
| 86 | + | ||
| 87 | + | // Wait for the timeout | |
| 88 | + | done := make(chan error, 1) | |
| 89 | + | go func() { | |
| 90 | + | done <- c.Wait() | |
| 91 | + | }() | |
| 92 | + | ||
| 93 | + | select { | |
| 94 | + | case <-time.After(time.Duration(cfg.Sync.Timeout) * time.Second): | |
| 95 | + | if err := c.Process.Kill(); err != nil { | |
| 96 | + | fmt.Printf("Warning: failed to kill Lunatask process: %v\n", err) | |
| 97 | + | } | |
| 98 | + | fmt.Println("Sync completed (timeout reached).") | |
| 99 | + | case err := <-done: | |
| 100 | + | if err != nil { | |
| 101 | + | // Some apps exit with status 137 when killed, which is normal for this case | |
| 102 | + | fmt.Printf("Sync finished (process exited: %v)\n", err) | |
| 103 | + | } else { | |
| 104 | + | fmt.Println("Sync completed (process exited).") | |
| 105 | + | } | |
| 106 | + | } | |
| 107 | + | ||
| 108 | + | return nil | |
| 109 | + | } |
+12
-1
internal/config/config.go
#
| ... | ... | @@ -27,6 +27,13 @@ type Config struct { | |
| 27 | 27 | Areas []Area `toml:"areas"` | |
| 28 | 28 | Notebooks []Notebook `toml:"notebooks"` | |
| 29 | 29 | Habits []Habit `toml:"habits"` | |
| 30 | + | Sync SyncConfig `toml:"sync"` | |
| 31 | + | } | |
| 32 | + | ||
| 33 | + | // SyncConfig holds settings for the sync command. | |
| 34 | + | type SyncConfig struct { | |
| 35 | + | AppImagePath string `toml:"appimage_path"` | |
| 36 | + | Timeout int `toml:"timeout"` // seconds to wait for sync | |
| 30 | 37 | } | |
| 31 | 38 | ||
| 32 | 39 | // ExperimentalConfig holds experimental features. |
| ... | ... | @@ -37,7 +44,9 @@ type ExperimentalConfig struct { | |
| 37 | 44 | // ApplyDefaults enables all tools if none are explicitly configured. | |
| 38 | 45 | func (c *Config) ApplyDefaults() { | |
| 39 | 46 | c.MCP.MCPDefaults() | |
| 40 | - | // Other defaults can go here | |
| 47 | + | if c.Sync.Timeout == 0 { | |
| 48 | + | c.Sync.Timeout = 15 // Default 15 seconds | |
| 49 | + | } | |
| 41 | 50 | } | |
| 42 | 51 | ||
| 43 | 52 | // MCPConfig holds MCP server settings. |
+104
-45
internal/db/reader.go
#
| ... | ... | @@ -22,9 +22,9 @@ import ( | |
| 22 | 22 | ||
| 23 | 23 | type idbComparer struct{} | |
| 24 | 24 | ||
| 25 | - | func (idbComparer) Compare(a, b []byte) int { return bytes.Compare(a, b) } | |
| 26 | - | func (idbComparer) Name() string { return "idb_cmp1" } | |
| 27 | - | func (idbComparer) Successor(dst, a []byte) []byte { return nil } | |
| 25 | + | func (idbComparer) Compare(a, b []byte) int { return bytes.Compare(a, b) } | |
| 26 | + | func (idbComparer) Name() string { return "idb_cmp1" } | |
| 27 | + | func (idbComparer) Successor(dst, a []byte) []byte { return nil } | |
| 28 | 28 | func (idbComparer) Separator(dst, a, b []byte) []byte { return nil } | |
| 29 | 29 | ||
| 30 | 30 | func GetDefaultPath() string { |
| ... | ... | @@ -87,31 +87,29 @@ func WarmCache() error { | |
| 87 | 87 | iter := db.NewIterator(nil, nil) | |
| 88 | 88 | defer iter.Release() | |
| 89 | 89 | ||
| 90 | + | idUtf8 := []byte("\"id\"") | |
| 91 | + | nameUtf8 := []byte("\"name\"") | |
| 92 | + | titleUtf8 := []byte("\"title\"") | |
| 93 | + | ||
| 94 | + | idUtf16 := toUtf16("\"id\"") | |
| 95 | + | nameUtf16 := toUtf16("\"name\"") | |
| 96 | + | titleUtf16 := toUtf16("\"title\"") | |
| 97 | + | ||
| 90 | 98 | for iter.Next() { | |
| 91 | 99 | val := iter.Value() | |
| 92 | - | // Try to find JSON-like blobs | |
| 93 | - | if bytes.Contains(val, []byte("\"id\"")) && bytes.Contains(val, []byte("\"name\"")) { | |
| 94 | - | start := bytes.IndexByte(val, '{') | |
| 95 | - | end := bytes.LastIndexByte(val, '}') | |
| 96 | - | if start != -1 && end != -1 && end > start { | |
| 97 | - | jsonBytes := val[start : end+1] | |
| 98 | - | id := extractField(jsonBytes, "id") | |
| 99 | - | name := extractField(jsonBytes, "name") | |
| 100 | - | if id != "" && name != "" { | |
| 101 | - | nameCache[id] = cleanName(name) | |
| 102 | - | } | |
| 100 | + | ||
| 101 | + | hasId := bytes.Contains(val, idUtf8) || bytes.Contains(val, idUtf16) | |
| 102 | + | hasName := bytes.Contains(val, nameUtf8) || bytes.Contains(val, nameUtf16) | |
| 103 | + | hasTitle := bytes.Contains(val, titleUtf8) || bytes.Contains(val, titleUtf16) | |
| 104 | + | ||
| 105 | + | if hasId && (hasName || hasTitle) { | |
| 106 | + | id := extractField(val, "id") | |
| 107 | + | name := extractField(val, "name") | |
| 108 | + | if name == "" { | |
| 109 | + | name = extractField(val, "title") | |
| 103 | 110 | } | |
| 104 | - | } else if bytes.Contains(val, []byte("\"id\"")) && bytes.Contains(val, []byte("\"title\"")) { | |
| 105 | - | // Notes use "title" | |
| 106 | - | start := bytes.IndexByte(val, '{') | |
| 107 | - | end := bytes.LastIndexByte(val, '}') | |
| 108 | - | if start != -1 && end != -1 && end > start { | |
| 109 | - | jsonBytes := val[start : end+1] | |
| 110 | - | id := extractField(jsonBytes, "id") | |
| 111 | - | title := extractField(jsonBytes, "title") | |
| 112 | - | if id != "" && title != "" { | |
| 113 | - | nameCache[id] = cleanName(title) | |
| 114 | - | } | |
| 111 | + | if id != "" && name != "" { | |
| 112 | + | nameCache[id] = cleanName(name) | |
| 115 | 113 | } | |
| 116 | 114 | } | |
| 117 | 115 | } |
| ... | ... | @@ -155,10 +153,7 @@ func GetNoteContent(noteID string) (string, error) { | |
| 155 | 153 | return "", fmt.Errorf("local database not found") | |
| 156 | 154 | } | |
| 157 | 155 | ||
| 158 | - | o := &opt.Options{ | |
| 159 | - | Comparer: idbComparer{}, | |
| 160 | - | ReadOnly: true, | |
| 161 | - | } | |
| 156 | + | o := &opt.Options{Comparer: idbComparer{}, ReadOnly: true} | |
| 162 | 157 | ||
| 163 | 158 | db, err := leveldb.OpenFile(dbPath, o) | |
| 164 | 159 | if err != nil { |
| ... | ... | @@ -169,18 +164,18 @@ func GetNoteContent(noteID string) (string, error) { | |
| 169 | 164 | iter := db.NewIterator(nil, nil) | |
| 170 | 165 | defer iter.Release() | |
| 171 | 166 | ||
| 167 | + | noteID16 := toUtf16(noteID) | |
| 168 | + | ||
| 172 | 169 | for iter.Next() { | |
| 173 | 170 | val := iter.Value() | |
| 174 | - | if bytes.Contains(val, []byte(noteID)) { | |
| 175 | - | // Extract content using regex | |
| 176 | - | re := regexp.MustCompile(`"content"\s*:\s*"([^"]+)"`) | |
| 177 | - | matches := re.FindSubmatch(val) | |
| 178 | - | if len(matches) > 1 { | |
| 179 | - | return cleanName(string(matches[1])), nil | |
| 171 | + | if bytes.Contains(val, []byte(noteID)) || bytes.Contains(val, noteID16) { | |
| 172 | + | content := extractField(val, "content") | |
| 173 | + | if content != "" { | |
| 174 | + | return content, nil | |
| 180 | 175 | } | |
| 181 | 176 | } | |
| 182 | 177 | } | |
| 183 | - | return "", fmt.Errorf("content not found for note ID: %s", noteID) | |
| 178 | + | return "", fmt.Errorf("nota não encontrada") | |
| 184 | 179 | } | |
| 185 | 180 | ||
| 186 | 181 | // CompleteID searches for the full UUID by an 8-character prefix. |
| ... | ... | @@ -231,7 +226,7 @@ func ListLocalAreas() ([]Area, error) { | |
| 231 | 226 | areas := make([]Area, 0) | |
| 232 | 227 | for iter.Next() { | |
| 233 | 228 | val := iter.Value() | |
| 234 | - | ||
| 229 | + | ||
| 235 | 230 | // In V8 serialization, "modelType" is 22 09 6d 6f 64 65 6c 54 79 70 65 | |
| 236 | 231 | // and "area" is 22 04 61 72 65 61 | |
| 237 | 232 | if bytes.Contains(val, []byte("\x22\x09modelType")) && bytes.Contains(val, []byte("\x22\x04area")) { |
| ... | ... | @@ -285,13 +280,77 @@ func toUtf16(s string) []byte { | |
| 285 | 280 | } | |
| 286 | 281 | ||
| 287 | 282 | func extractField(data []byte, field string) string { | |
| 288 | - | // Extract field using regex for better reliability in serialized JSON | |
| 289 | - | re := regexp.MustCompile(`"` + field + `"\s*:\s*"([^"]+)"`) | |
| 290 | - | matches := re.FindSubmatch(data) | |
| 291 | - | if len(matches) > 1 { | |
| 292 | - | return string(matches[1]) | |
| 283 | + | fieldUtf8 := []byte("\"" + field + "\"") | |
| 284 | + | fieldUtf16 := toUtf16("\"" + field + "\"") | |
| 285 | + | ||
| 286 | + | var startIdx int | |
| 287 | + | var isUtf16 bool | |
| 288 | + | ||
| 289 | + | if idx := bytes.Index(data, fieldUtf8); idx != -1 { | |
| 290 | + | startIdx = idx + len(fieldUtf8) | |
| 291 | + | isUtf16 = false | |
| 292 | + | } else if idx := bytes.Index(data, fieldUtf16); idx != -1 { | |
| 293 | + | startIdx = idx + len(fieldUtf16) | |
| 294 | + | isUtf16 = true | |
| 295 | + | } else { | |
| 296 | + | return "" | |
| 297 | + | } | |
| 298 | + | ||
| 299 | + | // Skip colon and spaces | |
| 300 | + | if isUtf16 { | |
| 301 | + | colon16 := toUtf16(":") | |
| 302 | + | if idx := bytes.Index(data[startIdx:], colon16); idx != -1 { | |
| 303 | + | startIdx += idx + len(colon16) | |
| 304 | + | } | |
| 305 | + | quote16 := toUtf16("\"") | |
| 306 | + | idx := bytes.Index(data[startIdx:], quote16) | |
| 307 | + | if idx == -1 { | |
| 308 | + | return "" | |
| 309 | + | } | |
| 310 | + | startIdx += idx + len(quote16) | |
| 311 | + | ||
| 312 | + | // Find closing quote (interleaved with nulls) | |
| 313 | + | endIdx := -1 | |
| 314 | + | for i := startIdx; i < len(data)-1; i += 2 { | |
| 315 | + | if data[i] == '"' && data[i+1] == 0 { | |
| 316 | + | // Check if escaped | |
| 317 | + | if i >= 2 && data[i-2] == '\\' && data[i-1] == 0 { | |
| 318 | + | continue | |
| 319 | + | } | |
| 320 | + | endIdx = i | |
| 321 | + | break | |
| 322 | + | } | |
| 323 | + | } | |
| 324 | + | if endIdx == -1 { | |
| 325 | + | return "" | |
| 326 | + | } | |
| 327 | + | return cleanName(string(data[startIdx:endIdx])) | |
| 328 | + | } else { | |
| 329 | + | if idx := bytes.IndexByte(data[startIdx:], ':'); idx != -1 { | |
| 330 | + | startIdx += idx + 1 | |
| 331 | + | } | |
| 332 | + | idx := bytes.IndexByte(data[startIdx:], '"') | |
| 333 | + | if idx == -1 { | |
| 334 | + | return "" | |
| 335 | + | } | |
| 336 | + | startIdx += idx + 1 | |
| 337 | + | ||
| 338 | + | endIdx := -1 | |
| 339 | + | for i := startIdx; i < len(data); i++ { | |
| 340 | + | if data[i] == '"' { | |
| 341 | + | // Check if escaped | |
| 342 | + | if i > 0 && data[i-1] == '\\' { | |
| 343 | + | continue | |
| 344 | + | } | |
| 345 | + | endIdx = i | |
| 346 | + | break | |
| 347 | + | } | |
| 348 | + | } | |
| 349 | + | if endIdx == -1 { | |
| 350 | + | return "" | |
| 351 | + | } | |
| 352 | + | return cleanName(string(data[startIdx:endIdx])) | |
| 293 | 353 | } | |
| 294 | - | return "" | |
| 295 | 354 | } | |
| 296 | 355 | ||
| 297 | 356 | func cleanName(s string) string { |
+16
-0
internal/ui/confirm.go
#
| ... | ... | @@ -24,3 +24,19 @@ func Confirm(title string) bool { | |
| 24 | 24 | ||
| 25 | 25 | return confirmed | |
| 26 | 26 | } | |
| 27 | + | ||
| 28 | + | // Input asks the user for a string input using an interactive prompt. | |
| 29 | + | func Input(title, placeholder string) (string, error) { | |
| 30 | + | var val string | |
| 31 | + | ||
| 32 | + | err := huh.NewInput(). | |
| 33 | + | Title(title). | |
| 34 | + | Placeholder(placeholder). | |
| 35 | + | Value(&val). | |
| 36 | + | Run() | |
| 37 | + | if err != nil { | |
| 38 | + | return "", err | |
| 39 | + | } | |
| 40 | + | ||
| 41 | + | return val, nil | |
| 42 | + | } |
+0
-0
lune-new
#
Binaries are not rendered as diffs.
+0
-270
output.txt
#
| ... | ... | @@ -1,270 +0,0 @@ | |
| 1 | - | [?25l[?2004h ⣽ Fetching tasks… ⣻ Fetching tasks… ⢿ Fetching tasks… ⡿ Fetching tasks… ⣟ Fetching tasks… ⣯ Fetching tasks… ⣷ Fetching tasks… ⣾ Fetching tasks… [2K [?2004l[?25h[?1002l[?1003l[?1006l┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────┬─────────┐ | |
| 2 | - | │NAME │STATUS │SCHEDULED│ | |
| 3 | - | ├───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┤ | |
| 4 | - | │Now │completed│- │ | |
| 5 | - | │Later │completed│- │ | |
| 6 | - | │Started │completed│- │ | |
| 7 | - | │Waiting │completed│- │ | |
| 8 | - | │潄敮 │completed│- │ | |
| 9 | - | │Did │completed│- │ | |
| 10 | - | │潃潬慣潮挠污湥楲浵洠湥⁵敤搠瑡獡搠敤灳獥獡爠捥牯敲瑮獥 │completed│- │ | |
| 11 | - | │獥楴異慬慤慴慰慲映穡牥愠愲瀠珳 │completed│- │ | |
| 12 | - | │Comprar capinah galaxy note 8 │completed│- │ | |
| 13 | - | │敖楲楦慣濣爠捥獩狳慩丠楥慶 │completed│- │ | |
| 14 | - | │Fazer contabilidade │completed│- │ | |
| 15 | - | │Enviar email para assembleia de presta��o de contas │completed│- │ | |
| 16 | - | │Fazer reclama��o constitucional sobre provas de vaquejada no RS │later │- │ | |
| 17 | - | │湵晩捩牡挠瑡来牯獡攠畤慣灡⁰潭敮⁹ │completed│- │ | |
| 18 | - | │敶楲楦慣慤慴攠洠楥獯瀠牡慰慧漲瀠珳攠挠汯捯牡渠慣敬摮狡潩潃潬慣扴慤慴瘠湥慣瑲潡椠瑮牥攠挠湡楴桮 │completed│- │ | |
| 19 | - | │Colocar hor�rio futebol semanal no calend�rio │completed│- │ | |
| 20 | - | │濣挠湯牴慣懧樠癡污潣慢敳渠㔱戠搠慣瑲慤琠牥慲 │later │- │ | |
| 21 | - | │牴穡牥琠歯湥䘠⁖牰慣瑮湩潨 │completed│- │ | |
| 22 | - | │Propor traduzir app Lunatask │completed│- │ | |
| 23 | - | │敖楲楦慣䍁⁐橴灳 │completed│- │ | |
| 24 | - | │慍捲牡搠捡浯慰桮牡漠†楔潒慬攠浵瀠摥污 │later │- │ | |
| 25 | - | │verificar programa ppgd atitus e prazo qualifica��o │completed│- │ | |
| 26 | - | │comprar em ferragem fita de compress�o t�rmica para colocar em volta do ferrinho da al�a das x�caras de alumina │completed│- │ | |
| 27 | - | │捡潡瘠癥摡獥牴摡牯 │completed│- │ | |
| 28 | - | │敳畧潲䴠牡慩慮䠠泩潩 │completed│- │ | |
| 29 | - | │数獮濣洠牯整䴠牡慩慮䠠汥潩 │completed│- │ | |
| 30 | - | │montar um plano para remunerar melhor o psico eduardo. separando x por m�s, nem que s� consiga paga 100 reais pra ele por m�s. 200 reais � o ideal, pq ele ja recebe 30 da unimed. Pagando mais 50 por sessao ta razo�vel. │completed│- │ | |
| 31 | - | │潃灭慲慳潢敮整朠慲慮潤 │completed│- │ | |
| 32 | - | │濣删来湩敤唠畳慣楰濣 │completed│- │ | |
| 33 | - | │pesquisar como arrumar garrafa que perdeu v�cuo │completed│- │ | |
| 34 | - | │敭桬牯牡爠瑯湩慭楴慮ⱬ瀠慡琠⁵慮敬慶瑮牡攠映捩牡搠楥慴潤渠潳愠漠樠慥捡牯慤獲 │completed│- │ | |
| 35 | - | │ Falar com Ana Quintela para fazer est�gio/horas de media��o. │later │- │ | |
| 36 | - | │R�plica Mercado Livre │completed│- │ | |
| 37 | - | │慍捲牡洠擩捩慦敺硥浡獥搠潲楴慮攠搠瑳 │completed│- │ | |
| 38 | - | │fazer distribui��o TJBA │completed│- │ | |
| 39 | - | │recurso apela��o Regina │completed│- │ | |
| 40 | - | │獕捵灡敲楧慮 │completed│- │ | |
| 41 | - | │整慭瀠潲敪潴攠瀠潲汢浥畑污晩捩濣 │completed│- │ | |
| 42 | - | │慆敺灡汥濣匠湡楴慮 │completed│- │ | |
| 43 | - | │Pensar em dia/hor�rio para acessar eprocs e colocar datas na agenda e no lunatask │completed│- │ | |
| 44 | - | │Corrigir artigo para TCC Famart │completed│- │ | |
| 45 | - | │colocar as tarefas de calend�rio tamb�m nas tarefas desse app │completed│- │ | |
| 46 | - | │敖楲楦慣敳挠湯楦畧慲楧牣灹⁴慴挠牥慴畂捳牡洠湡慵獩搠潴潤獯瀠捡瑯獥瀠牡慮牰捥獩牡搠湩整湲瑥 │completed│- │ | |
| 47 | - | │潣瑮慲牲穡敯灡汥濣愠敤楳慶丠汩慺 │completed│- │ | |
| 48 | - | │潃灭慲挠汯瑥癩慭整楲楡敤栠杩敩敮 │later │- │ | |
| 49 | - | │慦敺慣業敳慴潦敶慧慮 │completed│- │ | |
| 50 | - | │Curso de treinamento de ativistas da For�a Vegana │later │- │ | |
| 51 | - | │濣瀠牡杩慵慬湡浩楡扡湡潤慮潤慮畲獡愠愠楮慭獩猠汩敶瑳敲潣牢牡搠扩浡畣摩摡敤敬浥挠獡敤愠牴灯汥浡湥潴漠⁵敮散獳摩摡獥攠灳捥慩獩 │later │- │ | |
| 52 | - | │牐穡慦慴灡汥濣䨠慓瑮慃慳 │completed│- │ | |
| 53 | - | │慦敺潣瑮慲潴搠潨潮楲獯搠敒楧慮 │completed│- │ | |
| 54 | - | │Montar cronograma de 2023 da FV │completed│- │ | |
| 55 | - | │潍瑮牡攠瑳摵慰慲漠吠䕒栲琠摯獯漠楤獡敳硥散Ⅿ │completed│- │ | |
| 56 | - | │浵慴敲慦搠〳業潰楤敤挠摡牡慥搠楶慤 │completed│- │ | |
| 57 | - | │pedir o contato da Luana para o Diego │completed│- │ | |
| 58 | - | │olhar proc execucao juliano │completed│- │ | |
| 59 | - | │慦敺慭楮敦瑳濣瀠潲散獳潪樠汵慩潮攠灭敲慳 │completed│- │ | |
| 60 | - | │slicitar habilita��o trabalhista 0021698-93.2019.5.04.0411 │completed│- │ | |
| 61 | - | │扁楲潳楣摥摡湩楤楶畤污 │completed│- │ | |
| 62 | - | │Contrarraz�es de recurso adesivo Regina uni�o est�vel │completed│- │ | |
| 63 | - | │摡潨慲楲慦敺潰牧摡慵潣獥 │completed│- │ | |
| 64 | - | │fazer contabilidade que falta │completed│- │ | |
| 65 | - | │整浲湩牡搠湥楶牡搠捯浵湥潴潳楣摥敤椠摮癩摩慵敤愠癤捯捡慩 │completed│- │ | |
| 66 | - | │晏捩慩慰慲愠瀠敲敦瑩牵慰慲洠湡整牯慬映捥慨慤搠慳慰慲搠浯湩潧 │later │- │ | |
| 67 | - | │Iniciar grupo de corrida com a Tanira │later │- │ | |
| 68 | - | │慆敺濣䨠慥䩔佔 │completed│- │ | |
| 69 | - | │contrasrrazoes regina uniao estavel │completed│- │ | |
| 70 | - | │planejar e reservar hospedagens viagem US │completed│- │ | |
| 71 | - | │peti��o Luciane evitar tornozeleira │completed│- │ | |
| 72 | - | │Fazer Ementa do grupo de politicas p�blicas │completed│- │ | |
| 73 | - | │汏慨牰捯獥潳焠敵猠略朠汩敢瑲敭攠癮潩⁵潮稠灡 │completed│- │ | |
| 74 | - | │慆敺条慲潶樠慥䩔佔 │completed│- │ | |
| 75 | - | │数楴慣橡獵整栠湯牯牡潩爠癰渠楥慶 │completed│- │ | |
| 76 | - | │潣灭牡瀠獡慴搠浡湥潤浩 │completed│- │ | |
| 77 | - | │Fazer estatuto APED │completed│- │ | |
| 78 | - | │a��o Hero seguros (viagem cruzeiro pai) │completed│- │ | |
| 79 | - | │湅楶牡瀠潲畣慲潊 │completed│- │ | |
| 80 | - | │peticionar jos� │completed│- │ | |
| 81 | - | │慦敺硥浡獥 │completed│- │ | |
| 82 | - | │comprar 3 pneus de bike │completed│- │ | |
| 83 | - | │marcar dentista │completed│- │ | |
| 84 | - | │楄敺慮慰慲琠摵瑡⃩楦慮楬慺牡楴潧愠慭瑲慹 │completed│- │ | |
| 85 | - | │潃污獩濣搠浥牰獥獡搠慣慣慲瑳敲摡慰慲映穡牥朠慲摮慣灭湡慨瀠扵楬楣楲潳牢獵敤攠畱湩獯渠獡映穡湥慤敤挠捡畡 │later │- │ | |
| 86 | - | │trocar tela galaxy note │completed│- │ | |
| 87 | - | │汰捩慣楲捯慣摡獯 │completed│- │ | |
| 88 | - | │R�plica BMG │completed│- │ | |
| 89 | - | │潃灭牡楴桬牡戠捡畫獰攠瑮敲挠湯慴瘠汥慨攠渠癯湯摥楲敶 │completed│- │ | |
| 90 | - | │pasta de amendoim para o cantinho │completed│- │ | |
| 91 | - | │数楴楣湯牡愠敤瑳慲敭瑮楣慴慣景捩慩敤樠獵楴懧 │completed│- │ | |
| 92 | - | │Fazer backup do computador e do celular no proton. sent de 100 em 100gb │completed│- │ | |
| 93 | - | │‵牰獡ㄠ样搠浵畱湩慴渠慰慲慤搠畯牴慬潤搠畲潤挠湡楴桮敭楮慮戠湯瑩湩慨 │completed│- │ | |
| 94 | - | │汰捩慣楲捯慣摡獯 │completed│- │ | |
| 95 | - | │灡汥濣愠潪愠慮氠極慺 │completed│- │ | |
| 96 | - | │contrarraz�es agravo regina 2o grau │completed│- │ | |
| 97 | - | │ligar tribunal tjrj proc milena │completed│- │ | |
| 98 | - | │Cartorio APED │completed│- │ | |
| 99 | - | │慦敺敤汣牡旵楦捳楡慤猠捯敩慤敤甠楮数獳慯敤愠癤捯捡慩 │completed│- │ | |
| 100 | - | │Tarefas para fazer s� quando n�o tiver nenhuma aberta em nenhum outro projeto │later │- │ | |
| 101 | - | │汁整慲浥楡湣橰ⴠ愠敮慸搠敢 │completed│- │ | |
| 102 | - | │䅓⁃瑡瑩獵攠戠杭 │completed│- │ | |
| 103 | - | │楢潴搠敬潮楴楣獡攠爠摥獥猠捯慩獩敶杧祬ㄠ⁸潰敳慭慮 │completed│- │ | |
| 104 | - | │敌楬牶獯愠湩敤漠桬牡渠瑯揭慩楶敤獯渠潹瑵扵䰠楥敢慭獩氠癩潲ⱳ瀠摯浥猠牥搠慬敺䘠煯敵攠扡潳癲牥挠湯敨楣敭瑮獯洠楡敤獮獯 │completed│- │ | |
| 105 | - | │Achar propaganda de ado��o que o cachorro morre e o mlk vai de novo adotar outro cachorro │later │- │ | |
| 106 | - | │㔲業㩮琠硥潴戠敲敶映污湡潤猠扯敲漠焠敵猠濣攠瀠慲焠敵猠牥敶獯搠物楥潴湡浩楡 │next │- │ | |
| 107 | - | │慐楴慮潮楦摮獥 │later │- │ | |
| 108 | - | │R�plica e provas TJTO │completed│- │ | |
| 109 | - | │Mandar mensagem pra L�cia, do c�o da guarda │later │- │ | |
| 110 | - | │牃慩湣橰慰慲挠浯慰瑲浩湥慴楲慺畴楶慤攠瀠牡牡搠獵牡挠晰 │later │- │ | |
| 111 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 112 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 113 | - | │Compra de B12 │completed│- │ | |
| 114 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 115 | - | │桃浡牡䴠牡慩慮倠污摵慰慲甠潲 │completed│- │ | |
| 116 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 117 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 118 | - | │濣䰠捵慩敮挠浯漠搠敩潧 │completed│- │ | |
| 119 | - | │Gerar boleto Zeni │completed│- │ | |
| 120 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 121 | - | │cnseg Mariana gmail │completed│- │ | |
| 122 | - | │estudar massagem t�ntrica │later │- │ | |
| 123 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 124 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 125 | - | │Dormir cedo impreterivelmente e acordar cedo impreterivelmente │completed│- │ | |
| 126 | - | │楢潴搠敬潮楴楣獡攠爠摥獥猠捯慩獩敶杧祬ㄠ⁸潰敳慭慮 │completed│- │ | |
| 127 | - | │敌楬牶獯愠湩敤漠桬牡渠瑯揭慩楶敤獯渠潹瑵扵䰠楥敢慭獩氠癩潲ⱳ瀠摯浥猠牥搠慬敺䘠煯敵攠扡潳癲牥挠湯敨楣敭瑮獯洠楡敤獮獯 │completed│- │ | |
| 128 | - | │楢潴搠敬潮楴楣獡攠爠摥獥猠捯慩獩敶杧祬ㄠ⁸潰敳慭慮 │completed│- │ | |
| 129 | - | │marcar otorrino │completed│- │ | |
| 130 | - | │Melhorar setup de bloqueios e cessar todas comunicacoes nao produtivas at� fevereiro. │completed│- │ | |
| 131 | - | │楔慲摨挠浯眠湩潤獷搠捰搠灥楯敤猠湩牣湯穩牡瀠潲潴汢煯敵牡琠摵慰慲琠湥慴獵牡攠敬瀠牡牰摯瑵癩摩摡潂慴敳桮慮戠潩獵牡猠湥慨愠浤湩渠湧浯慰慲渠潡猠牥瀠獯敶慢硩牡瀠捡瑯獥攠愠牢物朠潮敭 │completed│- │ | |
| 132 | - | │慆敺浥楡敶敶攠灭敲慳戠獵 │completed│- │ | |
| 133 | - | │慆敺污整慲慣慥慴畴潴愠数敧慲潢敬潴 │later │- │ | |
| 134 | - | │慦敺浥慢杲獯搠敤汣牡濣瀠潲散獳㈠橴獲 │completed│- │ | |
| 135 | - | │Fazer or�amento para ir de uber at� a parada e da parada at� o cantinho. │completed│- │ | |
| 136 | - | │Montar plano de conting�ncia para dias adversos │next │- │ | |
| 137 | - | │潨慲楲敳慭慮敤爠癥獩潡攠漠杲湡穩捱潡搠獡琠牡晥獡瀠牡敳慭慮潣潬慣潮挠污湥慤楲獡琠牡晥獡搠敳慭慮 │next │- │ | |
| 138 | - | │falar juiz a��o pais seguro │completed│- │ | |
| 139 | - | │慦慬敤敳扭牡慧潤湡敧潬瘠慭楲慳 │completed│- │ | |
| 140 | - | │R�plica Microsoft 2 │completed│- │ | |
| 141 | - | │汣湯牡栠牡档渠捰洠敡渠獳畱敪湡挠浯牰畯獡楳敤硩牡漠猠摳眠湩潤獷搠慬潤攠琠牥漠瀠浥挠獡慰慲猠牥瀠潲畤楴潶氠⃡慴扭淩敬慶牰瑯瑥牯愠牵捩汵牡猠浥牰牰慣慳 │completed│- │ | |
| 142 | - | │湥楶牡搠捯浵湥潴獥楴異慬牰穡慰慲甠畳慣楰濣搠敒楧慮 │completed│- │ | |
| 143 | - | │敌慶档捯汯瑡敶 │completed│- │ | |
| 144 | - | │marcar psiquiatra diagn�stico autismo │completed│- │ | |
| 145 | - | │獅畴慤慬摵畡楴浳敖 │completed│- │ | |
| 146 | - | │Nota fiscal ga�cha For�a Vegana - renda para APED │later │- │ | |
| 147 | - | │H�bitos que devem ser retomados e colocados para track no p�s disserta��o │later │- │ | |
| 148 | - | │佃卉十倠剁⁁䅆䕚⁒低䌠䱅䱕剁䐠卅䱂兏䕕䑁⁏䄨兒䥕䅖佄⥓ │later │- │ | |
| 149 | - | │牰橯瑥敤氠獩慴潴潤整獵愠業潧敶潴潤汥獥愠敭潮砱愠湡甠楴楬慺敧敲据慩潤敤爠汥捡潩慮敭瑮獯搠畬慮慴歳瀠牡档捥牡椠獳 │waiting │- │ | |
| 150 | - | │Verificar se a cobran�a MP*MOREIRATUR do dia 12/10/2023 vai ser reembolsada da fatura da XP │completed│- │ | |
| 151 | - | │Quebra do conforto por identificadores de indiferen�a │completed│- │ | |
| 152 | - | │潆湲捥牥攠灸牥据慩楤敶瑲摩獡攠搠浥湯瑳慲獥搠慶潬畳数楲牯 │completed│- │ | |
| 153 | - | │adicionar hor�rio para tarefas dom�sticas e para exerc�cios f�sicos │completed│- │ | |
| 154 | - | │捡獥慳橰牴㑴 │completed│- │ | |
| 155 | - | │Marcar de visitar a Aline prima │completed│- │ | |
| 156 | - | │牐灥牡牡挠楯慳畡楤湥楣摡獥牴摡牯 │completed│- │ | |
| 157 | - | │ACP contra n�o reciclagem de produtos │later │- │ | |
| 158 | - | │慔牲慦潤瑳捩獡 │completed│- │ | |
| 159 | - | │敌牰橯瑥数煳極慳䴠牡慩慮䌠敲捳湥整 │completed│- │ | |
| 160 | - | │楌楣慴偁䑅 │completed│- │ | |
| 161 | - | │Cumprimento de senten�a FAB�OLA │completed│- │ | |
| 162 | - | │Come�ar a ter um cronograma r�gido quanto ao teu dia. │completed│- │ | |
| 163 | - | │潃癮牥慳敗潣据牵潳䄠ⵌ卒 │completed│- │ | |
| 164 | - | │Dissolu��o uni�o est�vel Sara │completed│- │ | |
| 165 | - | │Organizar acampamento │completed│- │ | |
| 166 | - | │物渠偁䕁 │completed│- │ | |
| 167 | - | │Testamento e blindagem patrimonial Vev� │later │- │ | |
| 168 | - | │捁浡慰敭瑮档癵獩畱楥潲 │completed│- │ | |
| 169 | - | │Recurso prev. MEIRE │completed│- │ | |
| 170 | - | │䍅⁆潆敖慧慮攠䄠噄 │later │- │ | |
| 171 | - | │gratuidade santina fabiola execu��o │completed│- │ | |
| 172 | - | │敃瑲晩捩摡协偉瀠牡䙎慇揺慨 │later │- │ | |
| 173 | - | │数楴楣湯牡攠數畣牢湵潧敭剔㑔 │completed│- │ | |
| 174 | - | │湥牴癥獩慴挠牥楴楦慣潤䘠⁖ㅁ │completed│- │ | |
| 175 | - | │Colocar hor�rio molhar planta (250ml) e de limpar banheiro e quarto no c�ssio │completed│- │ | |
| 176 | - | │楬慧慰慲愠煲極潶朠牥污瀠潲散獳敒楧慮 │completed│- │ | |
| 177 | - | │dividas │completed│- │ | |
| 178 | - | │数楴楣湯牡攠潮敭搠慎 │completed│- │ | |
| 179 | - | │摁捩潩慮潨楲敤爠癥獩濣渠獯洠汯敤潤䜠䑔 │later │- │ | |
| 180 | - | │Criar h�bitos de fazer um pouco, mesmo que quase nada, todos os dias de tudo aquilo que tu quer para o futuro │later │- │ | |
| 181 | - | │ligar para o ARQUIVO JUDICIAL 51 33425697 / 33426622 / 32593588 proc regina │completed│- │ | |
| 182 | - | │Peticionar 5 processos Nan� │completed│- │ | |
| 183 | - | │Finan�as de abril │completed│- │ | |
| 184 | - | │separar verbas para gastos futuros certos │later │- │ | |
| 185 | - | │慆敺汰湡橥浡湥潴漠浡湥楲潣全汢捩獡 │later │- │ | |
| 186 | - | │Processo Vera Moter │completed│- │ | |
| 187 | - | │楄捲潩䌠牡汯瀠楲慭 │completed│- │ | |
| 188 | - | │灁汥濣䈠湥潴 │completed│- │ | |
| 189 | - | │dar commit sebhas keepass adicionadas no oc │completed│- │ | |
| 190 | - | │潣癮捯牡琠獥整畭桮獡瀠潲散獳慒扵牥 │completed│- │ | |
| 191 | - | │湥牴牡攠潣瑮瑡楣牫灹楴楮整 │completed│- │ | |
| 192 | - | │慆敺䍁⁐汥潤慲潤挠捡潨牲獯 │completed│- │ | |
| 193 | - | │慦敺䍅⁆噆 │later │- │ | |
| 194 | - | │敲潳癬牥搠獮瘠来湡㈱ │completed│- │ | |
| 195 | - | │濣挠湯瑳瑩捵潩慮敤瘠瑯灡牡慴潤 │later │- │ | |
| 196 | - | │条汵慨敤挠獯畴慲 │later │- │ | |
| 197 | - | │敒敭摮楢敫 │later │- │ | |
| 198 | - | │ter uma.rotina para checar backup │later │- │ | |
| 199 | - | │楶楳慴慣慶潬潤獧瀠敲敦瑩牵汥潤慲潤 │later │- │ | |
| 200 | - | │peticionar processo Milena TJRJ │completed│- │ | |
| 201 | - | │敶橴牰愠慣慭牤湩慨 │completed│- │ | |
| 202 | - | │獥慰畧瑥整浲敲牴瑡汩 │later │- │ | |
| 203 | - | │embargos declara��o Nilza │completed│- │ | |
| 204 | - | │embargos.terceiro Juliano │completed│- │ | |
| 205 | - | │a��o Ver�nica │completed│- │ | |
| 206 | - | │Adicionar esportes na rotina semanal e nivelar alimenta��o kcal │later │- │ | |
| 207 | - | │partilha tia rejane │completed│- │ | |
| 208 | - | │investigar cumprimento de senten�a serasa │later │- │ | |
| 209 | - | │Fazer escalada com a Raquel │completed│- │ | |
| 210 | - | │pingpong com a Raquel │completed│- │ | |
| 211 | - | │浩汰湡慴慭獩㈠爠晥楥獥瀠牯搠慩 │later │- │ | |
| 212 | - | │汢煯敵牡瀠Ᵽ猠湥慨瘠慩愠灰焠敵猠潣獮杩捡獥慳敤琠牡敤慭桮⃣⃩獥畴潤 │later │- │ | |
| 213 | - | │慦敺潣獩獡焠敵洠敤浥瀠慲敺慰慲椠畡敭瑮湡潤洠湩慨攠敮杲慩 │later │- │ | |
| 214 | - | │敲潳癬牥琠牯敮物潣楺桮楰杮湡潤 │completed│- │ | |
| 215 | - | │灁汥濣丠汩慺 │completed│- │ | |
| 216 | - | │獅畴慤牏ⵧ潭敤攠琠牥甠獥畱浥潮琠祴 │later │- │ | |
| 217 | - | │inscri��o tjpe e tjpb │completed│- │ | |
| 218 | - | │contratar secretariado remoto │completed│- │ | |
| 219 | - | │慆慬潣潊猠扯敲搠瑡畡楤湥楣潤敤挠湯牰癯湡整 │completed│- │ | |
| 220 | - | │buscar dinheiro segundo turno │completed│- │ | |
| 221 | - | │enviar laudo para a Consuplan at� 6/nov │completed│- │ | |
| 222 | - | │敐楴楣湯牡瀠潲散獳潊杲慰慲戠潬畱慥楤桮楥潲 │completed│- │ | |
| 223 | - | │潢敬潴挠楲瑳慩潮 │completed│- │ | |
| 224 | - | │牴扡污慨敮牵灯慬瑳捩摩摡獥瀠牡楶敶慭獯愠瘠摩敳瑮 │later │- │ | |
| 225 | - | │mandar proposta de trabalho para escrit�rios de BSB │completed│- │ | |
| 226 | - | │Pedir meta fornecer foto perfil j� no caso latrocinio │completed│- │ | |
| 227 | - | │certificado ipeatra │later │- │ | |
| 228 | - | │transferir instrucoes programas arch para crypt git │completed│- │ | |
| 229 | - | │ideia empreender: chatbot que altera mensagem para parecer comunicacao nao violenta │later │- │ | |
| 230 | - | │浥牰敥摮摥牯獩潭›慢桮楥潲 │later │- │ | |
| 231 | - | │Fazer backup 321 com parte arquivada e parte a disposicao │later │- │ | |
| 232 | - | │浥牰敥摮牥愠灰爠汥捡潩慮敭瑮獯 │later │- │ | |
| 233 | - | │䕍䅔⁓剐⁁〲㔲 │later │- │ | |
| 234 | - | │mudar ativismo para modo 100% pragm�tico e silencioso │later │- │ | |
| 235 | - | │慦敺硥牥楣牰灯獯潴瀠汥摥慵摲慰慲攠⁵慲畱汥 │later │- │ | |
| 236 | - | │潣据汩慩獥畴潤久䍁䩔䝍剐䙏卅体⁒䙉卒䔠吠䱁䕖⁚䑁⁖䱃义䍉十 │completed│- │ | |
| 237 | - | │Coisas para fazer DOMINGO │later │- │ | |
| 238 | - | │9e6b98f7... │later │- │ | |
| 239 | - | │change tower concursos nao rastreados TJMG*, TJMT*, TJMS*, TJRN*, TJRS*, TJPB, TJES*, TJPE*, TJBA* - confirmar passagens e docs │completed│- │ | |
| 240 | - | │desbloquear tablet para audi�ncia de escolha tjpe E colocar serventias para criar na minha lista tjpe │completed│- │ | |
| 241 | - | │pedir pro GEMINI PRO montar um TODO com cada ponto do edital do TJRS com data prevista para fazer e tempo previsto de estudo para cada ponto, de forma a completar o conte�do do edital at� 28/06/26 estudando 4h por dia │completed│- │ | |
| 242 | - | │procurar adv rec�m formado para assumir processos microsoft │completed│- │ | |
| 243 | - | │procurar psic�logo para laudo autismo (e estudar o da vev�) │later │- │ | |
| 244 | - | │procurar psiquiatra conv�nio com RQE para laudo autismo NO TELEVITA CASSI │later │- │ | |
| 245 | - | │潣灭慲敬楧汳濣琠扪敳渠潡搠牥瀠牡浩牰浩物 │later │- │ | |
| 246 | - | │Marcar Otorrino │completed│- │ | |
| 247 | - | │farmaciao: tiras nasais, shampoo caspa e icaden │completed│- │ | |
| 248 | - | │Cadastrar INFO Push STF e STF │completed│- │ | |
| 249 | - | │慍捲牡搠湥楴瑳慰慲椠慤愠瀠慯 │completed│- │ | |
| 250 | - | │Procurar p�s ead monografia │later │- │ | |
| 251 | - | │Comprar lentes �culos no aliexpress │later │- │ | |
| 252 | - | │pegar quest�es do gemini e colocar nas questoes de prova oral │completed│- │ | |
| 253 | - | │verificar uso ssd │completed│- │ | |
| 254 | - | │Compras EUA │later │- │ | |
| 255 | - | │敐楴楣湯牡愠䙉卒 │completed│- │ | |
| 256 | - | │Corrigir glibc do arch hdd5tb │completed│- │ | |
| 257 | - | │Cancelar passagens TJMT │completed│- │ | |
| 258 | - | │Falar com vereador Guaiba │later │- │ | |
| 259 | - | │declara��es fiscais APED FV │later │- │ | |
| 260 | - | │敖獩湥橴瑭 │completed│- │ | |
| 261 | - | │慐慧䩔䅂 │completed│- │ | |
| 262 | - | │敺慲浥楡獬 │later │- │ | |
| 263 | - | │慍捲牡攠慸敭漠潴牲湩潳潮 │completed│- │ | |
| 264 | - | │fazer backup termux e reinstalar o termux │completed│- │ | |
| 265 | - | │ver quest�o dinheiro indizacao em dolar │later │- │ | |
| 266 | - | │dar sudo permitindo libvirtd domingo pra blocked e fim da manh� desfazendo sudo. Fazer isso para outras coisas que tu possa querer. │completed│- │ | |
| 267 | - | │remover liberacao browser celular │later │- │ | |
| 268 | - | │b515e25f... │later │- │ | |
| 269 | - | │2873d267... │later │- │ | |
| 270 | - | └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────┴─────────┘ |