<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="164432" data-post-id="164432">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks! I agree that using only/except would make inclusion/exclusion property more explicit. I think in this case it should be <code>ecto: [only: [Ecto.Changeset]]</code>, right?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164432" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-164432" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164432"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="164436" data-post-id="164436">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="LostKobrakai" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/LostKobrakai/120/3072_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  LostKobrakai
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, that’s even better.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164436" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-164436" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164436"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="164619" data-post-id="164619">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sasajuric" data-post="30" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>defmodule MySystemWeb do use Boundary, externals: [ecto: [Ecto.Changeset]] end</p>
</blockquote>
</aside>
<p>From this call how does Boundary determine what calls are allowed? Does it look at the first part of the module (<code>Ecto</code>) or does it do something else such as look at all the modules in the OTP application that contains <code>Ecto</code>? For example if ecto defined <code>EctoChangeset</code> (instead of <code>Ecto.Changeset</code>) would it still be caught by Boundary?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164619" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-164619" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164619"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="164621" data-post-id="164621">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>First off, based on comments by <a class="mention" href="/u/lostkobrakai" rel="nofollow">@LostKobrakai</a>, the interface is now <code>ecto: [only: [Ecto.Changeset]]</code> (or <code>except: [...]</code>).</p>
<p>This means that calls to, <code>Ecto.Changeset</code> as well as <code>Ecto.Changeset.Foo</code>, or <code>Ecto.Changeset.Bar.Baz</code>, etc are allowed.</p>
<p>Suppose you make the call to <code>Ecto.Changeset.Foo.bar</code>. Boundary will compare the callee module (<code>Ecto.Changeset.Foo</code>) with the allowed ones. If any of the allowed modules is a prefix of the callee, the call is allowed. Otherwise (e.g. <code>EctoChangeset</code>) it is reported as a warning (you can see this in the example screenshot I made earlier, where <code>Ecto.Query.from</code> is forbidden).</p>
<p>In the case of <code>except</code> it’s works the same, but if there’s a match the call is reported, otherwise it’s allowed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164621" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-164621" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164621"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="164623" data-post-id="164623">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sasajuric" data-post="35" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>Suppose you make the call to <code>Ecto.Changeset.Foo.bar</code> . Boundary will compare the callee module ( <code>Ecto.Changeset.Foo</code> ) with the allowed ones. If any of the allowed modules is a prefix of the callee, the call is allowed. Otherwise (e.g. <code>EctoChangeset</code> ) it is reported as a warning (you can see this in the example screenshot I made earlier, where <code>Ecto.Query.from</code> is forbidden).</p>
</blockquote>
</aside>
<p>But how does Boundary not flag a call to a separate dependency, such as a call to <code>Plug.Conn.assign/3</code> as a warning. Does Boundary look at all modules contained within a dependency?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164623" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-164623" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164623"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="164625" data-post-id="164625">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>To make it less disruptive, boundary only considers calls to deps (apps) you’ve explicitly listed in the <code>:externals</code> list. So, considering the following example</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">use Boundary, externals: [ecto: {:only, [Ecto.Changeset]}]
</code></pre>
<p>Calls to modules from <code>:ecto</code> app are analyzed. Calls to non-listed deps (phoenix, plug, jason, etc) are always permitted. Finally, in-app calls are always analyzed.</p>
<p>Does that make sense?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164625" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-164625" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164625"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="164654" data-post-id="164654">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sasajuric" data-post="37" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>Calls to modules from <code>:ecto</code> app are analyzed. Calls to non-listed deps (phoenix, plug, jason, etc) are always permitted. Finally, in-app calls are always analyzed.</p>
<p>Does that make sense?</p>
</blockquote>
</aside>
<p>I would prefer it to be strict, thus to require us to list all external dependencies we want to use.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164654" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-164654" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164654"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="164659" data-post-id="164659">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sasajuric" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/120/991_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sasajuric
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Elixir In Action</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>FWIW, I’m actively thinking about strict, and would at least like to support it as a per-project opt-in. It would look something like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystem.MixProject do
  def project do
    [
      boundary: [externals: :strict],
      # ...
    ]
  end
