Repository navigation
Releases: masonhuemmer/m365
Releases · masonhuemmer/m365
Release list
v0.9.0
Changelog
- 269ddd8 Expose original Teams message sender identity for approval gates
- 4b160ac Merge pull request #49 from masonhuemmer/docs-release-0.8.0
- 77a3aa8 Merge pull request #52 from masonhuemmer/fix/teams-message-sender-id
- 629b46e Use patched Go 1.26.10 toolchain
- 728e282 docs: update release version to 0.8.0
v0.8.0
v0.7.0
v0.6.0
v0.5.1
Changelog
- 780b95a Merge pull request #42 from masonhuemmer/docs-readme-chocolatey
- fc05004 Merge pull request #43 from masonhuemmer/fix-windows-browser-open
- 11b8116 build: pin gosec to a commit that supports Go 1.27
- 16a3de0 docs: add Chocolatey to the install options
- ef9f8f3 fix: open the login browser on Windows and Linux
v0.5.0
Changelog
- 7ee4f07 Merge bump-go-security (toolchain pin) into teams-mentions
- a3e4d64 Merge main into teams-mentions
- 0e8b09c Merge pull request #37 from jacobhuemmer/docs-windows-paths
- 88e7a7a Merge pull request #38 from masonhuemmer/chore/github-username-rename
- 300506c Merge pull request #39 from masonhuemmer/teams-mentions
- 4f0b74b Merge pull request #40 from masonhuemmer/bump-go-security
- c1b2dc8 Merge pull request #41 from masonhuemmer/docs-release-0.5.0
- f8c9607 build: pin Go toolchain 1.26.9 to clear net/http advisories
- ea67f9c chore: update GitHub references after username rename
- 061dd4c docs: add Windows paths to the README
- 0b634df docs: update release version to 0.5.0
- 781de87 feat(teams): turn a typed @name into a real mention
- 2b8d013 fix(teams): always re-resolve a mention against the whole visible line
- 19dc233 fix(teams): bound text-token decoding, dedupe unresolved with a set, alias vs possessive
- 959360f fix(teams): bound the mention lookahead; prefer an exact alias ending in _ or -
- b044474 fix(teams): bound the whole mention window; never trust a truncated lookahead
- 093516c fix(teams): collapse whitespace in full-name matches; give fake members user ids
- 1f7955a fix(teams): do not guess a mention when inline formatting splits the name
- 8a3fd0d fix(teams): exact punctuated aliases only; a cut-off window must outsize the longest name
- b330ac1 fix(teams): match possessive suffixes case-insensitively
- f827112 fix(teams): mention names with apostrophes and marks; refuse split aliases
- cc51fa3 fix(teams): re-resolve a name that reaches the end of its text against the whole token
- 3a769cf fix(teams): resolve mentions against the whole visible line in one pass
- 1f075f9 fix(teams): resolve names across a space before an inline tag; possessives after full names
- 6d9d6aa fix(teams): support plus-addressed aliases; suggest an email name for duplicate names
- d0a10e9 fix(teams): tokenize HTML for mentions and fix boundary cases from review
- 31f9ced fix(teams): treat a trailing + as part of an exact alias
- a4a8fc8 test(teams): keep mention timing tests out of the race build
v0.4.0
Changelog
- a851d54 Merge pull request #30 from jacobhuemmer/chocolatey-publish
- 8e0714a Merge pull request #31 from jacobhuemmer/chocolatey-smoke-test
- 663a297 Merge pull request #32 from jacobhuemmer/teams-attach-reject
- 1c4e2ad Merge pull request #33 from jacobhuemmer/teams-file-sharing
- 0e9ca97 Merge pull request #34 from jacobhuemmer/docs-release-0.4.0
- a3940b3 Merge pull request #35 from jacobhuemmer/fix-share-chat-members
- f53462a Merge pull request #36 from jacobhuemmer/fix-gitattributes-mixed-eol
- 4ace133 ci(chocolatey): install the packed package and run m365 --version before pushing
- 52715a4 ci: publish releases to Chocolatey
- 0531f68 docs: tell agents how to attach files (mail) and that Teams cannot yet
- b08c979 docs: update release version to 0.4.0
- fbcac51 feat(teams): share --attach files through OneDrive and post a file card
- c464650 fix(teams): expand chat members so attached files are shared with them
- 0c38312 fix(teams): reject live send with --attach instead of dropping the files
- 75f6c62 fix: stop .gitattributes making the mixed-EOL whitespace fixture look dirty
v0.3.0
Changelog
- f835134 Merge main into SES-3-mcp-agent-guards; allow exact user-ID match for addressless members
- 641944a Merge pull request #13 from jacobhuemmer/SES-3-mcp-agent-guards
- 7eb637d Merge pull request #26 from jacobhuemmer/ci-windows-job
- b0f69c4 Merge pull request #27 from jacobhuemmer/windows-session-acl
- 837ae43 Merge pull request #28 from jacobhuemmer/ci-windows-gate
- 10df628 Merge pull request #29 from jacobhuemmer/docs-release-0.3.0
- 27891b3 SES-14: Verify MCP flag values preserve write gate
- 0491a19 SES-3: Guard MCP writes and recipient resolution
- 686506a SES-3: Reject injected MCP arguments and tighten guards
- dab9644 SES-9: Preserve MCP flag values and fail closed on self IDs
- f84bada SES-9: Reject boolean MCP values for non-boolean flags
- 23254dc ci: add non-blocking windows-latest build and test job
- 358147c ci: make the windows job a blocking gate
- 153d7d5 docs: update release version to 0.3.0
- 3869100 feat(keychain): owner-only ACL and LOCALAPPDATA for the Windows session fallback
- 645ed4e fix(SES-19): gate mail CC and reply-all recipients
- 2161e98 fix(cli): reject unparsable flags on calendar and files delete
- ba5d7d1 fix(teams): require identifiable self for exact-recipient email matches
- c9d56f6 refactor: satisfy file-size and CRAP gates
- 6c31035 test(SES-19): red - gate mail CC and reply recipients
- c3cac05 test(keychain): accept split inheritable ACL entries on Windows
- 89d9244 test: make goldens and file-mode checks Windows-safe
v0.2.1
Changelog
- 281c23e Merge pull request #25 from jacobhuemmer/SDO-564-attachment-delivery
- 6e4297d docs(mail): record reply attachment validation and reviews
- a683015 docs(mail): record successful live reply attachment tests
- 9252a31 docs(writing-style): greeting on its own line; always close with Thanks
- 8ec2b53 docs: update release version to 0.2.1
- 5022b63 fix(mail): deliver attachments with reply and reply-all
- 3e9f580 test(mail): lock reply attachment delivery regressions in RED
v0.2.0
Highlights
m365 now shows exactly what a message will look like before it's sent, and refuses to send one that would arrive broken.
New
--previewonmail send,mail replyandteams senddraws the message as a text box in the terminal: the headers, then the body as the recipient will see it. It never sends. It can't be combined with--jsonand isn't available through MCP.- Dry-run shows the real body.
--dry-runJSON now includesrendered(the exact HTML that is sent) andformat_problems. --format mdfor mail (mail send,mail reply). It uses the same markdown subset as Teams, now with inline code, and<and&are escaped in prose.
Changed: may affect scripts and agents
- Badly formatted messages are refused. A send whose body has broken HTML, a tag outside the allow-list, leftover markdown such as
**bold**, a literal\n, runs of blank lines, or a non-http(s)/mailtolink fails with a usage error (exit 3), and nothing is sent. Through MCP it is anIsErrorresult. Run the same command with--previewor--dry-runto see the problems. There is no override. - Mail subjects are checked too: leftover markdown, literal escapes, and newlines.
- Plain-text mail is now sent as HTML, like replies and Teams, so paragraphs and line breaks survive.
--htmltogether with--format mdis an error (previously Teams silently used--html).--formataccepts onlymd.- Teams messages keep paragraph gaps: paragraphs are joined in one
<p>with a blank line between them.
Fixed
- MCP secret redaction keeps output valid JSON, and now also covers secrets under JSON keys (including numbers and nested JSON), inside HTML, split across lines, and in unterminated quotes.
- Errors,
--humanoutput andteams watchshow<,>and&as-is instead of<escapes.
Known limits
Microsoft doesn't publish which HTML each client supports, so the allow-list comes from testing Outlook and Teams on web, Mac and iOS. Teams for iOS flattens code blocks and shows <hr> as a gap. Teams web shows a leading space after a line break.
Maintainers: the build gates were reworked too (toolchain pinning, a go.mod guard, a CRAP ratchet, a file-length gate, and stricter acceptance tests). See #14–#24.
Changelog
- ef9ca92 Merge main into 006-rendered-message-preview
- 378698e Merge pull request #12 from jacobhuemmer/docs/config-json-sign-in
- 645b624 Merge pull request #14 from jacobhuemmer/fix/mcp-redact-json
- 2e6f800 Merge pull request #15 from jacobhuemmer/fix/tool-toolchain-pin
- f7911b1 Merge pull request #16 from jacobhuemmer/fix/gomod-guard
- a074e00 Merge pull request #17 from jacobhuemmer/fix/acceptance-generator
- 4edff11 Merge pull request #18 from jacobhuemmer/fix/json-no-html-escape
- 4a05234 Merge pull request #19 from jacobhuemmer/fix/sdo-566-unmatched-steps
- 6237446 Merge pull request #20 from jacobhuemmer/006-rendered-message-preview
- 8c130a4 Merge pull request #21 from jacobhuemmer/fix/dry-check-gate
- 1ebdc51 Merge pull request #22 from jacobhuemmer/fix/crap-gate
- 7041f08 Merge pull request #23 from jacobhuemmer/refactor/mail-cli-split
- de82920 Merge pull request #24 from jacobhuemmer/chore/speckit-claude-integration
- 8046c0b build(acceptance): fail on dry-check crashes, show findings
- 2f4e4d8 build(acceptance): fail when a dry-check report has no findings count
- 682150c build: a real CRAP gate with a ratchet baseline
- 4c2f92f build: clear GOFLAGS in the gomod guard
- 6f81690 build: file-length gate covers test files; reasons must have words
- de2b02c build: file-length gate for constitution II
- 5cdb58b build: gates fail when go list fails; file-size notes need a reason
- d9d759d build: gomod guard parses the go version and names tidy failures
- a0eb256 build: guard go.mod's go line and tidiness in make verify
- d6de8c6 build: pass the pinned toolchain to the parse-time go list
- 3a7eccb build: run gates with go.mod's toolchain; gosec v2.29.0
- 825d1f9 build: treat an empty GOTOOLCHAIN as unset in the Makefile
- f3dafb8 chore(msgbody): scaffold Lint and LintSubject
- a06b744 chore(msgbody): scaffold Render and Problems signatures
- 9935806 chore(msgbody): scaffold StringWidth
- 5d95267 chore: add Spec Kit's Claude integration; upgrade Spec Kit to 1.0.12
- 35e6bad chore: scaffold Rendered inputs, mail MD flag, and step matcher
- 6703a39 chore: scaffold Text, drawPreview and termWidth
- 84d949a chore: scaffold acceptance generate(root, outDir)
- a6fac4f chore: scaffold checkFeature in the acceptance runtime (SDO-566)
- b952fe6 chore: scaffold cmd/crap-gate
- d19f580 chore: scaffold crap-gate run()
- 883ad51 chore: scaffold listFeatures for the acceptance generator
- e406b7c chore: scaffold unmatchedSteps in the acceptance runtime (SDO-566)
- 4ade7b9 docs(plan): list gomod and filesize in the verify targets
- be618e7 docs(spec): add 006 rendered message preview spec, plan and tasks
- e97a3a1 docs(spec): record 006 measurements, gate results and deviations
- f20df0c docs(spec): record PR #20 review fixes and the x/text dependency
- 918ae64 docs(spec): update 006 docs for main's #14-#19
- f3c7b0e docs: document rendered dry-run, format problems, --preview and --format md
- 2e8e29b docs: use config.json for sign-in setup
- 187fbce feat(crap-gate): CRAP score, cover/gocyclo/baseline parsers, ratchet check
- f6f168b feat(msgbody): render bodies per target with markdown escaping
- 44ce390 feat: --format md for mail; reject other --format values
- e510861 feat: --preview draws the message as a text box
- 14f3bb5 feat: block sends with format problems; dry-run lists them
- 9d79a95 feat: render bodies before dry-run and send them unchanged
- f544fc4 fix(acceptance): fail on steps with no handler (SDO-566)
- 9e3e86d fix(acceptance): name generated tests by feature path; clear stale; fail on clash
- d834e91 fix(acceptance): no silent skips in the feature parser; word-bounded prefixes
- 52c0b4f fix(acceptance): one feature list, case-insensitive clashes, staged output
- 403b109 fix(acceptance): reject doc strings and data tables in features
- f127279 fix(acceptance): stage generated tests inside the output folder
- d0b5246 fix(cli): close redaction leaks found in Codex review
- 3f8e892 fix(cli): keep the closing quote around a redacted plain value
- 553e5a8 fix(cli): redact JSON nested in a string value as JSON
- 8ca5f56 fix(cli): redact adjacent plain lines together in mixed output
- 79985ed fix(cli): redact an unterminated quoted value to the end of the line
- a957fae fix(cli): redact any value type under a secret-named key
- bf0365d fix(cli): redact inside JSON string values so output stays valid
- e35d9d6 fix(cli): stop HTML-escaping error JSON and --human output
- e6a58cc fix(cli): teams watch JSON lines keep <, > and & literal
- a5cd297 fix(crap-gate): address Codex review of PR #22
- 7028f11 fix(crap-gate): baseline entries may have paths with spaces
- 4f9c176 fix(crap-gate): number same-name functions by position; allow spaces in paths
- 918d305 fix(msgbody): only visible text makes a paragraph non-empty
- ca5ae2b fix(msgbody): subject problems in document order; split lint ordering
- 49b61f3 fix: address Codex review of PR #20
- 67bf642 fix: address second Codex review of PR #20
- 2753609 fix: address third Codex review of PR #20
- bcc07ef refactor(acceptance): drop 006's step guard and feature name prefixes
- fd19361 refactor(cli): split mail.go by verb behind a dispatch table
- d4c18...