end
</code></pre>
<p>At which point you’d need to explicitly approve each external dep in every boundary.</p>
<p>I wouldn’t set this as a default b/c I feel it might turn out to be very disruptive and turn away most users. I’d like to keep boundary as relatively low ceremony for people starting with it, but at the same time I’d like to make it possible to introduce stricter rules for teams who want to enforce tighter control.</p>
<p>Another thing I’m considering is combining external boundaries together with regular boundaries. For example, consider the sample web boundary:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystemWeb do
  use Boundary,
    deps: [MySystem],
    externals: [ecto: {:only, [Ecto.Changeset]}]
</code></pre>
<p>I’m thinking about turning this into</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystemWeb do
  use Boundary, deps: [MySystem, Ecto.Changeset]
</code></pre>
<p>So basically, we treat stuff from external apps as ad-hoc boundaries (in future we might also leverage deps boundaries meta if such exists, as proposed by <a class="mention" href="/u/michalmuskala" rel="nofollow">@michalmuskala</a> <a href="https://twitter.com/michalmuskala/status/1231520732104007681" rel="noopener nofollow ugc">here</a>).</p>
<p>The project-level <code>:externals</code> mode would determine what to do with unlisted boundaries. E.g. if you set <code>externals: :relaxed</code> (default), all calls to other apps are allowed, but if you include some boundaries from another app then only those boundaries are permitted. OTOH if you set <code>externals: :strict</code>, you need to explicitly approve every external dep. In most cases that would mean approving the top-level module (e.g. including <code>Phoenix</code> in the boundary list). Calls to Erlang modules would be completely ignored, at least in this phase of development.</p>
<p>Thoughts?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164659" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-164659" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164659"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="164664" data-post-id="164664">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Exadra37" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Exadra37/120/9183_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Exadra37
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sasajuric" data-post="39" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>FWIW, I’m actively thinking about strict, and would at least like to support it as a per-project opt-in. It would look something like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystem.MixProject do
  def project do
    [
      boundary: [externals: :strict],
      # ...
    ]
  end
end
</code></pre>
<p>At which point you’d need to explicitly approve each external dep in every boundary.</p>
<p>I wouldn’t set this as a default b/c I feel it might turn out to be very disruptive and turn away most users. I’d like to keep boundary as relatively low ceremony for people starting with it, but at the same time I’d like to make it possible to introduce stricter rules for teams who want to enforce tighter control.</p>
</blockquote>
</aside>
<p>I can live with it ;), and yes I think it’s the most sensible option to go with, <code>relaxed</code> by default, <code>strict</code> by opti-in.</p>
<aside class="quote no-group" data-username="sasajuric" data-post="39" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>Another thing I’m considering is combining external boundaries together with regular boundaries. For example, consider the sample web boundary:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystemWeb do
  use Boundary,
    deps: [MySystem],
    externals: [ecto: {:only, [Ecto.Changeset]}]
</code></pre>
<p>I’m thinking about turning this into</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MySystemWeb do
  use Boundary, deps: [MySystem, Ecto.Changeset]
</code></pre>
<p>So basically, we treat stuff from external apps as ad-hoc boundaries (in future we might also leverage deps boundaries meta if such exists, as proposed by <a class="mention" href="/u/michalmuskala" rel="nofollow">@michalmuskala</a> <a href="https://twitter.com/michalmuskala/status/1231520732104007681" rel="noopener nofollow ugc">here</a>).</p>
</blockquote>
</aside>
<p>Despite I never used this Library it looks like a sensible approach to go with <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164664" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-164664" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164664"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="164678" data-post-id="164678">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="axelson" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/axelson/120/26351_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  axelson
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Scenic Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sasajuric" data-post="37" data-topic="24623">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sasajuric/48/991_2.png" class="avatar"> sasajuric:</div>
<blockquote>
<p>Calls to modules from <code>:ecto</code> app are analyzed. Calls to non-listed deps (phoenix, plug, jason, etc) are always permitted. Finally, in-app calls are always analyzed.</p>
<p>Does that make sense?</p>
</blockquote>
</aside>
<p>Yes that makes sense <img src="https://forum.elixirforum.com/images/emoji/apple/+1.png?v=15" title=":+1:" class="emoji" alt=":+1:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="164678" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/boundary-enforcing-boundaries-in-elixir-projects/24623/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-164678" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="164678"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/24623/load_more?page=5">Load more posts (9 remaining)</a>
</div></template></turbo-stream>